LCOV - code coverage report
Current view: top level - sw/source/filter/rtf - swparrtf.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 11 2198 0.5 %
Date: 2012-08-25 Functions: 3 86 3.5 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 2 3582 0.1 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*************************************************************************
       3                 :            :  *
       4                 :            :  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
       5                 :            :  *
       6                 :            :  * Copyright 2000, 2010 Oracle and/or its affiliates.
       7                 :            :  *
       8                 :            :  * OpenOffice.org - a multi-platform office productivity suite
       9                 :            :  *
      10                 :            :  * This file is part of OpenOffice.org.
      11                 :            :  *
      12                 :            :  * OpenOffice.org is free software: you can redistribute it and/or modify
      13                 :            :  * it under the terms of the GNU Lesser General Public License version 3
      14                 :            :  * only, as published by the Free Software Foundation.
      15                 :            :  *
      16                 :            :  * OpenOffice.org is distributed in the hope that it will be useful,
      17                 :            :  * but WITHOUT ANY WARRANTY; without even the implied warranty of
      18                 :            :  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      19                 :            :  * GNU Lesser General Public License version 3 for more details
      20                 :            :  * (a copy is included in the LICENSE file that accompanied this code).
      21                 :            :  *
      22                 :            :  * You should have received a copy of the GNU Lesser General Public License
      23                 :            :  * version 3 along with OpenOffice.org.  If not, see
      24                 :            :  * <http://www.openoffice.org/license.html>
      25                 :            :  * for a copy of the LGPLv3 License.
      26                 :            :  *
      27                 :            :  ************************************************************************/
      28                 :            : 
      29                 :            : #include <hintids.hxx>
      30                 :            : 
      31                 :            : #include <stack>
      32                 :            : 
      33                 :            : #include <tools/errinf.hxx>
      34                 :            : #include <tools/stream.hxx>
      35                 :            : #include <tools/helpers.hxx>
      36                 :            : #include <svl/itemiter.hxx>
      37                 :            : #include <svtools/rtftoken.h>
      38                 :            : #include <svtools/miscopt.hxx>
      39                 :            : #include <svl/intitem.hxx>
      40                 :            : #include <editeng/fhgtitem.hxx>
      41                 :            : #include <editeng/ulspitem.hxx>
      42                 :            : #include <editeng/tstpitem.hxx>
      43                 :            : #include <editeng/lspcitem.hxx>
      44                 :            : #include <editeng/lrspitem.hxx>
      45                 :            : #include <editeng/escpitem.hxx>
      46                 :            : #include <editeng/fontitem.hxx>
      47                 :            : #include <editeng/frmdiritem.hxx>
      48                 :            : #include <editeng/hyznitem.hxx>
      49                 :            : #include <fmtpdsc.hxx>
      50                 :            : #include <fmtfld.hxx>
      51                 :            : #include <fmthdft.hxx>
      52                 :            : #include <fmtcntnt.hxx>
      53                 :            : #include <txtftn.hxx>
      54                 :            : #include <fmtclds.hxx>
      55                 :            : #include <fmtftn.hxx>
      56                 :            : #include <fmtfsize.hxx>
      57                 :            : #include <fmtflcnt.hxx>
      58                 :            : #include <fmtanchr.hxx>
      59                 :            : #include <frmatr.hxx>
      60                 :            : #include <docstat.hxx>
      61                 :            : #include <swtable.hxx>
      62                 :            : #include <shellio.hxx>
      63                 :            : #include <swtypes.hxx>
      64                 :            : #include <ndtxt.hxx>
      65                 :            : #include <doc.hxx>
      66                 :            : #include <docary.hxx>
      67                 :            : #include <pam.hxx>
      68                 :            : #include <mdiexp.hxx>           // ...Percent()
      69                 :            : #include <swparrtf.hxx>
      70                 :            : #include <charfmt.hxx>
      71                 :            : #include <pagedesc.hxx>
      72                 :            : #include <ftninfo.hxx>
      73                 :            : #include <docufld.hxx>
      74                 :            : #include <flddat.hxx>
      75                 :            : #include <fltini.hxx>
      76                 :            : #include <fchrfmt.hxx>
      77                 :            : #include <paratr.hxx>
      78                 :            : #include <section.hxx>
      79                 :            : #include <fmtclbl.hxx>
      80                 :            : #include <viewsh.hxx>
      81                 :            : #include <shellres.hxx>
      82                 :            : #include <hfspacingitem.hxx>
      83                 :            : #include <tox.hxx>
      84                 :            : #include <swerror.h>
      85                 :            : #include <cmdid.h>
      86                 :            : #include <statstr.hrc>          // ResId fuer Statusleiste
      87                 :            : #include <SwStyleNameMapper.hxx>
      88                 :            : #include <tblsel.hxx>           // SwSelBoxes
      89                 :            : 
      90                 :            : #include <docsh.hxx>
      91                 :            : #include <fmtlsplt.hxx> // SwLayoutSplit
      92                 :            : #include <editeng/keepitem.hxx>
      93                 :            : #include <svx/svdopath.hxx>
      94                 :            : #include <svx/svdorect.hxx>
      95                 :            : 
      96                 :            : 
      97                 :            : #include <fmtsrnd.hxx>
      98                 :            : #include <fmtfollowtextflow.hxx>
      99                 :            : #include <svx/svdmodel.hxx>
     100                 :            : #include <svx/svdpage.hxx>
     101                 :            : #include <editeng/opaqitem.hxx>
     102                 :            : #include "svx/svdograf.hxx"
     103                 :            : #include <svx/xflclit.hxx>
     104                 :            : #include <svx/xlnwtit.hxx>
     105                 :            : #include <svx/svdoutl.hxx>
     106                 :            : #include <unotools/streamwrap.hxx>
     107                 :            : #include <comphelper/processfactory.hxx>
     108                 :            : #include <comphelper/string.hxx>
     109                 :            : #include <editeng/outlobj.hxx>
     110                 :            : #include <editeng/paperinf.hxx>
     111                 :            : 
     112                 :            : #include <basegfx/polygon/b2dpolygon.hxx>
     113                 :            : #include <basegfx/polygon/b2dpolypolygon.hxx>
     114                 :            : #include <basegfx/range/b2drange.hxx>
     115                 :            : 
     116                 :            : #include <com/sun/star/document/XDocumentPropertiesSupplier.hpp>
     117                 :            : #include <com/sun/star/document/XFilter.hpp>
     118                 :            : #include <com/sun/star/document/XImporter.hpp>
     119                 :            : #include <com/sun/star/document/XExporter.hpp>
     120                 :            : 
     121                 :            : 
     122                 :            : using namespace ::com::sun::star;
     123                 :            : 
     124                 :            : 
     125                 :            : // einige Hilfs-Funktionen
     126                 :            : // char
     127                 :          0 : inline const SvxFontHeightItem& GetSize(const SfxItemSet& rSet,sal_Bool bInP=sal_True)
     128                 :          0 :     { return (const SvxFontHeightItem&)rSet.Get( RES_CHRATR_FONTSIZE,bInP); }
     129                 :          0 : inline const SvxLRSpaceItem& GetLRSpace(const SfxItemSet& rSet,sal_Bool bInP=sal_True)
     130                 :          0 :     { return (const SvxLRSpaceItem&)rSet.Get( RES_LR_SPACE,bInP); }
     131                 :            : 
     132                 :            : 
     133                 :            : /// Glue class to call RtfImport as an internal filter, needed by copy&paste support.
     134         [ #  # ]:          0 : class SwRTFReader : public Reader
     135                 :            : {
     136                 :            :     virtual sal_uLong Read( SwDoc &, const String& rBaseURL, SwPaM &,const String &);
     137                 :            : };
     138                 :            : 
     139                 :          0 : sal_uLong SwRTFReader::Read( SwDoc &rDoc, const String& /*rBaseURL*/, SwPaM& /*rPam*/, const String &)
     140                 :            : {
     141         [ #  # ]:          0 :     if (!pStrm)
     142                 :          0 :         return ERR_SWG_READ_ERROR;
     143                 :            : 
     144                 :          0 :     SwDocShell *pDocShell(rDoc.GetDocShell());
     145         [ #  # ]:          0 :     uno::Reference<lang::XMultiServiceFactory> xMultiServiceFactory(comphelper::getProcessServiceFactory());
     146         [ #  # ]:          0 :     uno::Reference<uno::XInterface> xInterface(xMultiServiceFactory->createInstance(
     147 [ #  # ][ #  # ]:          0 :         rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("com.sun.star.comp.Writer.RtfFilter"))), uno::UNO_QUERY_THROW);
                 [ #  # ]
     148                 :            : 
     149         [ #  # ]:          0 :     uno::Reference<document::XImporter> xImporter(xInterface, uno::UNO_QUERY_THROW);
     150 [ #  # ][ #  # ]:          0 :     uno::Reference<lang::XComponent> xDstDoc(pDocShell->GetModel(), uno::UNO_QUERY_THROW);
     151 [ #  # ][ #  # ]:          0 :     xImporter->setTargetDocument(xDstDoc);
     152                 :            : 
     153         [ #  # ]:          0 :     uno::Reference<document::XFilter> xFilter(xInterface, uno::UNO_QUERY_THROW);
     154         [ #  # ]:          0 :     uno::Sequence<beans::PropertyValue> aDescriptor(1);
     155 [ #  # ][ #  # ]:          0 :     aDescriptor[0].Name = rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("InputStream"));
     156 [ #  # ][ #  # ]:          0 :     uno::Reference<io::XStream> xStream(new utl::OStreamWrapper(*pStrm));
                 [ #  # ]
     157 [ #  # ][ #  # ]:          0 :     aDescriptor[0].Value <<= xStream;
     158 [ #  # ][ #  # ]:          0 :     xFilter->filter(aDescriptor);
     159                 :            : 
     160         [ #  # ]:          0 :     return 0;
     161                 :            : }
     162                 :            : 
     163                 :          0 : extern "C" SAL_DLLPUBLIC_EXPORT Reader* SAL_CALL ImportRTF()
     164                 :            : {
     165                 :            :     // Use the old rtf importer by default for paste, till the new one supports
     166                 :            :     // undo stack and PaM.
     167         [ #  # ]:          0 :     SvtMiscOptions aMiscOptions;
     168 [ #  # ][ #  # ]:          0 :     if (!aMiscOptions.IsExperimentalMode())
     169 [ #  # ][ #  # ]:          0 :         return new RtfReader();
     170 [ #  # ][ #  # ]:          0 :     return new SwRTFReader();
                 [ #  # ]
     171                 :            : }
     172                 :            : 
     173                 :            : // Aufruf fuer die allg. Reader-Schnittstelle
     174                 :          0 : sal_uLong RtfReader::Read( SwDoc &rDoc, const String& rBaseURL, SwPaM &rPam, const String &)
     175                 :            : {
     176         [ #  # ]:          0 :     if( !pStrm )
     177                 :            :     {
     178                 :            :         OSL_FAIL( "RTF-Read ohne Stream" );
     179                 :          0 :         return ERR_SWG_READ_ERROR;
     180                 :            :     }
     181                 :            : 
     182         [ #  # ]:          0 :     if( !bInsertMode )
     183                 :            :     {
     184                 :            :         // MIB 27.09.96: Umrandung uns Abstaende aus Frm-Vorlagen entf.
     185         [ #  # ]:          0 :         Reader::ResetFrmFmts( rDoc );
     186                 :            :     }
     187                 :            : 
     188                 :          0 :     sal_uLong nRet = 0;
     189                 :          0 :     SwDocShell *pDocShell(rDoc.GetDocShell());
     190                 :            :     OSL_ENSURE(pDocShell, "no SwDocShell");
     191                 :          0 :     uno::Reference<document::XDocumentProperties> xDocProps;
     192         [ #  # ]:          0 :     if (pDocShell) {
     193                 :            :         uno::Reference<document::XDocumentPropertiesSupplier> xDPS(
     194 [ #  # ][ #  # ]:          0 :             pDocShell->GetModel(), uno::UNO_QUERY_THROW);
     195 [ #  # ][ #  # ]:          0 :         xDocProps.set(xDPS->getDocumentProperties());
                 [ #  # ]
     196                 :            :     }
     197                 :            : 
     198                 :            :     SvParserRef xParser = new SwRTFParser( &rDoc, xDocProps,
     199 [ #  # ][ #  # ]:          0 :                                 rPam, *pStrm, rBaseURL, !bInsertMode );
     200         [ #  # ]:          0 :     SvParserState eState = xParser->CallParser();
     201 [ #  # ][ #  # ]:          0 :     if( SVPAR_PENDING != eState && SVPAR_ACCEPTED != eState )
     202                 :            :     {
     203         [ #  # ]:          0 :         String sErr( String::CreateFromInt32( xParser->GetLineNr() ));
     204         [ #  # ]:          0 :         sErr += ',';
     205 [ #  # ][ #  # ]:          0 :         sErr += String::CreateFromInt32( xParser->GetLinePos() );
                 [ #  # ]
     206                 :            : 
     207                 :            :         nRet = *new StringErrorInfo( ERR_FORMAT_ROWCOL, sErr,
     208 [ #  # ][ #  # ]:          0 :                                     ERRCODE_BUTTON_OK | ERRCODE_MSG_ERROR );
         [ #  # ][ #  # ]
     209                 :            :     }
     210                 :            : 
     211                 :            : 
     212         [ #  # ]:          0 :     return nRet;
     213                 :            : }
     214                 :            : 
     215                 :          0 : sal_uLong RtfReader::Read(SvStream* pStream, SwDoc& rDoc, const String& rBaseURL, SwPaM& rPam)
     216                 :            : {
     217                 :          0 :     pStrm = pStream;
     218                 :          0 :     return Read(rDoc, rBaseURL, rPam, rBaseURL);
     219                 :            : }
     220                 :            : 
     221                 :          0 : SwRTFParser::SwRTFParser(SwDoc* pD,
     222                 :            :         uno::Reference<document::XDocumentProperties> i_xDocProps,
     223                 :            :         const SwPaM& rCrsr, SvStream& rIn, const String& rBaseURL,
     224                 :            :         int bReadNewDoc) :
     225                 :          0 :     SvxRTFParser(pD->GetAttrPool(), rIn, i_xDocProps, bReadNewDoc),
     226                 :            :     maParaStyleMapper(*pD),
     227                 :            :     maCharStyleMapper(*pD),
     228                 :            :     maSegments(*this),
     229                 :            :     maInsertedTables(*pD),
     230                 :            :     mpBookmarkStart(0),
     231                 :            :     mpRedlineStack(0),
     232                 :            :     pGrfAttrSet(0),
     233                 :            :     pTableNode(0),
     234                 :            :     pOldTblNd(0),
     235                 :            :     pSttNdIdx(0),
     236                 :            :     pRegionEndIdx(0),
     237                 :            :     pDoc(pD),
     238         [ #  # ]:          0 :     pRelNumRule(new SwRelNumRuleSpaces(*pD, static_cast< sal_Bool >(bReadNewDoc))),
     239                 :            :     pRedlineInsert(0),
     240                 :            :     pRedlineDelete(0),
     241                 :            :     sBaseURL( rBaseURL ),
     242                 :            :     nAktPageDesc(0),
     243                 :            :     nAktFirstPageDesc(0),
     244                 :            :     m_nCurrentBox(0),
     245                 :            :     nInsTblRow(USHRT_MAX),
     246                 :            :     nNewNumSectDef(USHRT_MAX),
     247                 :            :     nRowsToRepeat(0),
     248                 :            :     mbReadCellWhileReadSwFly( false ), // #i83368#
     249                 :            : 
     250                 :            :     bTrowdRead(0),
     251                 :            :     nReadFlyDepth(0),
     252 [ #  # ][ #  # ]:          0 :     nZOrder(0)
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     253                 :            : {
     254                 :            :     mbIsFootnote = mbReadNoTbl = bReadSwFly = bSwPageDesc = bStyleTabValid =
     255                 :          0 :     bInPgDscTbl = bNewNumList = false;
     256                 :          0 :     bFirstContinue = true;
     257                 :          0 :     bContainsPara = false;
     258                 :          0 :     bContainsTablePara = false;
     259                 :          0 :     bNestedField = false;
     260                 :          0 :     bForceNewTable = false;
     261                 :            : 
     262 [ #  # ][ #  # ]:          0 :     pPam = new SwPaM( *rCrsr.GetPoint() );
     263         [ #  # ]:          0 :     SetInsPos( SwxPosition( pPam ) );
     264                 :          0 :     SetChkStyleAttr( 0 != bReadNewDoc );
     265                 :          0 :     SetCalcValue( sal_False );
     266                 :          0 :     SetReadDocInfo( sal_True );
     267                 :            : 
     268                 :            :     // diese sollen zusaetzlich ueber \pard zurueck gesetzt werden
     269                 :            :     sal_uInt16 temp;
     270         [ #  # ]:          0 :     temp = RES_TXTATR_CHARFMT;      AddPlainAttr( temp );
     271         [ #  # ]:          0 :     temp = RES_PAGEDESC;            AddPardAttr( temp );
     272         [ #  # ]:          0 :     temp = RES_BREAK;               AddPardAttr( temp );
     273         [ #  # ]:          0 :     temp = RES_PARATR_NUMRULE;      AddPardAttr( temp );
     274         [ #  # ]:          0 :     temp = FN_PARAM_NUM_LEVEL;          AddPardAttr( temp );
     275                 :          0 : }
     276                 :            : 
     277                 :            : // Aufruf des Parsers
     278                 :          0 : SvParserState SwRTFParser::CallParser()
     279                 :            : {
     280                 :          0 :     mbReadNoTbl = false;
     281                 :          0 :     bFirstContinue = true;
     282                 :            : 
     283                 :          0 :     rInput.Seek(STREAM_SEEK_TO_BEGIN);
     284                 :          0 :     rInput.ResetError();
     285                 :            : 
     286         [ #  # ]:          0 :     mpRedlineStack = new sw::util::RedlineStack(*pDoc);
     287                 :            : 
     288                 :          0 :     return SvxRTFParser::CallParser();
     289                 :            : }
     290                 :            : 
     291                 :          0 : bool lcl_UsedPara(SwPaM &rPam)
     292                 :            : {
     293                 :            :     const SwCntntNode* pCNd;
     294                 :            :     const SfxItemSet* pSet;
     295 [ #  # ][ #  # ]:          0 :     if( rPam.GetPoint()->nContent.GetIndex() ||
           [ #  #  #  #  
           #  # ][ #  # ]
     296                 :            :         ( 0 != ( pCNd = rPam.GetCntntNode()) &&
     297                 :            :           0 != ( pSet = pCNd->GetpSwAttrSet()) &&
     298                 :          0 :          ( SFX_ITEM_SET == pSet->GetItemState( RES_BREAK, sal_False ) ||
     299                 :          0 :            SFX_ITEM_SET == pSet->GetItemState( RES_PAGEDESC, sal_False ))))
     300                 :          0 :         return true;
     301                 :          0 :     return false;
     302                 :            : }
     303                 :            : 
     304                 :          0 : void SwRTFParser::Continue( int nToken )
     305                 :            : {
     306         [ #  # ]:          0 :     if( bFirstContinue )
     307                 :            :     {
     308                 :          0 :         bFirstContinue = sal_False;
     309                 :            : 
     310         [ #  # ]:          0 :         if (IsNewDoc())
     311                 :            :         {
     312                 :            :             //
     313                 :            :             // COMPATIBILITY FLAGS START
     314                 :            :             //
     315                 :          0 :             pDoc->set(IDocumentSettingAccess::PARA_SPACE_MAX, true);
     316                 :          0 :             pDoc->set(IDocumentSettingAccess::PARA_SPACE_MAX_AT_PAGES, true);
     317                 :          0 :             pDoc->set(IDocumentSettingAccess::TAB_COMPAT, true);
     318                 :          0 :             pDoc->set(IDocumentSettingAccess::USE_VIRTUAL_DEVICE, true);
     319                 :          0 :             pDoc->set(IDocumentSettingAccess::USE_HIRES_VIRTUAL_DEVICE, true);
     320                 :          0 :             pDoc->set(IDocumentSettingAccess::ADD_FLY_OFFSETS, true);
     321                 :          0 :             pDoc->set(IDocumentSettingAccess::ADD_EXT_LEADING, true);
     322                 :          0 :             pDoc->set(IDocumentSettingAccess::OLD_NUMBERING, false);
     323                 :          0 :             pDoc->set(IDocumentSettingAccess::IGNORE_FIRST_LINE_INDENT_IN_NUMBERING, false );
     324                 :          0 :             pDoc->set(IDocumentSettingAccess::DO_NOT_JUSTIFY_LINES_WITH_MANUAL_BREAK, false);
     325                 :          0 :             pDoc->set(IDocumentSettingAccess::OLD_LINE_SPACING, false);
     326                 :          0 :             pDoc->set(IDocumentSettingAccess::ADD_PARA_SPACING_TO_TABLE_CELLS, true);
     327                 :          0 :             pDoc->set(IDocumentSettingAccess::USE_FORMER_OBJECT_POS, false);
     328                 :          0 :             pDoc->set(IDocumentSettingAccess::USE_FORMER_TEXT_WRAPPING, false);
     329                 :          0 :             pDoc->set(IDocumentSettingAccess::CONSIDER_WRAP_ON_OBJECT_POSITION, true);
     330                 :          0 :             pDoc->set(IDocumentSettingAccess::DO_NOT_RESET_PARA_ATTRS_FOR_NUM_FONT, false); // #i53199#
     331                 :            : 
     332                 :          0 :             pDoc->set(IDocumentSettingAccess::TABLE_ROW_KEEP, true);
     333                 :          0 :             pDoc->set(IDocumentSettingAccess::IGNORE_TABS_AND_BLANKS_FOR_LINE_CALCULATION, true);
     334                 :          0 :         pDoc->set(IDocumentSettingAccess::INVERT_BORDER_SPACING, true);
     335                 :            :             //
     336                 :            :             // COMPATIBILITY FLAGS END
     337                 :            :             //
     338                 :            :         }
     339                 :            : 
     340                 :            :         // einen temporaeren Index anlegen, auf Pos 0 so wird er nicht bewegt!
     341         [ #  # ]:          0 :         pSttNdIdx = new SwNodeIndex( pDoc->GetNodes() );
     342         [ #  # ]:          0 :         if( !IsNewDoc() )       // in ein Dokument einfuegen ?
     343                 :            :         {
     344                 :          0 :             const SwPosition* pPos = pPam->GetPoint();
     345                 :          0 :             SwTxtNode* pSttNd = pPos->nNode.GetNode().GetTxtNode();
     346                 :            : 
     347         [ #  # ]:          0 :             pDoc->SplitNode( *pPos, false );
     348                 :            : 
     349         [ #  # ]:          0 :             *pSttNdIdx = pPos->nNode.GetIndex()-1;
     350         [ #  # ]:          0 :             pDoc->SplitNode( *pPos, false );
     351                 :            : 
     352         [ #  # ]:          0 :             SwPaM aInsertionRangePam( *pPos );
     353                 :            : 
     354         [ #  # ]:          0 :             pPam->Move( fnMoveBackward );
     355                 :            : 
     356                 :            :             // split any redline over the insertion point
     357         [ #  # ]:          0 :             aInsertionRangePam.SetMark();
     358         [ #  # ]:          0 :             *aInsertionRangePam.GetPoint() = *pPam->GetPoint();
     359         [ #  # ]:          0 :             aInsertionRangePam.Move( fnMoveBackward );
     360         [ #  # ]:          0 :             pDoc->SplitRedline( aInsertionRangePam );
     361                 :            : 
     362                 :            :             pDoc->SetTxtFmtColl( *pPam, pDoc->GetTxtCollFromPool
     363 [ #  # ][ #  # ]:          0 :                                  ( RES_POOLCOLL_STANDARD, false ));
     364                 :            : 
     365                 :            :             // verhinder das einlesen von Tabellen in Fussnoten / Tabellen
     366                 :          0 :             sal_uLong nNd = pPos->nNode.GetIndex();
     367         [ #  # ]:          0 :             mbReadNoTbl = 0 != pSttNd->FindTableNode() ||
     368         [ #  # ]:          0 :                         ( nNd < pDoc->GetNodes().GetEndOfInserts().GetIndex() &&
     369   [ #  #  #  # ]:          0 :                         pDoc->GetNodes().GetEndOfInserts().StartOfSectionIndex() < nNd );
         [ #  # ][ #  # ]
                 [ #  # ]
     370                 :            :         }
     371                 :            : 
     372                 :            :         // Laufbalken anzeigen, aber nur bei synchronem Call
     373                 :          0 :         sal_uLong nCurrPos = rInput.Tell();
     374                 :          0 :         rInput.Seek(STREAM_SEEK_TO_END);
     375                 :          0 :         rInput.ResetError();
     376                 :          0 :         ::StartProgress( STR_STATSTR_W4WREAD, 0, rInput.Tell(), pDoc->GetDocShell());
     377                 :          0 :         rInput.Seek( nCurrPos );
     378                 :          0 :         rInput.ResetError();
     379                 :            :     }
     380                 :            : 
     381                 :          0 :     SvxRTFParser::Continue( nToken );
     382                 :            : 
     383         [ #  # ]:          0 :     if( SVPAR_PENDING == GetStatus() )
     384                 :          0 :         return ;                // weiter gehts beim naechsten mal
     385                 :            : 
     386                 :          0 :     pRelNumRule->SetNumRelSpaces( *pDoc );
     387                 :            : 
     388                 :            :     // den Start wieder korrigieren
     389 [ #  # ][ #  # ]:          0 :     if( !IsNewDoc() && pSttNdIdx->GetIndex() )
                 [ #  # ]
     390                 :            :     {
     391                 :            :         //die Flys muessen zuerst zurecht gerueckt werden, denn sonst wird
     392                 :            :         // ein am 1. Absatz verankerter Fly falsch eingefuegt
     393         [ #  # ]:          0 :         if( SVPAR_ACCEPTED == eState )
     394                 :            :         {
     395         [ #  # ]:          0 :             if( !aFlyArr.empty() )
     396         [ #  # ]:          0 :                 SetFlysInDoc();
     397         [ #  # ]:          0 :             pRelNumRule->SetOultineRelSpaces( *pSttNdIdx, pPam->GetPoint()->nNode );
     398                 :            :         }
     399                 :            : 
     400                 :          0 :         SwTxtNode* pTxtNode = pSttNdIdx->GetNode().GetTxtNode();
     401         [ #  # ]:          0 :         SwNodeIndex aNxtIdx( *pSttNdIdx );
     402 [ #  # ][ #  # ]:          0 :         if( pTxtNode && pTxtNode->CanJoinNext( &aNxtIdx ))
         [ #  # ][ #  # ]
     403                 :            :         {
     404                 :          0 :             xub_StrLen nStt = pTxtNode->GetTxt().Len();
     405                 :            :             // wenn der Cursor noch in dem Node steht, dann setze in an das Ende
     406         [ #  # ]:          0 :             if( pPam->GetPoint()->nNode == aNxtIdx )
     407                 :            :             {
     408         [ #  # ]:          0 :                 pPam->GetPoint()->nNode = *pSttNdIdx;
     409 [ #  # ][ #  # ]:          0 :                 pPam->GetPoint()->nContent.Assign( pTxtNode, nStt );
     410                 :            :             }
     411                 :            : 
     412                 :            : #if OSL_DEBUG_LEVEL > 0
     413                 :            :             // !!! sollte nicht moeglich sein, oder ??
     414                 :            :             OSL_ENSURE( pSttNdIdx->GetIndex()+1 != pPam->GetBound( sal_True ).nNode.GetIndex(),
     415                 :            :                 "Pam.Bound1 steht noch im Node" );
     416                 :            :             OSL_ENSURE( pSttNdIdx->GetIndex()+1 != pPam->GetBound( sal_False ).nNode.GetIndex(),
     417                 :            :                 "Pam.Bound2 steht noch im Node" );
     418                 :            : 
     419                 :            : if( pSttNdIdx->GetIndex()+1 == pPam->GetBound( sal_True ).nNode.GetIndex() )
     420                 :            : {
     421                 :            :     xub_StrLen nCntPos = pPam->GetBound( sal_True ).nContent.GetIndex();
     422                 :            :     pPam->GetBound( sal_True ).nContent.Assign( pTxtNode,
     423                 :            :                     pTxtNode->GetTxt().Len() + nCntPos );
     424                 :            : }
     425                 :            : if( pSttNdIdx->GetIndex()+1 == pPam->GetBound( sal_False ).nNode.GetIndex() )
     426                 :            : {
     427                 :            :     xub_StrLen nCntPos = pPam->GetBound( sal_False ).nContent.GetIndex();
     428                 :            :     pPam->GetBound( sal_False ).nContent.Assign( pTxtNode,
     429                 :            :                     pTxtNode->GetTxt().Len() + nCntPos );
     430                 :            : }
     431                 :            : #endif
     432                 :            :             // Zeichen Attribute beibehalten!
     433                 :          0 :             SwTxtNode* pDelNd = aNxtIdx.GetNode().GetTxtNode();
     434         [ #  # ]:          0 :             if( pTxtNode->GetTxt().Len() )
     435         [ #  # ]:          0 :                 pDelNd->FmtToTxtAttr( pTxtNode );
     436                 :            :             else
     437         [ #  # ]:          0 :                 pTxtNode->ChgFmtColl( pDelNd->GetTxtColl() );
     438         [ #  # ]:          0 :             pTxtNode->JoinNext();
     439         [ #  # ]:          0 :         }
     440                 :            :     }
     441                 :            : 
     442         [ #  # ]:          0 :     if( SVPAR_ACCEPTED == eState )
     443                 :            :     {
     444                 :            :         // den letzen Bereich wieder zumachen
     445         [ #  # ]:          0 :         if( pRegionEndIdx )
     446                 :            :         {
     447                 :            :             // the last section in WW are not a balanced Section.
     448         [ #  # ]:          0 :             if( !GetVersionNo() )
     449                 :            :             {
     450                 :          0 :                 SwSectionNode* pSectNd = pRegionEndIdx->GetNode().
     451                 :          0 :                                     StartOfSectionNode()->GetSectionNode();
     452         [ #  # ]:          0 :                 if( pSectNd )
     453                 :          0 :                     pSectNd->GetSection().GetFmt()->SetFmtAttr(
     454 [ #  # ][ #  # ]:          0 :                                     SwFmtNoBalancedColumns( sal_True ) );
                 [ #  # ]
     455                 :            :             }
     456                 :            : 
     457         [ #  # ]:          0 :             DelLastNode();
     458         [ #  # ]:          0 :             pPam->GetPoint()->nNode = *pRegionEndIdx;
     459         [ #  # ]:          0 :             pPam->Move( fnMoveForward, fnGoNode );
     460 [ #  # ][ #  # ]:          0 :             delete pRegionEndIdx, pRegionEndIdx = 0;
     461                 :            :         }
     462                 :            : 
     463                 :          0 :         sal_uInt16 nPageDescOffset = pDoc->GetPageDescCnt();
     464         [ #  # ]:          0 :         maSegments.InsertSegments(IsNewDoc());
     465         [ #  # ]:          0 :         UpdatePageDescs(*pDoc, nPageDescOffset);
     466                 :            :         // following garbage collecting code has been moved from the previous
     467                 :            :         // procedure UpdatePageDescs to here in order to fix a bug
     468                 :          0 :         rtfSections::myrDummyIter aDEnd = maSegments.maDummyPageNos.rend();
     469 [ #  # ][ #  # ]:          0 :         for (rtfSections::myrDummyIter aI = maSegments.maDummyPageNos.rbegin(); aI != aDEnd; ++aI)
                 [ #  # ]
     470 [ #  # ][ #  # ]:          0 :             pDoc->DelPageDesc(*aI);
     471                 :            : 
     472         [ #  # ]:          0 :         if( !aFlyArr.empty() )
     473         [ #  # ]:          0 :             SetFlysInDoc();
     474                 :            : 
     475                 :            :         // jetzt noch den letzten ueberfluessigen Absatz loeschen
     476                 :          0 :         SwPosition* pPos = pPam->GetPoint();
     477         [ #  # ]:          0 :         if( !pPos->nContent.GetIndex() )
     478                 :            :         {
     479                 :            :             SwTxtNode* pAktNd;
     480                 :          0 :             sal_uLong nNodeIdx = pPos->nNode.GetIndex();
     481         [ #  # ]:          0 :             if( IsNewDoc() )
     482                 :            :             {
     483 [ #  # ][ #  # ]:          0 :                 SwNode* pTmp = pDoc->GetNodes()[ nNodeIdx -1 ];
     484 [ #  # ][ #  # ]:          0 :                 if( pTmp->IsCntntNode() && !pTmp->FindTableNode() )
         [ #  # ][ #  # ]
     485                 :            :                 {
     486                 :            :                     // Do not delete the paragraph if it has anchored objects:
     487                 :          0 :                     bool bAnchoredObjs = false;
     488                 :          0 :                     const SwFrmFmts* pFrmFmts = pDoc->GetSpzFrmFmts();
     489 [ #  # ][ #  # ]:          0 :                     if ( pFrmFmts && !pFrmFmts->empty() )
                 [ #  # ]
     490                 :            :                     {
     491         [ #  # ]:          0 :                         for ( sal_uInt16 nI = pFrmFmts->size(); nI; --nI )
     492                 :            :                         {
     493         [ #  # ]:          0 :                             const SwFmtAnchor & rAnchor = (*pFrmFmts)[ nI - 1 ]->GetAnchor();
     494   [ #  #  #  # ]:          0 :                             if ((FLY_AT_PARA == rAnchor.GetAnchorId()) ||
                 [ #  # ]
     495                 :          0 :                                 (FLY_AT_CHAR == rAnchor.GetAnchorId()))
     496                 :            :                             {
     497         [ #  # ]:          0 :                                 const SwPosition * pObjPos = rAnchor.GetCntntAnchor();
     498 [ #  # ][ #  # ]:          0 :                                 if ( pObjPos && nNodeIdx == pObjPos->nNode.GetIndex() )
                 [ #  # ]
     499                 :            :                                 {
     500                 :          0 :                                     bAnchoredObjs = true;
     501                 :          0 :                                     break;
     502                 :            :                                 }
     503                 :            :                             }
     504                 :            :                         }
     505                 :            :                     }
     506                 :            : 
     507         [ #  # ]:          0 :                     if ( !bAnchoredObjs )
     508         [ #  # ]:          0 :                         DelLastNode();
     509                 :            :                 }
     510                 :            :             }
     511 [ #  # ][ #  # ]:          0 :             else if (0 != (pAktNd = pDoc->GetNodes()[nNodeIdx]->GetTxtNode()))
                 [ #  # ]
     512                 :            :             {
     513 [ #  # ][ #  # ]:          0 :                 if( pAktNd->CanJoinNext( &pPos->nNode ))
     514                 :            :                 {
     515                 :          0 :                     SwTxtNode* pNextNd = pPos->nNode.GetNode().GetTxtNode();
     516 [ #  # ][ #  # ]:          0 :                     pPos->nContent.Assign( pNextNd, 0 );
     517 [ #  # ][ #  # ]:          0 :                     pPam->SetMark(); pPam->DeleteMark();
     518         [ #  # ]:          0 :                     pNextNd->JoinPrev();
     519                 :            :                 }
     520   [ #  #  #  # ]:          0 :                 else if( !pAktNd->GetTxt().Len() &&
                 [ #  # ]
     521                 :          0 :                         pAktNd->StartOfSectionIndex()+2 <
     522                 :          0 :                         pAktNd->EndOfSectionIndex() )
     523                 :            :                 {
     524         [ #  # ]:          0 :                     pPos->nContent.Assign( 0, 0 );
     525 [ #  # ][ #  # ]:          0 :                     pPam->SetMark(); pPam->DeleteMark();
     526 [ #  # ][ #  # ]:          0 :                     pDoc->GetNodes().Delete( pPos->nNode, 1 );
     527         [ #  # ]:          0 :                     pPam->Move( fnMoveBackward );
     528                 :            :                 }
     529                 :            :             }
     530                 :            :         }
     531                 :            :         // nun noch das SplitNode vom Ende aufheben
     532         [ #  # ]:          0 :         else if( !IsNewDoc() )
     533                 :            :         {
     534         [ #  # ]:          0 :             if( pPos->nContent.GetIndex() )     // dann gabs am Ende kein \par,
     535         [ #  # ]:          0 :                 pPam->Move( fnMoveForward, fnGoNode );  // als zum naechsten Node
     536                 :          0 :             SwTxtNode* pTxtNode = pPos->nNode.GetNode().GetTxtNode();
     537         [ #  # ]:          0 :             SwNodeIndex aPrvIdx( pPos->nNode );
     538 [ #  # ][ #  # ]:          0 :             if( pTxtNode && pTxtNode->CanJoinPrev( &aPrvIdx ) &&
           [ #  #  #  # ]
                 [ #  # ]
     539                 :          0 :                 *pSttNdIdx <= aPrvIdx )
     540                 :            :             {
     541                 :            :                 // eigentlich muss hier ein JoinNext erfolgen, aber alle Cursor
     542                 :            :                 // usw. sind im pTxtNode angemeldet, so dass der bestehen
     543                 :            :                 // bleiben MUSS.
     544                 :            : 
     545                 :            :                 // Absatz in Zeichen-Attribute umwandeln, aus dem Prev die
     546                 :            :                 // Absatzattribute und die Vorlage uebernehmen!
     547                 :          0 :                 SwTxtNode* pPrev = aPrvIdx.GetNode().GetTxtNode();
     548         [ #  # ]:          0 :                 pTxtNode->ChgFmtColl( pPrev->GetTxtColl() );
     549         [ #  # ]:          0 :                 pTxtNode->FmtToTxtAttr( pPrev );
     550         [ #  # ]:          0 :                 pTxtNode->ResetAllAttr();
     551                 :            : 
     552 [ #  # ][ #  # ]:          0 :                 if( pPrev->HasSwAttrSet() )
     553 [ #  # ][ #  # ]:          0 :                     pTxtNode->SetAttr( *pPrev->GetpSwAttrSet() );
     554                 :            : 
     555 [ #  # ][ #  # ]:          0 :                 if( &pPam->GetBound(sal_True).nNode.GetNode() == pPrev )
     556 [ #  # ][ #  # ]:          0 :                     pPam->GetBound(sal_True).nContent.Assign( pTxtNode, 0 );
     557 [ #  # ][ #  # ]:          0 :                 if( &pPam->GetBound(sal_False).nNode.GetNode() == pPrev )
     558 [ #  # ][ #  # ]:          0 :                     pPam->GetBound(sal_False).nContent.Assign( pTxtNode, 0 );
     559                 :            : 
     560         [ #  # ]:          0 :                 pTxtNode->JoinPrev();
     561         [ #  # ]:          0 :             }
     562                 :            :         }
     563                 :            :     }
     564         [ #  # ]:          0 :     delete pSttNdIdx, pSttNdIdx = 0;
     565         [ #  # ]:          0 :     delete pRegionEndIdx, pRegionEndIdx = 0;
     566                 :          0 :     RemoveUnusedNumRules();
     567                 :            : 
     568                 :          0 :     pDoc->SetUpdateExpFldStat(true);
     569                 :          0 :     pDoc->SetInitDBFields(true);
     570                 :            : 
     571                 :            :     // Laufbalken bei asynchronen Call nicht einschalten !!!
     572                 :          0 :     ::EndProgress( pDoc->GetDocShell() );
     573                 :            : }
     574                 :            : 
     575                 :          0 : bool rtfSections::SetCols(SwFrmFmt &rFmt, const rtfSection &rSection,
     576                 :            :     sal_uInt16 nNettoWidth)
     577                 :            : {
     578                 :            :     //sprmSCcolumns - Anzahl der Spalten - 1
     579                 :          0 :     sal_uInt16 nCols = static_cast< sal_uInt16 >(rSection.NoCols());
     580                 :            : 
     581         [ #  # ]:          0 :     if (nCols < 2)
     582                 :          0 :         return false;                   // keine oder bloedsinnige Spalten
     583                 :            : 
     584         [ #  # ]:          0 :     SwFmtCol aCol;                      // Erzeuge SwFmtCol
     585                 :            : 
     586                 :            :     //sprmSDxaColumns   - Default-Abstand 1.25 cm
     587                 :          0 :     sal_uInt16 nColSpace = static_cast< sal_uInt16 >(rSection.StandardColSeperation());
     588                 :            : 
     589         [ #  # ]:          0 :     aCol.Init( nCols, nColSpace, nNettoWidth );
     590                 :            : 
     591                 :            :     // not SFEvenlySpaced
     592         [ #  # ]:          0 :     if (rSection.maPageInfo.maColumns.size())
     593                 :            :     {
     594                 :          0 :         aCol._SetOrtho(false);
     595                 :          0 :         sal_uInt16 nWishWidth = 0, nHalfPrev = 0;
     596 [ #  # ][ #  # ]:          0 :         for (sal_uInt16 n=0, i=0;
                 [ #  # ]
     597                 :          0 :              (static_cast<size_t>(n)+1) < rSection.maPageInfo.maColumns.size() && i < nCols;
     598                 :            :              n += 2, ++i)
     599                 :            :         {
     600         [ #  # ]:          0 :             SwColumn* pCol = &aCol.GetColumns()[ i ];
     601                 :          0 :             pCol->SetLeft( nHalfPrev );
     602         [ #  # ]:          0 :             sal_uInt16 nSp = static_cast< sal_uInt16 >(rSection.maPageInfo.maColumns[ n+1 ]);
     603                 :          0 :             nHalfPrev = nSp / 2;
     604                 :          0 :             pCol->SetRight( nSp - nHalfPrev );
     605         [ #  # ]:          0 :             pCol->SetWishWidth( static_cast< sal_uInt16 >(rSection.maPageInfo.maColumns[ n ]) +
     606                 :          0 :                 pCol->GetLeft() + pCol->GetRight());
     607                 :          0 :             nWishWidth = nWishWidth + pCol->GetWishWidth();
     608                 :            :         }
     609                 :          0 :         aCol.SetWishWidth( nWishWidth );
     610                 :            :     }
     611                 :            : 
     612         [ #  # ]:          0 :     rFmt.SetFmtAttr(aCol);
     613         [ #  # ]:          0 :     return true;
     614                 :            : }
     615                 :            : 
     616                 :          0 : void rtfSections::SetPage(SwPageDesc &rInPageDesc, SwFrmFmt &rFmt,
     617                 :            :     const rtfSection &rSection, bool bIgnoreCols)
     618                 :            : {
     619                 :            :     // 1. Orientierung
     620                 :          0 :     rInPageDesc.SetLandscape(rSection.IsLandScape());
     621                 :            : 
     622                 :            :     // 2. Papiergroesse
     623 [ #  # ][ #  # ]:          0 :     SwFmtFrmSize aSz(rFmt.GetFrmSize());
     624                 :          0 :     aSz.SetWidth(rSection.GetPageWidth());
     625                 :          0 :     aSz.SetHeight(rSection.GetPageHeight());
     626         [ #  # ]:          0 :     rFmt.SetFmtAttr(aSz);
     627                 :            : 
     628                 :            :     rFmt.SetFmtAttr(
     629 [ #  # ][ #  # ]:          0 :         SvxLRSpaceItem(rSection.GetPageLeft(), rSection.GetPageRight(), 0, 0, RES_LR_SPACE));
                 [ #  # ]
     630                 :            : 
     631         [ #  # ]:          0 :     if (!bIgnoreCols)
     632                 :            :     {
     633                 :          0 :         SetCols(rFmt, rSection, static_cast< sal_uInt16 >(rSection.GetPageWidth() -
     634         [ #  # ]:          0 :             rSection.GetPageLeft() - rSection.GetPageRight()));
     635                 :            :     }
     636                 :            : 
     637 [ #  # ][ #  # ]:          0 :     rFmt.SetFmtAttr(rSection.maPageInfo.maBox);
     638                 :          0 : }
     639                 :            : 
     640                 :          0 : bool HasHeader(const SwFrmFmt &rFmt)
     641                 :            : {
     642                 :            :     const SfxPoolItem *pHd;
     643 [ #  # ][ #  # ]:          0 :     if (SFX_ITEM_SET == rFmt.GetItemState(RES_HEADER, false, &pHd))
     644                 :          0 :         return ((const SwFmtHeader *)(pHd))->IsActive();
     645                 :          0 :     return false;
     646                 :            : }
     647                 :            : 
     648                 :          0 : bool HasFooter(const SwFrmFmt &rFmt)
     649                 :            : {
     650                 :            :     const SfxPoolItem *pFt;
     651 [ #  # ][ #  # ]:          0 :     if (SFX_ITEM_SET == rFmt.GetItemState(RES_FOOTER, false, &pFt))
     652                 :          0 :         return ((const SwFmtFooter *)(pFt))->IsActive();
     653                 :          0 :     return false;
     654                 :            : }
     655                 :            : 
     656                 :          0 : void rtfSections::GetPageULData(const rtfSection &rSection, bool bFirst,
     657                 :            :     rtfSections::wwULSpaceData& rData)
     658                 :            : {
     659                 :          0 :     short nWWUp     = static_cast< short >(rSection.maPageInfo.mnMargtsxn);
     660                 :          0 :     short nWWLo     = static_cast< short >(rSection.maPageInfo.mnMargbsxn);
     661                 :          0 :     short nWWHTop   = static_cast< short >(rSection.maPageInfo.mnHeadery);
     662                 :          0 :     short nWWFBot   = static_cast< short >(rSection.maPageInfo.mnFootery);
     663                 :            : 
     664         [ #  # ]:          0 :     if (bFirst)
     665                 :            :     {
     666   [ #  #  #  # ]:          0 :         if (
                 [ #  # ]
     667                 :          0 :             rSection.mpTitlePage && HasHeader(rSection.mpTitlePage->GetMaster())
     668                 :            :            )
     669                 :            :         {
     670                 :          0 :             rData.bHasHeader = true;
     671                 :            :         }
     672                 :            :     }
     673                 :            :     else
     674                 :            :     {
     675   [ #  #  #  #  :          0 :         if (rSection.mpPage &&
           #  # ][ #  # ]
     676                 :            :                (
     677                 :          0 :                HasHeader(rSection.mpPage->GetMaster())
     678                 :          0 :                || HasHeader(rSection.mpPage->GetLeft())
     679                 :            :                )
     680                 :            :            )
     681                 :            :         {
     682                 :          0 :             rData.bHasHeader = true;
     683                 :            :         }
     684                 :            :     }
     685                 :            : 
     686         [ #  # ]:          0 :     if( rData.bHasHeader )
     687                 :            :     {
     688                 :          0 :         rData.nSwUp  = nWWHTop;             // Header -> umrechnen, see ww8par6.cxx
     689                 :            : 
     690 [ #  # ][ #  # ]:          0 :         if ( nWWUp > 0 && nWWUp >= nWWHTop )
     691                 :          0 :             rData.nSwHLo = nWWUp - nWWHTop;
     692                 :            :         else
     693                 :          0 :             rData.nSwHLo = 0;
     694                 :            : 
     695         [ #  # ]:          0 :         if (rData.nSwHLo < cMinHdFtHeight)
     696                 :          0 :             rData.nSwHLo = cMinHdFtHeight;
     697                 :            :     }
     698                 :            :     else // kein Header -> Up einfach uebernehmen
     699                 :          0 :         rData.nSwUp = Abs(nWWUp);
     700                 :            : 
     701         [ #  # ]:          0 :     if (bFirst)
     702                 :            :     {
     703   [ #  #  #  # ]:          0 :         if (
                 [ #  # ]
     704                 :            :                 rSection.mpTitlePage &&
     705                 :          0 :                 HasFooter(rSection.mpTitlePage->GetMaster())
     706                 :            :            )
     707                 :            :         {
     708                 :          0 :             rData.bHasFooter = true;
     709                 :            :         }
     710                 :            :     }
     711                 :            :     else
     712                 :            :     {
     713   [ #  #  #  #  :          0 :         if (rSection.mpPage &&
           #  # ][ #  # ]
     714                 :            :            (
     715                 :          0 :                HasFooter(rSection.mpPage->GetMaster())
     716                 :          0 :                || HasFooter(rSection.mpPage->GetLeft())
     717                 :            :            )
     718                 :            :            )
     719                 :            :         {
     720                 :          0 :             rData.bHasFooter = true;
     721                 :            :         }
     722                 :            :     }
     723                 :            : 
     724         [ #  # ]:          0 :     if( rData.bHasFooter )
     725                 :            :     {
     726                 :          0 :         rData.nSwLo = nWWFBot;              // Footer -> Umrechnen
     727 [ #  # ][ #  # ]:          0 :         if ( nWWLo > 0 && nWWLo >= nWWFBot )
     728                 :          0 :             rData.nSwFUp = nWWLo - nWWFBot;
     729                 :            :         else
     730                 :          0 :             rData.nSwFUp = 0;
     731                 :            : 
     732         [ #  # ]:          0 :         if (rData.nSwFUp < cMinHdFtHeight)
     733                 :          0 :             rData.nSwFUp = cMinHdFtHeight;
     734                 :            :     }
     735                 :            :     else // kein Footer -> Lo einfach uebernehmen
     736                 :          0 :         rData.nSwLo = Abs(nWWLo);
     737                 :          0 : }
     738                 :            : 
     739                 :          0 : void rtfSections::SetPageULSpaceItems(SwFrmFmt &rFmt,
     740                 :            :     rtfSections::wwULSpaceData& rData)
     741                 :            : {
     742         [ #  # ]:          0 :     if (rData.bHasHeader)               // ... und Header-Lower setzen
     743                 :            :     {
     744                 :            :         //Kopfzeilenhoehe minimal sezten
     745 [ #  # ][ #  # ]:          0 :         if (SwFrmFmt* pHdFmt = (SwFrmFmt*)rFmt.GetHeader().GetHeaderFmt())
     746                 :            :         {
     747 [ #  # ][ #  # ]:          0 :             pHdFmt->SetFmtAttr(SwFmtFrmSize(ATT_MIN_SIZE, 0, rData.nSwHLo));
                 [ #  # ]
     748 [ #  # ][ #  # ]:          0 :             SvxULSpaceItem aHdUL(pHdFmt->GetULSpace());
     749                 :          0 :             aHdUL.SetLower( rData.nSwHLo - cMinHdFtHeight );
     750         [ #  # ]:          0 :             pHdFmt->SetFmtAttr(aHdUL);
     751                 :            :             pHdFmt->SetFmtAttr(SwHeaderAndFooterEatSpacingItem(
     752 [ #  # ][ #  # ]:          0 :                 RES_HEADER_FOOTER_EAT_SPACING, true));
         [ #  # ][ #  # ]
     753                 :            :         }
     754                 :            :     }
     755                 :            : 
     756         [ #  # ]:          0 :     if (rData.bHasFooter)               // ... und Footer-Upper setzen
     757                 :            :     {
     758 [ #  # ][ #  # ]:          0 :         if (SwFrmFmt* pFtFmt = (SwFrmFmt*)rFmt.GetFooter().GetFooterFmt())
     759                 :            :         {
     760 [ #  # ][ #  # ]:          0 :             pFtFmt->SetFmtAttr(SwFmtFrmSize(ATT_MIN_SIZE, 0, rData.nSwFUp));
                 [ #  # ]
     761 [ #  # ][ #  # ]:          0 :             SvxULSpaceItem aFtUL(pFtFmt->GetULSpace());
     762                 :          0 :             aFtUL.SetUpper( rData.nSwFUp - cMinHdFtHeight );
     763         [ #  # ]:          0 :             pFtFmt->SetFmtAttr(aFtUL);
     764                 :            :             pFtFmt->SetFmtAttr(SwHeaderAndFooterEatSpacingItem(
     765 [ #  # ][ #  # ]:          0 :                 RES_HEADER_FOOTER_EAT_SPACING, true));
         [ #  # ][ #  # ]
     766                 :            :         }
     767                 :            :     }
     768                 :            : 
     769         [ #  # ]:          0 :     SvxULSpaceItem aUL(rData.nSwUp, rData.nSwLo, RES_UL_SPACE ); // Page-UL setzen
     770 [ #  # ][ #  # ]:          0 :     rFmt.SetFmtAttr(aUL);
     771                 :          0 : }
     772                 :            : 
     773                 :          0 : void rtfSections::SetSegmentToPageDesc(const rtfSection &rSection,
     774                 :            :     bool bTitlePage, bool bIgnoreCols)
     775                 :            : {
     776         [ #  # ]:          0 :     SwPageDesc &rPage = bTitlePage ? *rSection.mpTitlePage : *rSection.mpPage;
     777                 :            : 
     778                 :          0 :     SwFrmFmt &rFmt = rPage.GetMaster();
     779                 :            : 
     780                 :          0 :     wwULSpaceData aULData;
     781         [ #  # ]:          0 :     GetPageULData(rSection, bTitlePage, aULData);
     782         [ #  # ]:          0 :     SetPageULSpaceItems(rFmt, aULData);
     783                 :            : 
     784         [ #  # ]:          0 :     SetPage(rPage, rFmt, rSection, bIgnoreCols);
     785                 :            : 
     786                 :          0 :     UseOnPage ePage = rPage.ReadUseOn();
     787         [ #  # ]:          0 :     if(ePage & nsUseOnPage::PD_ALL)
     788                 :            :     {
     789                 :          0 :         SwFrmFmt &rFmtLeft = rPage.GetLeft();
     790         [ #  # ]:          0 :         SetPageULSpaceItems(rFmtLeft, aULData);
     791         [ #  # ]:          0 :         SetPage(rPage, rFmtLeft, rSection, bIgnoreCols);
     792                 :            :     }
     793                 :            : 
     794                 :          0 : }
     795                 :            : 
     796                 :          0 : void rtfSections::CopyFrom(const SwPageDesc &rFrom, SwPageDesc &rDest)
     797                 :            : {
     798                 :          0 :     UseOnPage ePage = rFrom.ReadUseOn();
     799                 :          0 :     rDest.WriteUseOn(ePage);
     800                 :            : 
     801                 :          0 :     mrReader.pDoc->CopyHeader(rFrom.GetMaster(), rDest.GetMaster());
     802                 :          0 :     SwFrmFmt &rDestFmt = rDest.GetMaster();
     803                 :          0 :     rDestFmt.SetFmtAttr(rFrom.GetMaster().GetHeader());
     804                 :          0 :     mrReader.pDoc->CopyHeader(rFrom.GetLeft(), rDest.GetLeft());
     805                 :          0 :     mrReader.pDoc->CopyFooter(rFrom.GetMaster(), rDest.GetMaster());
     806                 :          0 :     mrReader.pDoc->CopyFooter(rFrom.GetLeft(), rDest.GetLeft());
     807                 :          0 : }
     808                 :            : 
     809                 :          0 : void rtfSections::MoveFrom(SwPageDesc &rFrom, SwPageDesc &rDest)
     810                 :            : {
     811                 :          0 :     UseOnPage ePage = rFrom.ReadUseOn();
     812                 :          0 :     rDest.WriteUseOn(ePage);
     813                 :            : 
     814                 :          0 :     SwFrmFmt &rDestMaster = rDest.GetMaster();
     815                 :          0 :     SwFrmFmt &rFromMaster = rFrom.GetMaster();
     816                 :          0 :     rDestMaster.SetFmtAttr(rFromMaster.GetHeader());
     817                 :          0 :     rDestMaster.SetFmtAttr(rFromMaster.GetFooter());
     818                 :            : 
     819                 :          0 :     SwFrmFmt &rDestLeft = rDest.GetLeft();
     820                 :          0 :     SwFrmFmt &rFromLeft = rFrom.GetLeft();
     821                 :          0 :     rDestLeft.SetFmtAttr(rFromLeft.GetHeader());
     822                 :          0 :     rDestLeft.SetFmtAttr(rFromLeft.GetFooter());
     823                 :          0 : }
     824                 :            : 
     825                 :          0 : void rtfSections::SetHdFt(rtfSection &rSection)
     826                 :            : {
     827                 :            :     OSL_ENSURE(rSection.mpPage, "makes no sense to call without a main page");
     828 [ #  # ][ #  # ]:          0 :     if (rSection.mpPage && rSection.maPageInfo.mpPageHdFt)
     829                 :            :     {
     830         [ #  # ]:          0 :         if (rSection.maPageInfo.mbPageHdFtUsed)
     831                 :            :         {
     832                 :          0 :             MoveFrom(*rSection.maPageInfo.mpPageHdFt, *rSection.mpPage);
     833                 :          0 :             rSection.maPageInfo.mbPageHdFtUsed = false;
     834                 :          0 :             rSection.maPageInfo.mpPageHdFt = rSection.mpPage;
     835                 :            :         }
     836                 :            :         else
     837                 :          0 :             CopyFrom(*rSection.maPageInfo.mpPageHdFt, *rSection.mpPage);
     838                 :            :     }
     839                 :            : 
     840 [ #  # ][ #  # ]:          0 :     if (rSection.mpTitlePage && rSection.maPageInfo.mpTitlePageHdFt)
     841                 :            :     {
     842         [ #  # ]:          0 :         if (rSection.maPageInfo.mbTitlePageHdFtUsed)
     843                 :            :         {
     844                 :            :             MoveFrom(*rSection.maPageInfo.mpTitlePageHdFt,
     845                 :          0 :                     *rSection.mpTitlePage);
     846                 :          0 :             rSection.maPageInfo.mbTitlePageHdFtUsed = false;
     847                 :          0 :             rSection.maPageInfo.mpTitlePageHdFt = rSection.mpTitlePage;
     848                 :            :         }
     849                 :            :         else
     850                 :            :         {
     851                 :            :             CopyFrom(*rSection.maPageInfo.mpTitlePageHdFt,
     852                 :          0 :                     *rSection.mpTitlePage);
     853                 :            :         }
     854                 :            :     }
     855                 :          0 : }
     856                 :            : 
     857                 :          0 : SwSectionFmt *rtfSections::InsertSection(SwPaM& rMyPaM, rtfSection &rSection)
     858                 :            : {
     859                 :            :     SwSectionData aSectionData(CONTENT_SECTION,
     860 [ #  # ][ #  # ]:          0 :             mrReader.pDoc->GetUniqueSectionName());
                 [ #  # ]
     861                 :            : 
     862         [ #  # ]:          0 :     SfxItemSet aSet( mrReader.pDoc->GetAttrPool(), aFrmFmtSetRange );
     863                 :            : 
     864 [ #  # ][ #  # ]:          0 :     sal_uInt8 nRTLPgn = maSegments.empty() ? 0 : maSegments.back().IsBiDi();
     865                 :            :     aSet.Put(SvxFrameDirectionItem(
     866 [ #  # ][ #  # ]:          0 :         nRTLPgn ? FRMDIR_HORI_RIGHT_TOP : FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR));
         [ #  # ][ #  # ]
     867                 :            : 
     868                 :            :     rSection.mpSection =
     869         [ #  # ]:          0 :         mrReader.pDoc->InsertSwSection( rMyPaM, aSectionData, 0, &aSet );
     870                 :            :     OSL_ENSURE(rSection.mpSection, "section not inserted!");
     871         [ #  # ]:          0 :     if (!rSection.mpSection)
     872                 :          0 :         return 0;
     873                 :            : 
     874                 :          0 :     SwPageDesc *pPage = 0;
     875                 :          0 :     mySegrIter aEnd = maSegments.rend();
     876 [ #  # ][ #  # ]:          0 :     for (mySegrIter aIter = maSegments.rbegin(); aIter != aEnd; ++aIter)
                 [ #  # ]
     877                 :            :     {
     878         [ #  # ]:          0 :         pPage = aIter->mpPage;
     879         [ #  # ]:          0 :         if (pPage)
     880                 :          0 :             break;
     881                 :            :     }
     882                 :            : 
     883                 :            :     OSL_ENSURE(pPage, "no page outside this section!");
     884                 :            : 
     885         [ #  # ]:          0 :     if (!pPage)
     886         [ #  # ]:          0 :         pPage = &mrReader.pDoc->GetPageDesc(0);
     887                 :            : 
     888         [ #  # ]:          0 :     if (!pPage)
     889                 :          0 :         return 0;
     890                 :            : 
     891                 :          0 :     SwFrmFmt& rFmt = pPage->GetMaster();
     892         [ #  # ]:          0 :     const SwFmtFrmSize&   rSz = rFmt.GetFrmSize();
     893         [ #  # ]:          0 :     const SvxLRSpaceItem& rLR = rFmt.GetLRSpace();
     894                 :          0 :     SwTwips nWidth = rSz.GetWidth();
     895                 :          0 :     long nLeft  = rLR.GetTxtLeft();
     896                 :          0 :     long nRight = rLR.GetRight();
     897                 :            : 
     898                 :          0 :     SwSectionFmt *pFmt = rSection.mpSection->GetFmt();
     899                 :            :     OSL_ENSURE(pFmt, "impossible");
     900         [ #  # ]:          0 :     if (!pFmt)
     901                 :          0 :         return 0;
     902         [ #  # ]:          0 :     SetCols(*pFmt, rSection, (sal_uInt16)(nWidth - nLeft - nRight) );
     903                 :            : 
     904 [ #  # ][ #  # ]:          0 :     return pFmt;
     905                 :            : }
     906                 :            : 
     907                 :          0 : void rtfSections::InsertSegments(bool bNewDoc)
     908                 :            : {
     909                 :          0 :     sal_uInt16 nDesc(0);
     910                 :          0 :     mySegIter aEnd = maSegments.end();
     911                 :          0 :     mySegIter aStart = maSegments.begin();
     912 [ #  # ][ #  # ]:          0 :     for (mySegIter aIter = aStart; aIter != aEnd; ++aIter)
                 [ #  # ]
     913                 :            :     {
     914         [ #  # ]:          0 :         mySegIter aNext = aIter+1;
     915                 :            : 
     916 [ #  # ][ #  # ]:          0 :         bool bInsertSection = aIter != aStart ? aIter->IsContinous() : false;
     917                 :            : 
     918         [ #  # ]:          0 :         if (!bInsertSection)
     919                 :            :         {
     920                 :            :             /*
     921                 :            :              If a cont section follow this section then we won't be
     922                 :            :              creating a page desc with 2+ cols as we cannot host a one
     923                 :            :              col section in a 2+ col pagedesc and make it look like
     924                 :            :              word. But if the current section actually has columns then
     925                 :            :              we are forced to insert a section here as well as a page
     926                 :            :              descriptor.
     927                 :            :             */
     928                 :            : 
     929                 :            :             /*
     930                 :            :              Note for the future:
     931                 :            :              If we want to import "protected sections" the here is
     932                 :            :              where we would also test for that and force a section
     933                 :            :              insertion if that was true.
     934                 :            :             */
     935                 :          0 :             bool bIgnoreCols = false;
     936 [ #  # ][ #  # ]:          0 :             if (aNext != aEnd && aNext->IsContinous())
         [ #  # ][ #  # ]
     937                 :            :             {
     938                 :          0 :                 bIgnoreCols = true;
     939         [ #  # ]:          0 :                 if (aIter->NoCols() > 1)
     940                 :          0 :                     bInsertSection = true;
     941                 :            :             }
     942                 :            : 
     943         [ #  # ]:          0 :             if (aIter->HasTitlePage())
     944                 :            :             {
     945 [ #  # ][ #  # ]:          0 :                 if (bNewDoc && aIter == aStart)
                 [ #  # ]
     946                 :            :                 {
     947                 :          0 :                     aIter->mpTitlePage =
     948         [ #  # ]:          0 :                         mrReader.pDoc->GetPageDescFromPool(RES_POOLPAGE_FIRST);
     949                 :            :                 }
     950                 :            :                 else
     951                 :            :                 {
     952                 :            :                     sal_uInt16 nPos = mrReader.pDoc->MakePageDesc(
     953                 :            :                         ViewShell::GetShellRes()->GetPageDescName(nDesc, ShellResource::NORMAL_PAGE)
     954 [ #  # ][ #  # ]:          0 :                         , 0, false);
         [ #  # ][ #  # ]
     955         [ #  # ]:          0 :                     aIter->mpTitlePage = &mrReader.pDoc->GetPageDesc(nPos);
     956                 :            :                 }
     957                 :            :                 OSL_ENSURE(aIter->mpTitlePage, "no page!");
     958         [ #  # ]:          0 :                 if (!aIter->mpTitlePage)
     959                 :          0 :                     continue;
     960                 :            : 
     961         [ #  # ]:          0 :                 SetSegmentToPageDesc(*aIter, true, bIgnoreCols);
     962                 :            :             }
     963                 :            : 
     964 [ #  # ][ #  # ]:          0 :             if (!bNewDoc && aIter == aStart)
                 [ #  # ]
     965                 :          0 :                 continue;
     966 [ #  # ][ #  # ]:          0 :             else if (bNewDoc && aIter == aStart)
                 [ #  # ]
     967                 :            :             {
     968                 :          0 :                 aIter->mpPage =
     969         [ #  # ]:          0 :                     mrReader.pDoc->GetPageDescFromPool(RES_POOLPAGE_STANDARD);
     970                 :            :             }
     971                 :            :             else
     972                 :            :             {
     973                 :            :                 sal_uInt16 nPos = mrReader.pDoc->MakePageDesc(
     974                 :            :                     ViewShell::GetShellRes()->GetPageDescName(nDesc,
     975                 :          0 :                         aIter->HasTitlePage() ? ShellResource::FIRST_PAGE : ShellResource::NORMAL_PAGE),
     976 [ #  # ][ #  # ]:          0 :                         aIter->mpTitlePage, false);
         [ #  # ][ #  # ]
                 [ #  # ]
     977         [ #  # ]:          0 :                 aIter->mpPage = &mrReader.pDoc->GetPageDesc(nPos);
     978                 :            :             }
     979                 :            :             OSL_ENSURE(aIter->mpPage, "no page!");
     980         [ #  # ]:          0 :             if (!aIter->mpPage)
     981                 :          0 :                 continue;
     982                 :            : 
     983         [ #  # ]:          0 :             SetHdFt(*aIter);
     984                 :            : 
     985         [ #  # ]:          0 :             if (aIter->mpTitlePage)
     986         [ #  # ]:          0 :                 SetSegmentToPageDesc(*aIter, true, bIgnoreCols);
     987         [ #  # ]:          0 :             SetSegmentToPageDesc(*aIter, false, bIgnoreCols);
     988                 :            : 
     989                 :          0 :             SwFmtPageDesc aPgDesc(aIter->HasTitlePage() ?
     990 [ #  # ][ #  # ]:          0 :                  aIter->mpTitlePage : aIter->mpPage);
     991                 :            : 
     992         [ #  # ]:          0 :             if (aIter->mpTitlePage)
     993                 :          0 :                 aIter->mpTitlePage->SetFollow(aIter->mpPage);
     994                 :            : 
     995   [ #  #  #  #  :          0 :             if (aIter->PageRestartNo() ||
           #  # ][ #  # ]
     996                 :          0 :                 ((aIter == aStart) && aIter->PageStartAt() != 1))
     997                 :          0 :                 aPgDesc.SetNumOffset( static_cast< sal_uInt16 >(aIter->PageStartAt()) );
     998                 :            : 
     999                 :            :             /*
    1000                 :            :             If its a table here, apply the pagebreak to the table
    1001                 :            :             properties, otherwise we add it to the para at this
    1002                 :            :             position
    1003                 :            :             */
    1004         [ #  # ]:          0 :             if (aIter->maStart.GetNode().IsTableNode())
    1005                 :            :             {
    1006                 :            :                 SwTable& rTable =
    1007                 :          0 :                     aIter->maStart.GetNode().GetTableNode()->GetTable();
    1008                 :          0 :                 SwFrmFmt* pApply = rTable.GetFrmFmt();
    1009                 :            :                 OSL_ENSURE(pApply, "impossible");
    1010         [ #  # ]:          0 :                 if (pApply)
    1011         [ #  # ]:          0 :                     pApply->SetFmtAttr(aPgDesc);
    1012                 :            :             }
    1013                 :            :             else
    1014                 :            :             {
    1015         [ #  # ]:          0 :                 SwPosition aPamStart(aIter->maStart);
    1016                 :            :                 aPamStart.nContent.Assign(
    1017 [ #  # ][ #  # ]:          0 :                     aIter->maStart.GetNode().GetCntntNode(), 0);
    1018         [ #  # ]:          0 :                 SwPaM aPage(aPamStart);
    1019                 :            : 
    1020 [ #  # ][ #  # ]:          0 :                 mrReader.pDoc->InsertPoolItem(aPage, aPgDesc, 0);
                 [ #  # ]
    1021                 :            :             }
    1022         [ #  # ]:          0 :             ++nDesc;
    1023                 :            :         }
    1024                 :            : 
    1025                 :          0 :         SwTxtNode* pTxtNd = 0;
    1026         [ #  # ]:          0 :         if (bInsertSection)
    1027                 :            :         {
    1028         [ #  # ]:          0 :             SwPaM aSectPaM(*mrReader.pPam);
    1029         [ #  # ]:          0 :             SwNodeIndex aAnchor(aSectPaM.GetPoint()->nNode);
    1030 [ #  # ][ #  # ]:          0 :             if (aNext != aEnd)
    1031                 :            :             {
    1032         [ #  # ]:          0 :                 aAnchor = aNext->maStart;
    1033         [ #  # ]:          0 :                 aSectPaM.GetPoint()->nNode = aAnchor;
    1034                 :          0 :                 aSectPaM.GetPoint()->nContent.Assign(
    1035 [ #  # ][ #  # ]:          0 :                     aNext->maStart.GetNode().GetCntntNode(), 0);
    1036         [ #  # ]:          0 :                 aSectPaM.Move(fnMoveBackward);
    1037                 :            :             }
    1038                 :            : 
    1039                 :          0 :             const SwPosition* pPos  = aSectPaM.GetPoint();
    1040                 :          0 :             SwTxtNode const*const pSttNd = pPos->nNode.GetNode().GetTxtNode();
    1041 [ #  # ][ #  # ]:          0 :             const SwTableNode* pTableNd = pSttNd ? pSttNd->FindTableNode() : 0;
    1042         [ #  # ]:          0 :             if (pTableNd)
    1043                 :            :             {
    1044                 :            :                 pTxtNd =
    1045         [ #  # ]:          0 :                     mrReader.pDoc->GetNodes().MakeTxtNode(aAnchor,
    1046 [ #  # ][ #  # ]:          0 :                     mrReader.pDoc->GetTxtCollFromPool( RES_POOLCOLL_TEXT ));
    1047                 :            : 
    1048 [ #  # ][ #  # ]:          0 :                 aSectPaM.GetPoint()->nNode = SwNodeIndex(*pTxtNd);
                 [ #  # ]
    1049                 :          0 :                 aSectPaM.GetPoint()->nContent.Assign(
    1050 [ #  # ][ #  # ]:          0 :                     aSectPaM.GetCntntNode(), 0);
    1051                 :            :             }
    1052                 :            : 
    1053         [ #  # ]:          0 :             aSectPaM.SetMark();
    1054                 :            : 
    1055         [ #  # ]:          0 :             aSectPaM.GetPoint()->nNode = aIter->maStart;
    1056                 :          0 :             aSectPaM.GetPoint()->nContent.Assign(
    1057 [ #  # ][ #  # ]:          0 :                 aSectPaM.GetCntntNode(), 0);
    1058                 :            : 
    1059         [ #  # ]:          0 :             SwSectionFmt *pRet = InsertSection(aSectPaM, *aIter);
    1060                 :            :             //The last section if continous is always unbalanced
    1061 [ #  # ][ #  # ]:          0 :             if (aNext == aEnd && pRet)
                 [ #  # ]
    1062 [ #  # ][ #  # ]:          0 :                 pRet->SetFmtAttr(SwFmtNoBalancedColumns(true));
         [ #  # ][ #  # ]
                 [ #  # ]
    1063                 :            :         }
    1064                 :            : 
    1065         [ #  # ]:          0 :         if (pTxtNd)
    1066                 :            :         {
    1067         [ #  # ]:          0 :             SwNodeIndex aIdx(*pTxtNd);
    1068         [ #  # ]:          0 :             SwPosition aPos(aIdx);
    1069         [ #  # ]:          0 :             SwPaM aTest(aPos);
    1070         [ #  # ]:          0 :             mrReader.pDoc->DelFullPara(aTest);
    1071 [ #  # ][ #  # ]:          0 :             pTxtNd = 0;
                 [ #  # ]
    1072                 :            :         }
    1073                 :            :     }
    1074                 :          0 : }
    1075                 :            : 
    1076                 :            : namespace sw{
    1077                 :            :     namespace util{
    1078                 :            : 
    1079                 :          0 : InsertedTableClient::InsertedTableClient(SwTableNode & rNode)
    1080                 :            : {
    1081         [ #  # ]:          0 :     rNode.Add(this);
    1082                 :          0 : }
    1083                 :            : 
    1084                 :          0 : SwTableNode * InsertedTableClient::GetTableNode()
    1085                 :            : {
    1086         [ #  # ]:          0 :     return dynamic_cast<SwTableNode *> (GetRegisteredInNonConst());
    1087                 :            : }
    1088                 :            : 
    1089                 :        108 : InsertedTablesManager::InsertedTablesManager(const SwDoc &rDoc)
    1090                 :        108 :     : mbHasRoot(rDoc.GetCurrentLayout())    //swmod 080218
    1091                 :            : {
    1092                 :        108 : }
    1093                 :            : 
    1094                 :        102 : void InsertedTablesManager::DelAndMakeTblFrms()
    1095                 :            : {
    1096         [ -  + ]:        102 :     if (!mbHasRoot)
    1097                 :        102 :         return;
    1098                 :          0 :     TblMapIter aEnd = maTables.end();
    1099         [ #  # ]:        102 :     for (TblMapIter aIter = maTables.begin(); aIter != aEnd; ++aIter)
    1100                 :            :     {
    1101                 :            :         // exitiert schon ein Layout, dann muss an dieser Tabelle die BoxFrames
    1102                 :            :         // neu erzeugt
    1103                 :          0 :         SwTableNode *pTable = aIter->first->GetTableNode();
    1104                 :            :         OSL_ENSURE(pTable, "Why no expected table");
    1105         [ #  # ]:          0 :         if (pTable)
    1106                 :            :         {
    1107                 :          0 :             SwFrmFmt * pFrmFmt = pTable->GetTable().GetFrmFmt();
    1108                 :            : 
    1109         [ #  # ]:          0 :             if (pFrmFmt != NULL)
    1110                 :            :             {
    1111                 :          0 :                 SwNodeIndex *pIndex = aIter->second;
    1112         [ #  # ]:          0 :                 pTable->DelFrms();
    1113         [ #  # ]:          0 :                 pTable->MakeFrms(pIndex);
    1114                 :            :             }
    1115                 :            :         }
    1116                 :            :     }
    1117                 :            : }
    1118                 :            : 
    1119                 :         90 : void InsertedTablesManager::InsertTable(SwTableNode &rTableNode, SwPaM &rPaM)
    1120                 :            : {
    1121         [ -  + ]:         90 :     if (!mbHasRoot)
    1122                 :         90 :         return;
    1123                 :            :     //Associate this tablenode with this after position, replace an //old
    1124                 :            :     //node association if necessary
    1125                 :            : 
    1126 [ #  # ][ #  # ]:          0 :     InsertedTableClient * pClient = new InsertedTableClient(rTableNode);
    1127                 :            : 
    1128         [ #  # ]:         90 :     maTables.insert(TblMap::value_type(pClient, &(rPaM.GetPoint()->nNode)));
    1129                 :            : }
    1130                 :            : }
    1131                 :            : }
    1132                 :            : 
    1133 [ #  # ][ #  # ]:          0 : SwRTFParser::~SwRTFParser()
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    1134                 :            : {
    1135         [ #  # ]:          0 :     maInsertedTables.DelAndMakeTblFrms();
    1136         [ #  # ]:          0 :     mpRedlineStack->closeall(*pPam->GetPoint());
    1137 [ #  # ][ #  # ]:          0 :     delete mpRedlineStack;
    1138                 :            : 
    1139 [ #  # ][ #  # ]:          0 :     delete pSttNdIdx;
    1140 [ #  # ][ #  # ]:          0 :     delete pRegionEndIdx;
    1141 [ #  # ][ #  # ]:          0 :     delete pPam;
    1142 [ #  # ][ #  # ]:          0 :     delete pRelNumRule;
    1143                 :            : 
    1144         [ #  # ]:          0 :     if (pGrfAttrSet)
    1145 [ #  # ][ #  # ]:          0 :         DELETEZ( pGrfAttrSet );
    1146         [ #  # ]:          0 : }
    1147                 :            : 
    1148                 :            : //i19718
    1149                 :          0 : void SwRTFParser::ReadShpRslt()
    1150                 :            : {
    1151                 :            :     int nToken;
    1152 [ #  # ][ #  # ]:          0 :     while ('}' != (nToken = GetNextToken() ) && IsParserWorking())
                 [ #  # ]
    1153                 :            :     {
    1154         [ #  # ]:          0 :         switch(nToken)
    1155                 :            :         {
    1156                 :            :             case RTF_PAR:
    1157                 :          0 :                 break;
    1158                 :            :             default:
    1159                 :          0 :                 NextToken(nToken);
    1160                 :          0 :                 break;
    1161                 :            :         }
    1162                 :            :     }
    1163                 :          0 :     SkipToken(-1);
    1164                 :          0 : }
    1165                 :            : 
    1166                 :          0 : void SwRTFParser::ReadShpTxt(String& s)
    1167                 :            : {
    1168                 :            :     int nToken;
    1169                 :          0 :     int level=1;
    1170                 :          0 :     s.AppendAscii("{\\rtf");
    1171 [ #  # ][ #  # ]:          0 :     while (level>0 && IsParserWorking())
                 [ #  # ]
    1172                 :            :     {
    1173                 :          0 :         nToken = GetNextToken();
    1174   [ #  #  #  #  :          0 :         switch(nToken)
                      # ]
    1175                 :            :         {
    1176                 :            :             case RTF_SN:
    1177                 :            :             case RTF_SV:
    1178                 :          0 :                 SkipGroup();
    1179                 :          0 :                 break;
    1180                 :            :             case RTF_TEXTTOKEN:
    1181                 :          0 :                 s.Append(aToken);
    1182                 :          0 :                 break;
    1183                 :            :             case '{':
    1184                 :          0 :                 level++;
    1185 [ #  # ][ #  # ]:          0 :                 s.Append(rtl::OUString("{"));
                 [ #  # ]
    1186                 :          0 :                 break;
    1187                 :            :             case '}':
    1188                 :          0 :                 level--;
    1189 [ #  # ][ #  # ]:          0 :                 s.Append(rtl::OUString("}"));
                 [ #  # ]
    1190                 :          0 :                 break;
    1191                 :            :             default:
    1192                 :          0 :                 s.Append(aToken);
    1193         [ #  # ]:          0 :                 if (bTokenHasValue)
    1194 [ #  # ][ #  # ]:          0 :                     s.Append(rtl::OUString::valueOf(static_cast<sal_Int64>(nTokenValue)));
                 [ #  # ]
    1195 [ #  # ][ #  # ]:          0 :                 s.Append(rtl::OUString(" "));
                 [ #  # ]
    1196                 :          0 :                 break;
    1197                 :            :         }
    1198                 :            :     }
    1199                 :          0 :     SkipToken(-1);
    1200                 :          0 : }
    1201                 :            : 
    1202                 :            : /*
    1203                 :            :  * Very basic support for the Z-line.
    1204                 :            :  */
    1205                 :          0 : void SwRTFParser::ReadDrawingObject()
    1206                 :            : {
    1207                 :            :     int nToken;
    1208                 :            :     int level;
    1209                 :          0 :     level=1;
    1210         [ #  # ]:          0 :     Rectangle aRect;
    1211         [ #  # ]:          0 :     ::basegfx::B2DPolygon aPolygon;
    1212                 :          0 :     ::basegfx::B2DPoint aPoint;
    1213                 :          0 :     bool bPolygonActive(false);
    1214                 :            : 
    1215         [ #  # ]:          0 :     SwFmtHoriOrient aHori( 0, text::HoriOrientation::NONE, text::RelOrientation::PAGE_FRAME );
    1216         [ #  # ]:          0 :     SwFmtVertOrient aVert( 0, text::VertOrientation::NONE, text::RelOrientation::PAGE_FRAME );
    1217                 :            : 
    1218 [ #  # ][ #  # ]:          0 :     while (level>0 && IsParserWorking())
                 [ #  # ]
    1219                 :            :     {
    1220         [ #  # ]:          0 :         nToken = GetNextToken();
    1221   [ #  #  #  #  :          0 :         switch(nToken)
          #  #  #  #  #  
                #  #  # ]
    1222                 :            :         {
    1223                 :            :             case '}':
    1224                 :          0 :                 level--;
    1225                 :          0 :                 break;
    1226                 :            :             case '{':
    1227                 :          0 :                 level++;
    1228                 :          0 :                 break;
    1229                 :            :             case RTF_DOBXMARGIN:
    1230                 :          0 :                 aHori.SetRelationOrient( text::RelOrientation::PAGE_PRINT_AREA );
    1231                 :          0 :                 break;
    1232                 :            :             case RTF_DOBYMARGIN:
    1233                 :          0 :                 aVert.SetRelationOrient( text::RelOrientation::PAGE_PRINT_AREA );
    1234                 :          0 :                 break;
    1235                 :            :             case RTF_DPX:
    1236                 :          0 :                 aRect.setX(nTokenValue);
    1237                 :          0 :                 break;
    1238                 :            :             case RTF_DPXSIZE:
    1239                 :          0 :                 aRect.setWidth(nTokenValue);
    1240                 :          0 :                 break;
    1241                 :            :             case RTF_DPY:
    1242                 :          0 :                 aRect.setY(nTokenValue);
    1243                 :          0 :                 break;
    1244                 :            :             case RTF_DPYSIZE:
    1245                 :          0 :                 aRect.setHeight(nTokenValue);
    1246                 :          0 :                 break;
    1247                 :            :             case RTF_DPLINE:
    1248                 :            :             case RTF_DPPOLYCOUNT:
    1249                 :          0 :                 bPolygonActive = true;
    1250                 :          0 :                 break;
    1251                 :            :             case RTF_DPPTX:
    1252                 :          0 :                 aPoint.setX(nTokenValue);
    1253                 :          0 :                 break;
    1254                 :            :             case RTF_DPPTY:
    1255                 :          0 :                 aPoint.setY(nTokenValue);
    1256                 :            : 
    1257         [ #  # ]:          0 :                 if(bPolygonActive)
    1258                 :            :                 {
    1259         [ #  # ]:          0 :                     aPolygon.append(aPoint);
    1260                 :            :                 }
    1261                 :            : 
    1262                 :          0 :                 break;
    1263                 :            :             default:
    1264                 :          0 :                 break;
    1265                 :            :         }
    1266                 :            :     }
    1267         [ #  # ]:          0 :     SkipToken(-1);
    1268                 :            : 
    1269 [ #  # ][ #  # ]:          0 :     if(bPolygonActive && aPolygon.count())
         [ #  # ][ #  # ]
    1270                 :            :     {
    1271 [ #  # ][ #  # ]:          0 :         SdrPathObj* pStroke = new SdrPathObj(OBJ_PLIN, ::basegfx::B2DPolyPolygon(aPolygon));
         [ #  # ][ #  # ]
    1272         [ #  # ]:          0 :         SfxItemSet aFlySet(pDoc->GetAttrPool(), RES_FRMATR_BEGIN, RES_FRMATR_END-1);
    1273         [ #  # ]:          0 :         SwFmtSurround aSur( SURROUND_PARALLEL );
    1274                 :          0 :         aSur.SetContour( false );
    1275                 :          0 :         aSur.SetOutside(true);
    1276         [ #  # ]:          0 :         aFlySet.Put( aSur );
    1277         [ #  # ]:          0 :         SwFmtFollowTextFlow aFollowTextFlow( sal_False );
    1278         [ #  # ]:          0 :         aFlySet.Put( aFollowTextFlow );
    1279                 :            : 
    1280         [ #  # ]:          0 :         SwFmtAnchor aAnchor( FLY_AT_PARA );
    1281         [ #  # ]:          0 :         aAnchor.SetAnchor( pPam->GetPoint() );
    1282         [ #  # ]:          0 :         aFlySet.Put( aAnchor );
    1283                 :            : 
    1284         [ #  # ]:          0 :         aFlySet.Put( aHori );
    1285         [ #  # ]:          0 :         aFlySet.Put( aVert );
    1286                 :            : 
    1287         [ #  # ]:          0 :         pDoc->GetOrCreateDrawModel();
    1288         [ #  # ]:          0 :         SdrModel* pDrawModel  = pDoc->GetDrawModel();
    1289         [ #  # ]:          0 :         SdrPage* pDrawPg = pDrawModel->GetPage(0);
    1290         [ #  # ]:          0 :         pDrawPg->InsertObject(pStroke, 0);
    1291                 :            : 
    1292         [ #  # ]:          0 :         pStroke->SetSnapRect(aRect);
    1293                 :            : 
    1294 [ #  # ][ #  # ]:          0 :         pDoc->Insert(*pPam, *pStroke, &aFlySet, NULL);
         [ #  # ][ #  # ]
                 [ #  # ]
    1295 [ #  # ][ #  # ]:          0 :     }
                 [ #  # ]
    1296                 :          0 : }
    1297                 :            : 
    1298                 :          0 : void SwRTFParser::InsertShpObject(SdrObject* pStroke, int _nZOrder)
    1299                 :            : {
    1300         [ #  # ]:          0 :         SfxItemSet aFlySet(pDoc->GetAttrPool(), RES_FRMATR_BEGIN, RES_FRMATR_END-1);
    1301         [ #  # ]:          0 :         SwFmtSurround aSur( SURROUND_THROUGHT );
    1302                 :          0 :         aSur.SetContour( false );
    1303                 :          0 :         aSur.SetOutside(true);
    1304         [ #  # ]:          0 :         aFlySet.Put( aSur );
    1305         [ #  # ]:          0 :         SwFmtFollowTextFlow aFollowTextFlow( sal_False );
    1306         [ #  # ]:          0 :         aFlySet.Put( aFollowTextFlow );
    1307                 :            : 
    1308         [ #  # ]:          0 :         SwFmtAnchor aAnchor( FLY_AT_PARA );
    1309         [ #  # ]:          0 :         aAnchor.SetAnchor( pPam->GetPoint() );
    1310         [ #  # ]:          0 :         aFlySet.Put( aAnchor );
    1311                 :            : 
    1312                 :            : 
    1313         [ #  # ]:          0 :         SwFmtHoriOrient aHori( 0, text::HoriOrientation::NONE, text::RelOrientation::PAGE_FRAME );
    1314         [ #  # ]:          0 :         aFlySet.Put( aHori );
    1315                 :            : 
    1316         [ #  # ]:          0 :         SwFmtVertOrient aVert( 0, text::VertOrientation::NONE, text::RelOrientation::PAGE_FRAME );
    1317         [ #  # ]:          0 :         aFlySet.Put( aVert );
    1318                 :            : 
    1319 [ #  # ][ #  # ]:          0 :         aFlySet.Put(SvxOpaqueItem(RES_OPAQUE,false));
                 [ #  # ]
    1320                 :            : 
    1321         [ #  # ]:          0 :         pDoc->GetOrCreateDrawModel();
    1322         [ #  # ]:          0 :         SdrModel* pDrawModel  = pDoc->GetDrawModel();
    1323         [ #  # ]:          0 :         SdrPage* pDrawPg = pDrawModel->GetPage(0);
    1324         [ #  # ]:          0 :         pDrawPg->InsertObject(pStroke);
    1325 [ #  # ][ #  # ]:          0 :         pDrawPg->SetObjectOrdNum(pStroke->GetOrdNum(), _nZOrder);
    1326 [ #  # ][ #  # ]:          0 :         pDoc->Insert(*pPam, *pStroke, &aFlySet, NULL);
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    1327                 :          0 : }
    1328                 :            : 
    1329                 :          0 : ::basegfx::B2DPoint rotate(const ::basegfx::B2DPoint& rStart, const ::basegfx::B2DPoint& rEnd)
    1330                 :            : {
    1331                 :          0 :     const ::basegfx::B2DVector aVector(rStart - rEnd);
    1332                 :          0 :     return ::basegfx::B2DPoint(aVector.getY() + rEnd.getX(), -aVector.getX() + rEnd.getY());
    1333                 :            : }
    1334                 :            : 
    1335                 :            : 
    1336                 :          0 : void SwRTFParser::ReadShapeObject()
    1337                 :            : {
    1338                 :            :     int nToken;
    1339                 :            :     int level;
    1340                 :          0 :     level=1;
    1341                 :          0 :     ::basegfx::B2DPoint aPointLeftTop;
    1342                 :          0 :     ::basegfx::B2DPoint aPointRightBottom;
    1343         [ #  # ]:          0 :     String sn;
    1344                 :          0 :     sal_Int32 shapeType=-1;
    1345         [ #  # ]:          0 :     Graphic aGrf;
    1346                 :          0 :     bool bGrfValid=false;
    1347                 :          0 :     bool fFilled=true;
    1348                 :          0 :     Color fillColor(255, 255, 255);
    1349                 :          0 :     bool fLine=true;
    1350                 :          0 :     int lineWidth=9525/360;
    1351         [ #  # ]:          0 :     String shpTxt;
    1352                 :          0 :     bool bshpTxt=false;
    1353                 :          0 :     int txflTextFlow=0;
    1354                 :          0 :     ::rtl::OUString sDescription, sName;
    1355                 :            : 
    1356                 :            : 
    1357 [ #  # ][ #  # ]:          0 :     while (level>0 && IsParserWorking())
                 [ #  # ]
    1358                 :            :     {
    1359         [ #  # ]:          0 :         nToken = GetNextToken();
    1360   [ #  #  #  #  :          0 :         switch(nToken)
          #  #  #  #  #  
                #  #  # ]
    1361                 :            :         {
    1362                 :            :             case '}':
    1363                 :          0 :                 level--;
    1364                 :          0 :                 break;
    1365                 :            :             case '{':
    1366                 :          0 :                 level++;
    1367                 :          0 :                 break;
    1368                 :            :             case RTF_SHPLEFT:
    1369                 :          0 :                 aPointLeftTop.setX(nTokenValue);
    1370                 :          0 :                 break;
    1371                 :            :             case RTF_SHPTOP:
    1372                 :          0 :                 aPointLeftTop.setY(nTokenValue);
    1373                 :          0 :                 break;
    1374                 :            :             case RTF_SHPBOTTOM:
    1375                 :          0 :                 aPointRightBottom.setY(nTokenValue);
    1376                 :          0 :                 break;
    1377                 :            :             case RTF_SHPRIGHT:
    1378                 :          0 :                 aPointRightBottom.setX(nTokenValue);
    1379                 :          0 :                 break;
    1380                 :            :             case RTF_SN:
    1381         [ #  # ]:          0 :                 nToken = GetNextToken();
    1382                 :            :                 OSL_ENSURE(nToken==RTF_TEXTTOKEN, "expected name");
    1383         [ #  # ]:          0 :                 sn=aToken;
    1384                 :          0 :                 break;
    1385                 :            :             case RTF_SV:
    1386         [ #  # ]:          0 :                 nToken = GetNextToken();
    1387         [ #  # ]:          0 :                 if (nToken==RTF_TEXTTOKEN)
    1388                 :            :                 {
    1389 [ #  # ][ #  # ]:          0 :                     if (sn.EqualsAscii("shapeType"))
    1390                 :            :                     {
    1391         [ #  # ]:          0 :                         shapeType=aToken.ToInt32();
    1392                 :            : 
    1393 [ #  # ][ #  # ]:          0 :                     } else if (sn.EqualsAscii("fFilled"))
    1394                 :            :                     {
    1395         [ #  # ]:          0 :                         fFilled=aToken.ToInt32();
    1396                 :            : 
    1397 [ #  # ][ #  # ]:          0 :                     } else if (sn.EqualsAscii("fLine"))
    1398                 :            :                     {
    1399         [ #  # ]:          0 :                             fLine=aToken.ToInt32();
    1400 [ #  # ][ #  # ]:          0 :                     } else if (sn.EqualsAscii("lineWidth"))
    1401                 :            :                     {
    1402         [ #  # ]:          0 :                             lineWidth=aToken.ToInt32()/360;
    1403                 :            : 
    1404 [ #  # ][ #  # ]:          0 :                     } else if (sn.EqualsAscii("fillColor"))
    1405                 :            :                     {
    1406         [ #  # ]:          0 :                         sal_uInt32 nColor=aToken.ToInt32();
    1407                 :          0 :                         fillColor=Color( (sal_uInt8)nColor, (sal_uInt8)( nColor >> 8 ), (sal_uInt8)( nColor >> 16 ) );
    1408 [ #  # ][ #  # ]:          0 :                     }else if (sn.EqualsAscii("txflTextFlow"))
    1409                 :            :                       {
    1410         [ #  # ]:          0 :                         txflTextFlow=aToken.ToInt32();
    1411                 :            :                       }
    1412 [ #  # ][ #  # ]:          0 :                     else if (sn.EqualsAscii("wzDescription"))
    1413                 :            :                     {
    1414         [ #  # ]:          0 :                         sDescription = aToken;
    1415                 :            :                     }
    1416 [ #  # ][ #  # ]:          0 :                     else if(sn.EqualsAscii("wzName"))
    1417                 :            :                     {
    1418         [ #  # ]:          0 :                         sName = aToken;
    1419                 :            :                     }
    1420                 :            :                 }
    1421                 :          0 :                 break;
    1422                 :            :             case RTF_PICT:
    1423                 :            :                 {
    1424         [ #  # ]:          0 :                         SvxRTFPictureType aPicType;
    1425         [ #  # ]:          0 :                         bGrfValid=ReadBmpData( aGrf, aPicType );
    1426                 :            :                 }
    1427                 :          0 :                 break;
    1428                 :            :             case RTF_SHPRSLT:
    1429 [ #  # ][ #  # ]:          0 :                 if (shapeType!=1 && shapeType!=20 && shapeType!=75)
                 [ #  # ]
    1430                 :            :                 {
    1431         [ #  # ]:          0 :                     ReadShpRslt();
    1432                 :            :                 }
    1433                 :          0 :                 break;
    1434                 :            :                      case RTF_SHPTXT:
    1435         [ #  # ]:          0 :                ReadShpTxt(shpTxt);
    1436                 :          0 :                bshpTxt=true;
    1437                 :          0 :                break;
    1438                 :            : 
    1439                 :            :             default:
    1440                 :          0 :                 break;
    1441                 :            :         }
    1442                 :            :     }
    1443         [ #  # ]:          0 :     SkipToken(-1);
    1444                 :            : 
    1445                 :          0 :     SdrObject* pSdrObject = 0;
    1446   [ #  #  #  # ]:          0 :     switch(shapeType)
    1447                 :            :     {
    1448                 :            :         case 202: /* Text Box */
    1449                 :            :     case 1: /* Rectangle */
    1450                 :            :         {
    1451         [ #  # ]:          0 :             ::basegfx::B2DRange aRange(aPointLeftTop);
    1452         [ #  # ]:          0 :             aRange.expand(aPointRightBottom);
    1453                 :            : 
    1454         [ #  # ]:          0 :           if (txflTextFlow==2) {
    1455 [ #  # ][ #  # ]:          0 :             const ::basegfx::B2DPoint a(rotate(aRange.getMinimum(), aRange.getCenter()));
    1456 [ #  # ][ #  # ]:          0 :             const ::basegfx::B2DPoint b(rotate(aRange.getMaximum(), aRange.getCenter()));
    1457                 :            : 
    1458         [ #  # ]:          0 :             aRange.reset();
    1459         [ #  # ]:          0 :             aRange.expand(a);
    1460         [ #  # ]:          0 :             aRange.expand(b);
    1461                 :            :           }
    1462                 :            : 
    1463 [ #  # ][ #  # ]:          0 :             const Rectangle aRect(FRound(aRange.getMinX()), FRound(aRange.getMinY()), FRound(aRange.getMaxX()), FRound(aRange.getMaxY()));
         [ #  # ][ #  # ]
                 [ #  # ]
    1464 [ #  # ][ #  # ]:          0 :             SdrRectObj* pStroke = new SdrRectObj(aRect);
    1465                 :          0 :             pSdrObject = pStroke;
    1466         [ #  # ]:          0 :             pStroke->SetSnapRect(aRect);
    1467         [ #  # ]:          0 :             pDoc->GetOrCreateDrawModel(); // create model
    1468         [ #  # ]:          0 :             InsertShpObject(pStroke, this->nZOrder++);
    1469 [ #  # ][ #  # ]:          0 :             SfxItemSet aSet(pStroke->GetMergedItemSet());
    1470         [ #  # ]:          0 :             if (fFilled)
    1471                 :            :             {
    1472 [ #  # ][ #  # ]:          0 :                 aSet.Put(XFillStyleItem(XFILL_SOLID));
                 [ #  # ]
    1473 [ #  # ][ #  # ]:          0 :                 aSet.Put(XFillColorItem( String(), fillColor ) );
         [ #  # ][ #  # ]
                 [ #  # ]
    1474                 :            :             }
    1475                 :            :             else
    1476                 :            :             {
    1477 [ #  # ][ #  # ]:          0 :                 aSet.Put(XFillStyleItem(XFILL_NONE));
                 [ #  # ]
    1478                 :            :             }
    1479         [ #  # ]:          0 :             if (!fLine) {
    1480 [ #  # ][ #  # ]:          0 :               aSet.Put(XLineStyleItem(XLINE_NONE));
                 [ #  # ]
    1481                 :            :             } else {
    1482 [ #  # ][ #  # ]:          0 :               aSet.Put( XLineWidthItem( lineWidth/2 ) ); // lineWidth are in 1000th mm, seems that XLineWidthItem expects 1/2 the line width
                 [ #  # ]
    1483                 :            :             }
    1484                 :            : 
    1485         [ #  # ]:          0 :             pStroke->SetMergedItemSet(aSet);
    1486         [ #  # ]:          0 :             if (bshpTxt) {
    1487 [ #  # ][ #  # ]:          0 :               SdrOutliner& rOutliner=pDoc->GetDrawModel()->GetDrawOutliner(pStroke);
    1488         [ #  # ]:          0 :               rOutliner.Clear();
    1489                 :            :               rtl::OString bs(rtl::OUStringToOString(shpTxt,
    1490 [ #  # ][ #  # ]:          0 :                 RTL_TEXTENCODING_ASCII_US));
    1491                 :          0 :               SvMemoryStream aStream(const_cast<sal_Char*>(bs.getStr()),
    1492         [ #  # ]:          0 :                 bs.getLength(), STREAM_READ);
    1493 [ #  # ][ #  # ]:          0 :               rOutliner.Read(aStream, rtl::OUString(), EE_FORMAT_RTF);
                 [ #  # ]
    1494         [ #  # ]:          0 :               OutlinerParaObject* pParaObject=rOutliner.CreateParaObject();
    1495         [ #  # ]:          0 :               pStroke->NbcSetOutlinerParaObject(pParaObject);
    1496 [ #  # ][ #  # ]:          0 :               rOutliner.Clear();
    1497                 :            :             }
    1498         [ #  # ]:          0 :             if (txflTextFlow==2) {
    1499                 :          0 :               long nAngle = 90;
    1500                 :          0 :               double a = nAngle*100*nPi180;
    1501 [ #  # ][ #  # ]:          0 :               pStroke->Rotate(pStroke->GetCurrentBoundRect().Center(), nAngle*100, sin(a), cos(a) );
                 [ #  # ]
    1502                 :            : 
    1503         [ #  # ]:          0 :             }
    1504                 :            : 
    1505                 :            :         }
    1506                 :          0 :         break;
    1507                 :            :     case 20: /* Line */
    1508                 :            :         {
    1509         [ #  # ]:          0 :             ::basegfx::B2DPolygon aLine;
    1510         [ #  # ]:          0 :             aLine.append(aPointLeftTop);
    1511         [ #  # ]:          0 :             aLine.append(aPointRightBottom);
    1512                 :            : 
    1513 [ #  # ][ #  # ]:          0 :             SdrPathObj* pStroke = new SdrPathObj(OBJ_PLIN, ::basegfx::B2DPolyPolygon(aLine));
         [ #  # ][ #  # ]
    1514                 :          0 :             pSdrObject = pStroke;
    1515                 :            : 
    1516         [ #  # ]:          0 :             InsertShpObject(pStroke, this->nZOrder++);
    1517 [ #  # ][ #  # ]:          0 :             SfxItemSet aSet(pStroke->GetMergedItemSet());
    1518         [ #  # ]:          0 :             if (!fLine) {
    1519 [ #  # ][ #  # ]:          0 :               aSet.Put(XLineStyleItem(XLINE_NONE));
                 [ #  # ]
    1520                 :            :             } else {
    1521 [ #  # ][ #  # ]:          0 :               aSet.Put( XLineWidthItem( lineWidth/2 ) ); // lineWidth are in 1000th mm, seems that XLineWidthItem expects 1/2 the line width
                 [ #  # ]
    1522                 :            :             }
    1523                 :            : 
    1524 [ #  # ][ #  # ]:          0 :             pStroke->SetMergedItemSet(aSet);
                 [ #  # ]
    1525                 :            :         }
    1526                 :          0 :         break;
    1527                 :            :     case 75 : /* Picture */
    1528         [ #  # ]:          0 :         if (bGrfValid) {
    1529         [ #  # ]:          0 :             ::basegfx::B2DRange aRange(aPointLeftTop);
    1530         [ #  # ]:          0 :             aRange.expand(aPointRightBottom);
    1531 [ #  # ][ #  # ]:          0 :             const Rectangle aRect(FRound(aRange.getMinX()), FRound(aRange.getMinY()), FRound(aRange.getMaxX()), FRound(aRange.getMaxY()));
         [ #  # ][ #  # ]
                 [ #  # ]
    1532                 :            : 
    1533 [ #  # ][ #  # ]:          0 :             SdrRectObj* pStroke = new SdrGrafObj(aGrf);
    1534                 :          0 :             pSdrObject = pStroke;
    1535         [ #  # ]:          0 :             pStroke->SetSnapRect(aRect);
    1536                 :            : 
    1537         [ #  # ]:          0 :             InsertShpObject(pStroke, this->nZOrder++);
    1538                 :            :         }
    1539                 :            :     }
    1540         [ #  # ]:          0 :     if( pSdrObject )
    1541                 :            :     {
    1542         [ #  # ]:          0 :         pSdrObject->SetDescription(sDescription);
    1543         [ #  # ]:          0 :         pSdrObject->SetTitle(sName);
    1544 [ #  # ][ #  # ]:          0 :     }
                 [ #  # ]
    1545                 :          0 : }
    1546                 :            : 
    1547                 :            : extern void sw3io_ConvertFromOldField( SwDoc& rDoc, sal_uInt16& rWhich,
    1548                 :            :                                 sal_uInt16& rSubType, sal_uLong &rFmt,
    1549                 :            :                                 sal_uInt16 nVersion );
    1550                 :            : 
    1551                 :          0 : sal_uInt16 SwRTFParser::ReadRevTbl()
    1552                 :            : {
    1553                 :          0 :     int nNumOpenBrakets = 1, nToken;        // die erste wurde schon vorher erkannt !!
    1554                 :          0 :     sal_uInt16 nAuthorTableIndex = 0;
    1555                 :            : 
    1556 [ #  # ][ #  # ]:          0 :     while( nNumOpenBrakets && IsParserWorking() )
                 [ #  # ]
    1557                 :            :     {
    1558         [ #  # ]:          0 :         switch( nToken = GetNextToken() )
           [ #  #  #  # ]
    1559                 :            :         {
    1560                 :          0 :         case '}':   --nNumOpenBrakets;  break;
    1561                 :            :         case '{':
    1562                 :            :             {
    1563 [ #  # ][ #  # ]:          0 :                 if( RTF_IGNOREFLAG != GetNextToken() )
    1564         [ #  # ]:          0 :                     nToken = SkipToken( -1 );
    1565 [ #  # ][ #  # ]:          0 :                 else if( RTF_UNKNOWNCONTROL != GetNextToken() )
    1566         [ #  # ]:          0 :                     nToken = SkipToken( -2 );
    1567                 :            :                 else
    1568                 :            :                 {
    1569         [ #  # ]:          0 :                     ReadUnknownData();
    1570         [ #  # ]:          0 :                     nToken = GetNextToken();
    1571         [ #  # ]:          0 :                     if( '}' != nToken )
    1572                 :          0 :                         eState = SVPAR_ERROR;
    1573                 :          0 :                     break;
    1574                 :            :                 }
    1575                 :          0 :                 ++nNumOpenBrakets;
    1576                 :            :             }
    1577                 :          0 :             break;
    1578                 :            : 
    1579                 :            :         case RTF_TEXTTOKEN:
    1580 [ #  # ][ #  # ]:          0 :             aToken = comphelper::string::stripEnd(aToken, ';');
                 [ #  # ]
    1581                 :            : 
    1582         [ #  # ]:          0 :             sal_uInt16 nSWId = pDoc->InsertRedlineAuthor(aToken);
    1583                 :            :             // Store matchpair
    1584         [ #  # ]:          0 :             m_aAuthorInfos[nAuthorTableIndex] = nSWId;
    1585                 :            : 
    1586         [ #  # ]:          0 :             aRevTbl.push_back(aToken);
    1587                 :          0 :             nAuthorTableIndex++;
    1588                 :          0 :             break;
    1589                 :            :         }
    1590                 :            :     }
    1591         [ #  # ]:          0 :     SkipToken( -1 );
    1592                 :          0 :     return nAuthorTableIndex;
    1593                 :            : }
    1594                 :            : 
    1595                 :          0 : void SwRTFParser::NextToken( int nToken )
    1596                 :            : {
    1597                 :            :     sal_uInt16 eDateFmt;
    1598                 :            : 
    1599   [ #  #  #  #  :          0 :     switch( nToken )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    1600                 :            :     {
    1601                 :            :     case RTF_FOOTNOTE:
    1602                 :            :     {
    1603                 :            :         //We can only insert a footnote if we're not inside a footnote. e.g.
    1604                 :            :         //#i7713#
    1605                 :            : 
    1606                 :            :         // in insert mode it's also possible to be inside of a footnote!
    1607                 :          0 :         bool bInsertIntoFootnote = false;
    1608         [ #  # ]:          0 :         if( !IsNewDoc() )
    1609                 :            :         {
    1610                 :          0 :             SwStartNode* pSttNode = pPam->GetNode()->StartOfSectionNode();
    1611 [ #  # ][ #  # ]:          0 :             while(pSttNode && pSttNode->IsSectionNode())
                 [ #  # ]
    1612                 :            :             {
    1613                 :          0 :                 pSttNode = pSttNode->StartOfSectionNode();
    1614                 :            :             }
    1615         [ #  # ]:          0 :             if( SwFootnoteStartNode == pSttNode->GetStartNodeType() )
    1616                 :          0 :                 bInsertIntoFootnote = true;
    1617                 :            :         }
    1618 [ #  # ][ #  # ]:          0 :         if (!mbIsFootnote && !bInsertIntoFootnote)
    1619                 :            :         {
    1620                 :          0 :             ReadHeaderFooter( nToken );
    1621                 :          0 :             SkipToken( -1 );        // Klammer wieder zurueck
    1622                 :            :         }
    1623                 :            :     }
    1624                 :          0 :     break;
    1625                 :            :     case RTF_SWG_PRTDATA:
    1626                 :          0 :         ReadPrtData();
    1627                 :          0 :         break;
    1628                 :            :     case RTF_XE:
    1629                 :          0 :         ReadXEField();
    1630                 :          0 :         break;
    1631                 :            :     case RTF_FIELD:
    1632                 :          0 :         ReadField();
    1633                 :          0 :         break;
    1634                 :            :     case RTF_SHPRSLT:
    1635                 :          0 :         ReadShpRslt();
    1636                 :          0 :         break;
    1637                 :            :     case RTF_DO:
    1638                 :          0 :         ReadDrawingObject();
    1639                 :          0 :         break;
    1640                 :            :     case RTF_SHP:
    1641                 :          0 :         ReadShapeObject();
    1642                 :          0 :         break;
    1643                 :            :     case RTF_SHPPICT:
    1644                 :            :     case RTF_PICT:
    1645                 :          0 :         ReadBitmapData();
    1646                 :          0 :         break;
    1647                 :            : #ifdef READ_OLE_OBJECT
    1648                 :            :     case RTF_OBJECT:
    1649                 :            :         ReadOLEData();
    1650                 :            :         break;
    1651                 :            : #endif
    1652                 :          0 :     case RTF_TROWD:                 ReadTable( nToken );        break;
    1653                 :            :     case RTF_PGDSCTBL:
    1654         [ #  # ]:          0 :         if( !IsNewDoc() )
    1655                 :          0 :             SkipPageDescTbl();
    1656                 :            :         else
    1657                 :          0 :             ReadPageDescTbl();
    1658                 :          0 :         break;
    1659                 :          0 :     case RTF_LISTTABLE:             ReadListTable();            break;
    1660                 :          0 :     case RTF_LISTOVERRIDETABLE:     ReadListOverrideTable();    break;
    1661                 :            : 
    1662                 :            :     case RTF_LISTTEXT:
    1663 [ #  # ][ #  # ]:          0 :         GetAttrSet().Put( SfxUInt16Item( FN_PARAM_NUM_LEVEL, 0 ));
    1664                 :          0 :         SkipGroup();
    1665                 :          0 :         break;
    1666                 :            : 
    1667                 :            :     case RTF_PN:
    1668         [ #  # ]:          0 :         if( bNewNumList )
    1669                 :          0 :             SkipGroup();
    1670                 :            :         else
    1671                 :            :         {
    1672                 :          0 :             bStyleTabValid = sal_True;
    1673         [ #  # ]:          0 :             if (SwNumRule* pRule = ReadNumSecLevel( nToken ))
    1674                 :            :             {
    1675 [ #  # ][ #  # ]:          0 :                 GetAttrSet().Put( SwNumRuleItem( pRule->GetName() ));
    1676                 :            : 
    1677         [ #  # ]:          0 :                 if( SFX_ITEM_SET != GetAttrSet().GetItemState( FN_PARAM_NUM_LEVEL, sal_False ))
    1678 [ #  # ][ #  # ]:          0 :                     GetAttrSet().Put( SfxUInt16Item( FN_PARAM_NUM_LEVEL, 0 ));
    1679                 :            :             }
    1680                 :            :         }
    1681                 :          0 :         break;
    1682                 :            : 
    1683                 :            : 
    1684                 :            :     case RTF_BKMKSTART:
    1685         [ #  # ]:          0 :         if(RTF_TEXTTOKEN == GetNextToken())
    1686         [ #  # ]:          0 :             mpBookmarkStart = new BookmarkPosition(*pPam);
    1687                 :            :         else
    1688                 :          0 :             SkipToken(-1);
    1689                 :            : 
    1690                 :          0 :         SkipGroup();
    1691                 :          0 :         break;
    1692                 :            : 
    1693                 :            :     case RTF_BKMKEND:
    1694         [ #  # ]:          0 :         if(RTF_TEXTTOKEN == GetNextToken())
    1695                 :            :         {
    1696                 :          0 :             const String& sBookmark = aToken;
    1697                 :          0 :             KeyCode aEmptyKeyCode;
    1698         [ #  # ]:          0 :             if (mpBookmarkStart)
    1699                 :            :             {
    1700         [ #  # ]:          0 :                 BookmarkPosition aBookmarkEnd(*pPam);
    1701                 :            :                 SwPaM aBookmarkRegion(  mpBookmarkStart->maMkNode, mpBookmarkStart->mnMkCntnt,
    1702         [ #  # ]:          0 :                                         aBookmarkEnd.maMkNode, aBookmarkEnd.mnMkCntnt);
    1703 [ #  # ][ #  # ]:          0 :                 if (*mpBookmarkStart == aBookmarkEnd)
                 [ #  # ]
    1704         [ #  # ]:          0 :                     aBookmarkRegion.DeleteMark();
    1705 [ #  # ][ #  # ]:          0 :                 pDoc->getIDocumentMarkAccess()->makeMark(aBookmarkRegion, sBookmark, IDocumentMarkAccess::BOOKMARK);
         [ #  # ][ #  # ]
                 [ #  # ]
    1706                 :            :             }
    1707 [ #  # ][ #  # ]:          0 :             delete mpBookmarkStart, mpBookmarkStart = 0;
    1708                 :            :         }
    1709                 :            :         else
    1710                 :          0 :             SkipToken(-1);
    1711                 :            : 
    1712                 :          0 :         SkipGroup();
    1713                 :          0 :         break;
    1714                 :            : 
    1715                 :            : 
    1716                 :            :     case RTF_PNSECLVL:{
    1717         [ #  # ]:          0 :         if( bNewNumList)
    1718                 :          0 :             SkipGroup();
    1719                 :            :         else
    1720                 :          0 :             ReadNumSecLevel( nToken );
    1721                 :          0 :         break;
    1722                 :            :                       }
    1723                 :            : 
    1724                 :            :     case RTF_PNTEXT:
    1725                 :            :     case RTF_NONSHPPICT:
    1726                 :          0 :         SkipGroup();
    1727                 :          0 :         break;
    1728                 :            : 
    1729                 :            :     case RTF_DEFFORMAT:
    1730                 :            :     case RTF_DEFTAB:
    1731                 :            :     case RTF_DEFLANG:
    1732                 :            :         // sind zwar Dok-Controls, werden aber manchmal auch vor der
    1733                 :            :         // Font/Style/Color-Tabelle gesetzt!
    1734                 :          0 :         SvxRTFParser::NextToken( nToken );
    1735                 :          0 :         break;
    1736                 :            : 
    1737                 :            :     case RTF_PAGE:
    1738         [ #  # ]:          0 :         if (pTableNode==NULL) { //A \page command within a table is ignored by Word.
    1739         [ #  # ]:          0 :             if (lcl_UsedPara(*pPam))
    1740                 :          0 :                 InsertPara();
    1741                 :          0 :             CheckInsNewTblLine();
    1742                 :            :             pDoc->InsertPoolItem(*pPam,
    1743         [ #  # ]:          0 :                 SvxFmtBreakItem(SVX_BREAK_PAGE_BEFORE, RES_BREAK), 0);
    1744                 :            :         }
    1745                 :          0 :         break;
    1746                 :            : 
    1747                 :            :     case RTF_SECT:
    1748                 :          0 :         ReadSectControls( nToken );
    1749                 :          0 :         break;
    1750                 :            :     case RTF_CELL:
    1751                 :          0 :         mbReadCellWhileReadSwFly = bReadSwFly; // #i83368#
    1752         [ #  # ]:          0 :         if (CantUseTables())
    1753                 :          0 :             InsertPara();
    1754                 :            :         else
    1755                 :            :         {
    1756                 :            :             // Tabelle nicht mehr vorhanden ?
    1757 [ #  # ][ #  # ]:          0 :             if (USHRT_MAX != nInsTblRow && !pTableNode)
    1758                 :          0 :                 NewTblLine();               // evt. Line copieren
    1759                 :          0 :             GotoNextBox();
    1760                 :            :         }
    1761                 :          0 :         break;
    1762                 :            : 
    1763                 :            :     case RTF_ROW:
    1764                 :          0 :         bTrowdRead=false;
    1765         [ #  # ]:          0 :         if (!CantUseTables())
    1766                 :            :         {
    1767                 :            :             // aus der Line raus
    1768                 :          0 :             m_nCurrentBox = 0;
    1769                 :          0 :             pTableNode = 0;
    1770                 :            :             // noch in der Tabelle drin?
    1771                 :          0 :             SwNodeIndex& rIdx = pPam->GetPoint()->nNode;
    1772         [ #  # ]:          0 :             const SwTableNode* pTblNd = rIdx.GetNode().FindTableNode();
    1773         [ #  # ]:          0 :             if( pTblNd )
    1774                 :            :             {
    1775                 :            :                 // search the end of this row
    1776                 :            :                 const SwStartNode* pBoxStt =
    1777         [ #  # ]:          0 :                                     rIdx.GetNode().FindTableBoxStartNode();
    1778                 :          0 :                 const SwTableBox* pBox = pTblNd->GetTable().GetTblBox(
    1779         [ #  # ]:          0 :                                                 pBoxStt->GetIndex() );
    1780                 :          0 :                 const SwTableLine* pLn = pBox->GetUpper();
    1781         [ #  # ]:          0 :                 pBox = pLn->GetTabBoxes().back();
    1782         [ #  # ]:          0 :                 rIdx = *pBox->GetSttNd()->EndOfSectionNode();
    1783         [ #  # ]:          0 :                 pPam->Move( fnMoveForward, fnGoNode );
    1784                 :            :             }
    1785                 :          0 :             nInsTblRow = static_cast< sal_uInt16 >(GetOpenBrakets());
    1786                 :          0 :             SetPardTokenRead( sal_False );
    1787         [ #  # ]:          0 :             SwPaM aTmp(*pPam);
    1788 [ #  # ][ #  # ]:          0 :             aTmp.Move( fnMoveBackward, fnGoNode );
    1789                 :            :         }
    1790                 :          0 :         ::SetProgressState( rInput.Tell(), pDoc->GetDocShell() );
    1791                 :          0 :         break;
    1792                 :            : 
    1793                 :            :     case RTF_INTBL:
    1794         [ #  # ]:          0 :         if (!CantUseTables())
    1795                 :            :         {
    1796         [ #  # ]:          0 :             if( !pTableNode )           // Tabelle nicht mehr vorhanden ?
    1797                 :            :             {
    1798         [ #  # ]:          0 :                 if (RTF_TROWD != GetNextToken())
    1799                 :          0 :                     NewTblLine();           // evt. Line copieren
    1800                 :          0 :                 SkipToken(-1);
    1801                 :            :             }
    1802                 :            :             else
    1803                 :            :             {
    1804                 :            :                 // Crsr nicht mehr in der Tabelle ?
    1805         [ #  # ]:          0 :                 if( !pPam->GetNode()->FindTableNode() )
    1806                 :            :                 {
    1807                 :            :                     // dann wieder in die letzte Box setzen
    1808                 :            :                     // (kann durch einlesen von Flys geschehen!)
    1809                 :          0 :                     pPam->GetPoint()->nNode = *pTableNode->EndOfSectionNode();
    1810                 :          0 :                     pPam->Move( fnMoveBackward );
    1811                 :            :                 }
    1812                 :            :             }
    1813                 :            :         }
    1814                 :          0 :         break;
    1815                 :            : 
    1816                 :            :     case RTF_REVTBL:
    1817                 :          0 :         ReadRevTbl();
    1818                 :          0 :         break;
    1819                 :            : 
    1820                 :            :     case RTF_REVISED:
    1821 [ #  # ][ #  # ]:          0 :         pRedlineInsert = new SwFltRedline(nsRedlineType_t::REDLINE_INSERT, 0, DateTime(Date( 0 ), Time( 0 )));
                 [ #  # ]
    1822                 :          0 :         break;
    1823                 :            : 
    1824                 :            :     case RTF_DELETED:
    1825 [ #  # ][ #  # ]:          0 :         pRedlineDelete = new SwFltRedline(nsRedlineType_t::REDLINE_DELETE, 0, DateTime(Date( 0 ), Time( 0 )));
                 [ #  # ]
    1826                 :          0 :         break;
    1827                 :            : 
    1828                 :            :     case RTF_REVAUTH:
    1829         [ #  # ]:          0 :         if (pRedlineInsert)
    1830                 :            :         {
    1831                 :          0 :             sal_uInt16 nRevAuth = static_cast<sal_uInt16>(nTokenValue);
    1832         [ #  # ]:          0 :             pRedlineInsert->nAutorNo = m_aAuthorInfos[nRevAuth];
    1833                 :            :         }
    1834                 :          0 :         break;
    1835                 :            : 
    1836                 :            :     case RTF_REVAUTHDEL:
    1837         [ #  # ]:          0 :         if(pRedlineDelete)
    1838                 :            :         {
    1839                 :          0 :             sal_uInt16 nRevAuthDel = static_cast<sal_uInt16>(nTokenValue);
    1840         [ #  # ]:          0 :             pRedlineDelete->nAutorNo = m_aAuthorInfos[nRevAuthDel];
    1841                 :            :         }
    1842                 :          0 :         break;
    1843                 :            : 
    1844                 :            :     case RTF_REVDTTM:
    1845         [ #  # ]:          0 :         if (pRedlineInsert != NULL)
    1846         [ #  # ]:          0 :             pRedlineInsert->aStamp = msfilter::util::DTTM2DateTime(nTokenValue);
    1847                 :            : 
    1848                 :          0 :         break;
    1849                 :            : 
    1850                 :            :     case RTF_REVDTTMDEL:
    1851         [ #  # ]:          0 :         pRedlineDelete->aStamp = msfilter::util::DTTM2DateTime(nTokenValue);
    1852                 :          0 :         break;
    1853                 :            : 
    1854                 :            : 
    1855                 :            :     case RTF_FLY_INPARA:
    1856                 :            :             // \pard  und plain ueberlesen !
    1857 [ #  # ][ #  # ]:          0 :         if( '}' != GetNextToken() && '}' != GetNextToken() )
                 [ #  # ]
    1858                 :            :         {
    1859                 :            :             // Zeichengebundener Fly in Fly
    1860                 :          0 :             ReadHeaderFooter( nToken );
    1861                 :          0 :             SetPardTokenRead( sal_False );
    1862                 :            :         }
    1863                 :          0 :         break;
    1864                 :            : 
    1865                 :            :     case RTF_PGDSCNO:
    1866         [ #  # ]:          0 :         if( IsNewDoc() && bSwPageDesc &&
           [ #  #  #  # ]
                 [ #  # ]
    1867                 :          0 :             sal_uInt16(nTokenValue) < pDoc->GetPageDescCnt() )
    1868                 :            :         {
    1869                 :            :             const SwPageDesc* pPgDsc =
    1870                 :            :                 &const_cast<const SwDoc *>(pDoc)
    1871                 :          0 :                 ->GetPageDesc( sal_uInt16(nTokenValue) );
    1872                 :          0 :             CheckInsNewTblLine();
    1873         [ #  # ]:          0 :             pDoc->InsertPoolItem(*pPam, SwFmtPageDesc( pPgDsc ), 0);
    1874                 :            :         }
    1875                 :          0 :         break;
    1876                 :            : 
    1877                 :            :     case RTF_COLUM:
    1878                 :            :         pDoc->InsertPoolItem(*pPam,
    1879         [ #  # ]:          0 :                 SvxFmtBreakItem( SVX_BREAK_COLUMN_BEFORE, RES_BREAK ), 0);
    1880                 :          0 :         break;
    1881                 :            : 
    1882                 :            :     case RTF_DXFRTEXT:      // werden nur im Zusammenhang mit Flys ausgewertet
    1883                 :            :     case RTF_DFRMTXTX:
    1884                 :            :     case RTF_DFRMTXTY:
    1885                 :          0 :         break;
    1886                 :            : 
    1887                 :          0 :     case RTF_CHDATE:    eDateFmt = DF_SHORT;    goto SETCHDATEFIELD;
    1888                 :          0 :     case RTF_CHDATEA:   eDateFmt = DF_SSYS;     goto SETCHDATEFIELD;
    1889                 :          0 :     case RTF_CHDATEL:   eDateFmt = DF_LSYS;     goto SETCHDATEFIELD;
    1890                 :            : SETCHDATEFIELD:
    1891                 :            :         {
    1892                 :          0 :             sal_uInt16 nSubType = DATEFLD, nWhich = RES_DATEFLD;
    1893                 :          0 :             sal_uLong nFormat = eDateFmt;
    1894         [ #  # ]:          0 :             sw3io_ConvertFromOldField( *pDoc, nWhich, nSubType, nFormat, 0x0110 );
    1895                 :            : 
    1896                 :            :             SwDateTimeField aDateFld( (SwDateTimeFieldType*)
    1897 [ #  # ][ #  # ]:          0 :                                         pDoc->GetSysFldType( RES_DATETIMEFLD ), DATEFLD, nFormat);
    1898         [ #  # ]:          0 :             CheckInsNewTblLine();
    1899 [ #  # ][ #  # ]:          0 :             pDoc->InsertPoolItem(*pPam, SwFmtFld( aDateFld ), 0);
         [ #  # ][ #  # ]
    1900                 :            :         }
    1901                 :          0 :         break;
    1902                 :            : 
    1903                 :            :     case RTF_CHTIME:
    1904                 :            :         {
    1905                 :          0 :             sal_uInt16 nSubType = TIMEFLD, nWhich = RES_TIMEFLD;
    1906                 :          0 :             sal_uLong nFormat = TF_SSMM_24;
    1907         [ #  # ]:          0 :             sw3io_ConvertFromOldField( *pDoc, nWhich, nSubType, nFormat, 0x0110 );
    1908                 :            :             SwDateTimeField aTimeFld( (SwDateTimeFieldType*)
    1909 [ #  # ][ #  # ]:          0 :                     pDoc->GetSysFldType( RES_DATETIMEFLD ), TIMEFLD, nFormat);
    1910         [ #  # ]:          0 :             CheckInsNewTblLine();
    1911 [ #  # ][ #  # ]:          0 :             pDoc->InsertPoolItem(*pPam, SwFmtFld( aTimeFld ), 0);
         [ #  # ][ #  # ]
    1912                 :            :         }
    1913                 :          0 :         break;
    1914                 :            : 
    1915                 :            :     case RTF_CHPGN:
    1916                 :            :         {
    1917                 :            :             SwPageNumberField aPageFld( (SwPageNumberFieldType*)
    1918         [ #  # ]:          0 :                                     pDoc->GetSysFldType( RES_PAGENUMBERFLD ),
    1919         [ #  # ]:          0 :                                     PG_RANDOM, SVX_NUM_ARABIC );
    1920         [ #  # ]:          0 :             CheckInsNewTblLine();
    1921 [ #  # ][ #  # ]:          0 :             pDoc->InsertPoolItem(*pPam, SwFmtFld(aPageFld), 0);
         [ #  # ][ #  # ]
    1922                 :            :         }
    1923                 :          0 :         break;
    1924                 :            : 
    1925                 :            :     case RTF_CHFTN:
    1926                 :          0 :         bFootnoteAutoNum = sal_True;
    1927                 :          0 :         break;
    1928                 :            : 
    1929                 :            :     case RTF_NOFPAGES:
    1930 [ #  # ][ #  # ]:          0 :         if( IsNewDoc() && nTokenValue && -1 != nTokenValue )
         [ #  # ][ #  # ]
    1931                 :          0 :             ((SwDocStat&)pDoc->GetDocStat()).nPage = (sal_uInt16)nTokenValue;
    1932                 :          0 :         break;
    1933                 :            : 
    1934                 :            :     case RTF_NOFWORDS:
    1935 [ #  # ][ #  # ]:          0 :         if( IsNewDoc() && nTokenValue && -1 != nTokenValue )
         [ #  # ][ #  # ]
    1936                 :          0 :             ((SwDocStat&)pDoc->GetDocStat()).nWord = (sal_uInt16)nTokenValue;
    1937                 :          0 :         break;
    1938                 :            :     case RTF_NOFCHARS:
    1939 [ #  # ][ #  # ]:          0 :         if( IsNewDoc() && nTokenValue && -1 != nTokenValue )
         [ #  # ][ #  # ]
    1940                 :          0 :             ((SwDocStat&)pDoc->GetDocStat()).nChar = (sal_uInt16)nTokenValue;
    1941                 :          0 :         break;
    1942                 :            :     case RTF_LYTPRTMET:
    1943         [ #  # ]:          0 :         if (IsNewDoc())
    1944                 :          0 :             pDoc->set(IDocumentSettingAccess::USE_VIRTUAL_DEVICE, false);
    1945                 :          0 :         break;
    1946                 :            :     case RTF_U:
    1947                 :            :         {
    1948                 :          0 :             CheckInsNewTblLine();
    1949         [ #  # ]:          0 :             if( nTokenValue )
    1950                 :          0 :                 aToken = (sal_Unicode )nTokenValue;
    1951                 :          0 :             pDoc->InsertString( *pPam, aToken );
    1952                 :            :         }
    1953                 :          0 :         break;
    1954                 :            : 
    1955                 :            :     case RTF_USERPROPS:
    1956                 :          0 :         ReadUserProperties();       // #i28758 For now we don't support user properties
    1957                 :          0 :         break;
    1958                 :            : 
    1959                 :            : // RTF_SUBENTRYINDEX
    1960                 :            : 
    1961                 :            :     default:
    1962   [ #  #  #  #  :          0 :         switch( nToken & ~(0xff | RTF_SWGDEFS) )
                   #  # ]
    1963                 :            :         {
    1964                 :            :         case RTF_DOCFMT:
    1965                 :          0 :             ReadDocControls( nToken );
    1966                 :          0 :             break;
    1967                 :            :         case RTF_SECTFMT:
    1968                 :          0 :             ReadSectControls( nToken );
    1969                 :          0 :             break;
    1970                 :            :         case RTF_APOCTL:
    1971         [ #  # ]:          0 :             if (nReadFlyDepth < 10)
    1972                 :            :             {
    1973                 :          0 :                 nReadFlyDepth++;
    1974                 :          0 :                 ReadFly( nToken );
    1975                 :          0 :                 nReadFlyDepth--;
    1976                 :            :             }
    1977                 :          0 :             break;
    1978                 :            : 
    1979                 :            :         case RTF_BRDRDEF | RTF_TABLEDEF:
    1980                 :            :         case RTF_SHADINGDEF | RTF_TABLEDEF:
    1981                 :            :         case RTF_TABLEDEF:
    1982                 :          0 :             ReadTable( nToken );
    1983                 :          0 :             break;
    1984                 :            : 
    1985                 :            :         case RTF_INFO:
    1986                 :          0 :             ReadInfo();
    1987                 :          0 :             break;
    1988                 :            : 
    1989                 :            :         default:
    1990   [ #  #  #  #  :          0 :             if( USHRT_MAX != nInsTblRow &&
           #  # ][ #  # ]
    1991                 :          0 :                 (nInsTblRow > GetOpenBrakets() || IsPardTokenRead() ))
    1992                 :          0 :                 nInsTblRow = USHRT_MAX;
    1993                 :            : 
    1994                 :          0 :             SvxRTFParser::NextToken( nToken );
    1995                 :          0 :             break;
    1996                 :            :         }
    1997                 :            :     }
    1998   [ #  #  #  #  :          0 :     if( USHRT_MAX != nInsTblRow &&
           #  # ][ #  # ]
    1999                 :          0 :         (nInsTblRow > GetOpenBrakets() || IsPardTokenRead() ))
    2000                 :          0 :         nInsTblRow = USHRT_MAX;
    2001                 :          0 : }
    2002                 :            : 
    2003                 :            : 
    2004                 :            : 
    2005                 :          0 : void SwRTFParser::InsertText()
    2006                 :            : {
    2007                 :          0 :     bContainsPara = false;
    2008                 :            :     // dann fuege den String ein, ohne das Attribute am Ende
    2009                 :            :     // aufgespannt werden.
    2010                 :          0 :     CheckInsNewTblLine();
    2011                 :            : 
    2012         [ #  # ]:          0 :     if(pRedlineInsert)
    2013                 :          0 :         mpRedlineStack->open(*pPam->GetPoint(), *pRedlineInsert);
    2014         [ #  # ]:          0 :     if(pRedlineDelete)
    2015                 :          0 :         mpRedlineStack->open(*pPam->GetPoint(), *pRedlineDelete);
    2016                 :            : 
    2017                 :          0 :     pDoc->InsertString( *pPam, aToken );
    2018                 :            : 
    2019         [ #  # ]:          0 :     if(pRedlineDelete)
    2020                 :            :     {
    2021                 :          0 :         mpRedlineStack->close(*pPam->GetPoint(), pRedlineDelete->eType);
    2022                 :            :     }
    2023                 :            : 
    2024         [ #  # ]:          0 :     if(pRedlineInsert)
    2025                 :            :     {
    2026                 :          0 :         mpRedlineStack->close(*pPam->GetPoint(), pRedlineInsert->eType);
    2027                 :            :     }
    2028                 :            : 
    2029                 :            : 
    2030                 :          0 : }
    2031                 :            : 
    2032                 :            : 
    2033                 :          0 : void SwRTFParser::InsertPara()
    2034                 :            : {
    2035                 :          0 :     bContainsPara = true;
    2036         [ #  # ]:          0 :     CheckInsNewTblLine();
    2037         [ #  # ]:          0 :     pDoc->AppendTxtNode(*pPam->GetPoint());
    2038                 :            : 
    2039                 :            :     // setze das default Style
    2040         [ #  # ]:          0 :     if( !bStyleTabValid )
    2041         [ #  # ]:          0 :         MakeStyleTab();
    2042                 :            : 
    2043                 :          0 :     SwTxtFmtColl* pColl = NULL;
    2044         [ #  # ]:          0 :     std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find(0);
    2045                 :            : 
    2046 [ #  # ][ #  # ]:          0 :     if( iter == aTxtCollTbl.end() )
    2047         [ #  # ]:          0 :         pColl = pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
    2048                 :            :     else
    2049         [ #  # ]:          0 :         pColl = iter->second;
    2050                 :            : 
    2051         [ #  # ]:          0 :     pDoc->SetTxtFmtColl( *pPam, pColl );
    2052                 :            : 
    2053         [ #  # ]:          0 :     ::SetProgressState( rInput.Tell(), pDoc->GetDocShell() );
    2054                 :          0 : }
    2055                 :            : 
    2056                 :            : 
    2057                 :            : 
    2058                 :          0 : void SwRTFParser::MovePos( int bForward )
    2059                 :            : {
    2060         [ #  # ]:          0 :     if( bForward )
    2061                 :          0 :         pPam->Move( fnMoveForward );
    2062                 :            :     else
    2063                 :          0 :         pPam->Move( fnMoveBackward );
    2064                 :          0 : }
    2065                 :            : 
    2066                 :          0 : int SwRTFParser::IsEndPara( SvxNodeIdx* pNd, xub_StrLen nCnt ) const
    2067                 :            : {
    2068                 :          0 :     SwCntntNode *pNode = pDoc->GetNodes()[pNd->GetIdx()]->GetCntntNode();
    2069 [ #  # ][ #  # ]:          0 :     return pNode && pNode->Len() == nCnt;
    2070                 :            : }
    2071                 :            : 
    2072                 :          0 : bool SwRTFParser::UncompressableStackEntry(const SvxRTFItemStackType &rSet)
    2073                 :            :     const
    2074                 :            : {
    2075                 :            :     /*
    2076                 :            :     #i21961#
    2077                 :            :     Seeing as CHARFMT sets all the properties of the charfmt itself, its not
    2078                 :            :     good enough to just see it as a single property from the point of
    2079                 :            :     compressing property sets. If bold and charfmt are in a child, and bold is
    2080                 :            :     in the parent, removing bold from the child will not result in the same
    2081                 :            :     thing, if the charfmt removes bold itself for example
    2082                 :            :     */
    2083                 :          0 :     bool bRet = false;
    2084         [ #  # ]:          0 :     if (rSet.GetAttrSet().Count())
    2085                 :            :     {
    2086                 :            : 
    2087         [ #  # ]:          0 :         if (SFX_ITEM_SET ==
    2088                 :          0 :                 rSet.GetAttrSet().GetItemState(RES_TXTATR_CHARFMT, sal_False))
    2089                 :            :         {
    2090                 :          0 :             bRet = true;
    2091                 :            :         }
    2092                 :            :     }
    2093                 :          0 :     return bRet;
    2094                 :            : }
    2095                 :            : 
    2096                 :          0 : void SwRTFParser::SetEndPrevPara( SvxNodeIdx*& rpNodePos, xub_StrLen& rCntPos )
    2097                 :            : {
    2098         [ #  # ]:          0 :     SwNodeIndex aIdx( pPam->GetPoint()->nNode );
    2099 [ #  # ][ #  # ]:          0 :     SwCntntNode* pNode = pDoc->GetNodes().GoPrevious( &aIdx );
    2100                 :            :     if( !pNode )
    2101                 :            :     {
    2102                 :            :         OSL_FAIL( "keinen vorherigen ContentNode gefunden" );
    2103                 :            :     }
    2104                 :            : 
    2105 [ #  # ][ #  # ]:          0 :     rpNodePos = new SwNodeIdx( aIdx );
    2106 [ #  # ][ #  # ]:          0 :     rCntPos = pNode->Len();
    2107                 :          0 : }
    2108                 :            : 
    2109                 :          0 : void SwRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet )
    2110                 :            : {
    2111 [ #  # ][ #  # ]:          0 :     sal_uLong nSNd = rSet.GetSttNodeIdx(), nENd = rSet.GetEndNodeIdx();
    2112                 :          0 :     xub_StrLen nSCnt = rSet.GetSttCnt(), nECnt = rSet.GetEndCnt();
    2113                 :            : 
    2114         [ #  # ]:          0 :     SwPaM aPam( *pPam->GetPoint() );
    2115                 :            : 
    2116                 :            : #if OSL_DEBUG_LEVEL > 0
    2117                 :            :     OSL_ENSURE( nSNd <= nENd, "Start groesser als Ende" );
    2118                 :            :     SwNode* pDebugNd = pDoc->GetNodes()[ nSNd ];
    2119                 :            :     OSL_ENSURE( pDebugNd->IsCntntNode(), "Start kein ContentNode" );
    2120                 :            :     pDebugNd = pDoc->GetNodes()[ nENd ];
    2121                 :            :     OSL_ENSURE( pDebugNd->IsCntntNode(), "Ende kein ContentNode" );
    2122                 :            : #endif
    2123                 :            : 
    2124 [ #  # ][ #  # ]:          0 :     SwCntntNode* pCNd = pDoc->GetNodes()[ nSNd ]->GetCntntNode();
    2125         [ #  # ]:          0 :     aPam.GetPoint()->nNode = nSNd;
    2126 [ #  # ][ #  # ]:          0 :     aPam.GetPoint()->nContent.Assign( pCNd, nSCnt );
    2127         [ #  # ]:          0 :     aPam.SetMark();
    2128         [ #  # ]:          0 :     if( nENd == nSNd )
    2129         [ #  # ]:          0 :         aPam.GetPoint()->nContent = nECnt;
    2130                 :            :     else
    2131                 :            :     {
    2132         [ #  # ]:          0 :         aPam.GetPoint()->nNode = nENd;
    2133                 :          0 :         pCNd = aPam.GetCntntNode();
    2134 [ #  # ][ #  # ]:          0 :         aPam.GetPoint()->nContent.Assign( pCNd, nECnt );
    2135                 :            :     }
    2136                 :            : 
    2137                 :            :     // setze ueber den Bereich das entsprechende Style
    2138         [ #  # ]:          0 :     if( rSet.StyleNo() )
    2139                 :            :     {
    2140                 :            :         // setze jetzt das Style
    2141         [ #  # ]:          0 :         if( !bStyleTabValid )
    2142         [ #  # ]:          0 :             MakeStyleTab();
    2143                 :            : 
    2144         [ #  # ]:          0 :         std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find(rSet.StyleNo());
    2145                 :            : 
    2146 [ #  # ][ #  # ]:          0 :         if (iter != aTxtCollTbl.end())
    2147 [ #  # ][ #  # ]:          0 :             pDoc->SetTxtFmtColl( aPam, iter->second, false );
    2148                 :            :     }
    2149                 :            : 
    2150                 :            :     const SfxPoolItem* pItem;
    2151                 :            :     const SfxPoolItem* pCharFmt;
    2152         [ #  # ]:          0 :     if (rSet.GetAttrSet().Count() )
    2153                 :            :     {
    2154                 :            : 
    2155                 :            :         // falls eine Zeichenvorlage im Set steht, deren Attribute
    2156                 :            :         // aus dem Set loeschen. Sonst sind diese doppelt, was man ja
    2157                 :            :         // nicht will.
    2158   [ #  #  #  # ]:          0 :         if( SFX_ITEM_SET == rSet.GetAttrSet().GetItemState(
                 [ #  # ]
    2159         [ #  # ]:          0 :             RES_TXTATR_CHARFMT, sal_False, &pCharFmt ) &&
    2160                 :          0 :             ((SwFmtCharFmt*)pCharFmt)->GetCharFmt() )
    2161                 :            :         {
    2162                 :          0 :             const String& rName = ((SwFmtCharFmt*)pCharFmt)->GetCharFmt()->GetName();
    2163 [ #  # ][ #  # ]:          0 :             for (SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it != GetStyleTbl().end(); ++it)
         [ #  # ][ #  # ]
                 [ #  # ]
    2164                 :            :             {
    2165         [ #  # ]:          0 :                 SvxRTFStyleType* pStyle = it->second;
    2166 [ #  # ][ #  # ]:          0 :                 if( pStyle->bIsCharFmt && pStyle->sName == rName )
         [ #  # ][ #  # ]
    2167                 :            :                 {
    2168                 :            :                     // alle Attribute, die schon vom Style definiert sind, aus dem
    2169                 :            :                     // akt. AttrSet entfernen
    2170                 :          0 :                     SfxItemSet &rAttrSet = rSet.GetAttrSet(),
    2171                 :          0 :                                &rStyleSet = pStyle->aAttrSet;
    2172         [ #  # ]:          0 :                     SfxItemIter aIter( rAttrSet );
    2173                 :          0 :                     sal_uInt16 nWhich = aIter.GetCurItem()->Which();
    2174                 :          0 :                     while( sal_True )
    2175                 :            :                     {
    2176                 :            :                         const SfxPoolItem* pI;
    2177 [ #  # ][ #  # ]:          0 :                         if( SFX_ITEM_SET == rStyleSet.GetItemState(
                 [ #  # ]
    2178 [ #  # ][ #  # ]:          0 :                             nWhich, sal_False, &pI ) && *pI == *aIter.GetCurItem())
    2179         [ #  # ]:          0 :                             rAttrSet.ClearItem( nWhich );       // loeschen
    2180                 :            : 
    2181         [ #  # ]:          0 :                         if( aIter.IsAtEnd() )
    2182                 :            :                             break;
    2183         [ #  # ]:          0 :                         nWhich = aIter.NextItem()->Which();
    2184                 :            :                     }
    2185         [ #  # ]:          0 :                     break;
    2186                 :            :                 }
    2187                 :            :             }
    2188                 :            : 
    2189         [ #  # ]:          0 :             pDoc->InsertPoolItem(aPam, *pCharFmt, 0);
    2190         [ #  # ]:          0 :             rSet.GetAttrSet().ClearItem(RES_TXTATR_CHARFMT);     //test hack
    2191                 :            :         }
    2192         [ #  # ]:          0 :         if (rSet.GetAttrSet().Count())
    2193                 :            :         {
    2194                 :            :             // dann setze ueber diesen Bereich die Attrbiute
    2195         [ #  # ]:          0 :             SetSwgValues(rSet.GetAttrSet());
    2196                 :          0 :             pDoc->InsertItemSet(aPam, rSet.GetAttrSet(),
    2197         [ #  # ]:          0 :                     nsSetAttrMode::SETATTR_DONTCHGNUMRULE);
    2198                 :            :         }
    2199                 :            :     }
    2200                 :            : 
    2201         [ #  # ]:          0 :     if( SFX_ITEM_SET == rSet.GetAttrSet().GetItemState(
    2202         [ #  # ]:          0 :         FN_PARAM_NUM_LEVEL, sal_False, &pItem ))
    2203                 :            :     {
    2204                 :            :         // dann ueber den Bereich an den Nodes das NodeNum setzen
    2205         [ #  # ]:          0 :         for( sal_uLong n = nSNd; n <= nENd; ++n )
    2206                 :            :         {
    2207 [ #  # ][ #  # ]:          0 :             SwTxtNode* pTxtNd = pDoc->GetNodes()[ n ]->GetTxtNode();
    2208         [ #  # ]:          0 :             if( pTxtNd )
    2209                 :            :             {
    2210         [ #  # ]:          0 :                 pTxtNd->SetAttrListLevel((sal_uInt8) ((SfxUInt16Item*)pItem)->GetValue());
    2211                 :            :                 // Update vom LR-Space abschalten?
    2212                 :            :             }
    2213                 :            :         }
    2214                 :            :     }
    2215                 :            : 
    2216         [ #  # ]:          0 :     if( SFX_ITEM_SET == rSet.GetAttrSet().GetItemState(
    2217         [ #  # ]:          0 :         RES_PARATR_NUMRULE, sal_False, &pItem ))
    2218                 :            :     {
    2219                 :            :         const SwNumRule* pRule = pDoc->FindNumRulePtr(
    2220         [ #  # ]:          0 :                                     ((SwNumRuleItem*)pItem)->GetValue() );
    2221 [ #  # ][ #  # ]:          0 :         if( pRule && ( pRule->IsContinusNum() || !bNewNumList ))
         [ #  # ][ #  # ]
    2222                 :            :         {
    2223                 :            :             // diese Rule hat keinen Level, also muss die Einrueckung
    2224                 :            :             // erhalten bleiben!
    2225                 :            :             // dann ueber den Bereich an den Nodes das Flag zuruecksetzen
    2226         [ #  # ]:          0 :             for( sal_uLong n = nSNd; n <= nENd; ++n )
    2227                 :            :             {
    2228 [ #  # ][ #  # ]:          0 :                 SwTxtNode* pTxtNd = pDoc->GetNodes()[ n ]->GetTxtNode();
    2229         [ #  # ]:          0 :                 if( pTxtNd )
    2230                 :            :                 {
    2231                 :            :                     // Update vom LR-Space abschalten
    2232                 :          0 :                     pTxtNd->SetNumLSpace( sal_False );
    2233                 :            :                 }
    2234                 :            :             }
    2235                 :            :         }
    2236                 :            :     }
    2237                 :            : 
    2238                 :          0 :     bool bNoNum = true;
    2239 [ #  # ][ #  # ]:          0 :     if (
                 [ #  # ]
    2240         [ #  # ]:          0 :         (SFX_ITEM_SET == rSet.GetAttrSet().GetItemState(RES_PARATR_NUMRULE))
    2241         [ #  # ]:          0 :      || (SFX_ITEM_SET == rSet.GetAttrSet().GetItemState(FN_PARAM_NUM_LEVEL))
    2242                 :            :        )
    2243                 :            :     {
    2244                 :          0 :         bNoNum = false;
    2245                 :            :     }
    2246                 :            : 
    2247         [ #  # ]:          0 :     if (bNoNum)
    2248                 :            :     {
    2249         [ #  # ]:          0 :         for( sal_uLong n = nSNd; n <= nENd; ++n )
    2250                 :            :         {
    2251 [ #  # ][ #  # ]:          0 :             SwTxtNode* pTxtNd = pDoc->GetNodes()[ n ]->GetTxtNode();
    2252         [ #  # ]:          0 :             if( pTxtNd )
    2253                 :            :             {
    2254                 :            :                 pTxtNd->SetAttr(
    2255 [ #  # ][ #  # ]:          0 :                     *GetDfltAttr(RES_PARATR_NUMRULE));
    2256                 :            :             }
    2257                 :            :         }
    2258         [ #  # ]:          0 :     }
    2259                 :          0 : }
    2260                 :            : 
    2261                 :          0 : DocPageInformation::DocPageInformation()
    2262                 :            :     : maBox( RES_BOX ),
    2263                 :            :     mnPaperw(12240), mnPaperh(15840), mnMargl(1800), mnMargr(1800),
    2264                 :            :     mnMargt(1440), mnMargb(1440), mnGutter(0), mnPgnStart(1), mbFacingp(false),
    2265                 :          0 :     mbLandscape(false), mbRTLdoc(false)
    2266                 :            : {
    2267                 :          0 : }
    2268                 :            : 
    2269                 :          0 : SectPageInformation::SectPageInformation(const DocPageInformation &rDoc)
    2270                 :            :     : maBox(rDoc.maBox), mpTitlePageHdFt(0), mpPageHdFt(0),
    2271                 :            :     mnPgwsxn(rDoc.mnPaperw), mnPghsxn(rDoc.mnPaperh), mnMarglsxn(rDoc.mnMargl),
    2272                 :            :     mnMargrsxn(rDoc.mnMargr), mnMargtsxn(rDoc.mnMargt),
    2273                 :            :     mnMargbsxn(rDoc.mnMargb), mnGutterxsn(rDoc.mnGutter), mnHeadery(720),
    2274                 :            :     mnFootery(720), mnPgnStarts(rDoc.mnPgnStart), mnCols(1), mnColsx(720),
    2275                 :            :     mnStextflow(rDoc.mbRTLdoc ? 3 : 0), mnBkc(2), mbLndscpsxn(rDoc.mbLandscape),
    2276                 :            :     mbTitlepg(false), mbFacpgsxn(rDoc.mbFacingp), mbRTLsection(rDoc.mbRTLdoc),
    2277 [ #  # ][ #  # ]:          0 :     mbPgnrestart(false), mbTitlePageHdFtUsed(false), mbPageHdFtUsed(false)
                 [ #  # ]
    2278                 :            : {
    2279                 :          0 : };
    2280                 :            : 
    2281                 :          0 : SectPageInformation::SectPageInformation(const SectPageInformation &rSect)
    2282                 :            :     : maColumns(rSect.maColumns), maBox(rSect.maBox),
    2283                 :            :     maNumType(rSect.maNumType), mpTitlePageHdFt(rSect.mpTitlePageHdFt),
    2284                 :            :     mpPageHdFt(rSect.mpPageHdFt), mnPgwsxn(rSect.mnPgwsxn),
    2285                 :            :     mnPghsxn(rSect.mnPghsxn), mnMarglsxn(rSect.mnMarglsxn),
    2286                 :            :     mnMargrsxn(rSect.mnMargrsxn), mnMargtsxn(rSect.mnMargtsxn),
    2287                 :            :     mnMargbsxn(rSect.mnMargbsxn), mnGutterxsn(rSect.mnGutterxsn),
    2288                 :            :     mnHeadery(rSect.mnHeadery), mnFootery(rSect.mnFootery),
    2289                 :            :     mnPgnStarts(rSect.mnPgnStarts), mnCols(rSect.mnCols),
    2290                 :            :     mnColsx(rSect.mnColsx), mnStextflow(rSect.mnStextflow), mnBkc(rSect.mnBkc),
    2291                 :            :     mbLndscpsxn(rSect.mbLndscpsxn), mbTitlepg(rSect.mbTitlepg),
    2292                 :            :     mbFacpgsxn(rSect.mbFacpgsxn), mbRTLsection(rSect.mbRTLsection),
    2293                 :            :     mbPgnrestart(rSect.mbPgnrestart),
    2294                 :            :     mbTitlePageHdFtUsed(rSect.mbTitlePageHdFtUsed),
    2295 [ #  # ][ #  # ]:          0 :     mbPageHdFtUsed(rSect.mbPageHdFtUsed)
    2296                 :            : {
    2297                 :          0 : };
    2298                 :            : 
    2299                 :          0 : rtfSection::rtfSection(const SwPosition &rPos,
    2300                 :            :     const SectPageInformation &rPageInfo)
    2301                 :            :     : maStart(rPos.nNode), maPageInfo(rPageInfo), mpSection(0), mpTitlePage(0),
    2302         [ #  # ]:          0 :     mpPage(0)
    2303                 :            : {
    2304                 :          0 : }
    2305                 :            : 
    2306                 :          0 : void rtfSections::push_back(const rtfSection &rSect)
    2307                 :            : {
    2308 [ #  # ][ #  # ]:          0 :     if (!maSegments.empty() && (maSegments.back().maStart == rSect.maStart))
                 [ #  # ]
    2309                 :          0 :         maSegments.pop_back();
    2310                 :          0 :     maSegments.push_back(rSect);
    2311                 :          0 : }
    2312                 :            : 
    2313                 :            : // lese alle Dokument-Controls ein
    2314                 :          0 : void SwRTFParser::SetPageInformationAsDefault(const DocPageInformation &rInfo)
    2315                 :            : {
    2316                 :            :     //If we are at the beginning of the document then start the document with
    2317                 :            :     //a segment with these properties. See #i14982# for this requirement
    2318 [ #  # ][ #  # ]:          0 :     rtfSection aSect(*pPam->GetPoint(), SectPageInformation(rInfo));
                 [ #  # ]
    2319 [ #  # ][ #  # ]:          0 :     if (maSegments.empty() || (maSegments.back().maStart == aSect.maStart))
         [ #  # ][ #  # ]
    2320         [ #  # ]:          0 :         maSegments.push_back(aSect);
    2321                 :            : 
    2322 [ #  # ][ #  # ]:          0 :     if (!bSwPageDesc && IsNewDoc())
                 [ #  # ]
    2323                 :            :     {
    2324         [ #  # ]:          0 :         SwFmtFrmSize aFrmSize(ATT_FIX_SIZE, rInfo.mnPaperw, rInfo.mnPaperh);
    2325                 :            : 
    2326         [ #  # ]:          0 :         SvxLRSpaceItem aLR( static_cast< sal_uInt16 >(rInfo.mnMargl), static_cast< sal_uInt16 >(rInfo.mnMargr), 0, 0, RES_LR_SPACE );
    2327         [ #  # ]:          0 :         SvxULSpaceItem aUL( static_cast< sal_uInt16 >(rInfo.mnMargt), static_cast< sal_uInt16 >(rInfo.mnMargb), RES_UL_SPACE );
    2328                 :            : 
    2329                 :            :         UseOnPage eUseOn;
    2330         [ #  # ]:          0 :         if (rInfo.mbFacingp)
    2331                 :          0 :             eUseOn = UseOnPage(nsUseOnPage::PD_MIRROR | nsUseOnPage::PD_HEADERSHARE | nsUseOnPage::PD_FOOTERSHARE);
    2332                 :            :         else
    2333                 :          0 :             eUseOn = UseOnPage(nsUseOnPage::PD_ALL | nsUseOnPage::PD_HEADERSHARE | nsUseOnPage::PD_FOOTERSHARE);
    2334                 :            : 
    2335                 :          0 :         sal_uInt16 nPgStart = static_cast< sal_uInt16 >(rInfo.mnPgnStart);
    2336                 :            : 
    2337                 :            :         SvxFrameDirectionItem aFrmDir(rInfo.mbRTLdoc ?
    2338 [ #  # ][ #  # ]:          0 :             FRMDIR_HORI_RIGHT_TOP : FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR);
    2339                 :            : 
    2340                 :            :         // direkt an der Standartseite drehen
    2341         [ #  # ]:          0 :         SwPageDesc& rPg = pDoc->GetPageDesc( 0 );
    2342                 :          0 :         rPg.WriteUseOn( eUseOn );
    2343                 :            : 
    2344         [ #  # ]:          0 :         if (rInfo.mbLandscape)
    2345                 :          0 :             rPg.SetLandscape(true);
    2346                 :            : 
    2347                 :          0 :         SwFrmFmt &rFmt1 = rPg.GetMaster(), &rFmt2 = rPg.GetLeft();
    2348                 :            : 
    2349 [ #  # ][ #  # ]:          0 :         rFmt1.SetFmtAttr( aFrmSize );   rFmt2.SetFmtAttr( aFrmSize );
    2350 [ #  # ][ #  # ]:          0 :         rFmt1.SetFmtAttr( aLR );        rFmt2.SetFmtAttr( aLR );
    2351 [ #  # ][ #  # ]:          0 :         rFmt1.SetFmtAttr( aUL );       rFmt2.SetFmtAttr( aUL );
    2352 [ #  # ][ #  # ]:          0 :         rFmt1.SetFmtAttr( aFrmDir );   rFmt2.SetFmtAttr( aFrmDir );
    2353                 :            : 
    2354                 :            :         // StartNummer der Seiten setzen
    2355         [ #  # ]:          0 :         if (nPgStart  != 1)
    2356                 :            :         {
    2357         [ #  # ]:          0 :             SwFmtPageDesc aPgDsc( &rPg );
    2358                 :          0 :             aPgDsc.SetNumOffset( nPgStart );
    2359 [ #  # ][ #  # ]:          0 :             pDoc->InsertPoolItem( *pPam, aPgDsc, 0 );
    2360 [ #  # ][ #  # ]:          0 :         }
         [ #  # ][ #  # ]
    2361         [ #  # ]:          0 :     }
    2362                 :          0 : }
    2363                 :            : 
    2364                 :          0 : void SwRTFParser::SetBorderLine(SvxBoxItem& rBox, sal_uInt16 nLine)
    2365                 :            : {
    2366                 :          0 :     int bWeiter = true;
    2367                 :          0 :     short nLineThickness = 1;
    2368                 :          0 :     short nPageDistance = 0;
    2369                 :          0 :     sal_uInt8 nCol = 0;
    2370                 :          0 :     short nIdx = 0;
    2371                 :            : 
    2372                 :          0 :     int nToken = GetNextToken();
    2373   [ #  #  #  # ]:          0 :     do {
                 [ #  # ]
    2374   [ #  #  #  #  :          0 :         switch( nToken )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                #  #  # ]
    2375                 :            :         {
    2376                 :            :         case RTF_BRDRS:
    2377                 :          0 :             nIdx = 1;
    2378                 :          0 :             break;
    2379                 :            : 
    2380                 :            :         case RTF_BRDRDB:
    2381                 :          0 :             nIdx = 3;
    2382                 :          0 :             break;
    2383                 :            : 
    2384                 :            :         case RTF_BRDRTRIPLE:
    2385                 :          0 :             nIdx = 10;
    2386                 :          0 :             break;
    2387                 :            : 
    2388                 :            :         case RTF_BRDRTNTHSG:
    2389                 :          0 :             nIdx = 11;
    2390                 :          0 :             break;
    2391                 :            : 
    2392                 :            :         case RTF_BRDRTHTNSG:
    2393                 :          0 :             nIdx = 12;
    2394                 :          0 :             break;
    2395                 :            : 
    2396                 :            :         case RTF_BRDRTNTHTNSG:
    2397                 :          0 :             nIdx = 13;
    2398                 :          0 :             break;
    2399                 :            : 
    2400                 :            :         case RTF_BRDRTNTHMG:
    2401                 :          0 :             nIdx = 14;
    2402                 :          0 :             break;
    2403                 :            : 
    2404                 :            :         case RTF_BRDRTHTNMG:
    2405                 :          0 :             nIdx = 15;
    2406                 :          0 :             break;
    2407                 :            : 
    2408                 :            :         case RTF_BRDRTNTHTNMG:
    2409                 :          0 :             nIdx = 16;
    2410                 :          0 :             break;
    2411                 :            : 
    2412                 :            :         case RTF_BRDRTNTHLG:
    2413                 :          0 :             nIdx = 17;
    2414                 :          0 :             break;
    2415                 :            : 
    2416                 :            :         case RTF_BRDRTHTNLG:
    2417                 :          0 :             nIdx = 18;
    2418                 :          0 :             break;
    2419                 :            : 
    2420                 :            :         case RTF_BRDRTNTHTNLG:
    2421                 :          0 :             nIdx = 19;
    2422                 :          0 :             break;
    2423                 :            : 
    2424                 :            :         case RTF_BRDRWAVY:
    2425                 :          0 :             nIdx = 20;
    2426                 :          0 :             break;
    2427                 :            : 
    2428                 :            :         case RTF_BRDRWAVYDB:
    2429                 :          0 :             nIdx = 21;
    2430                 :          0 :             break;
    2431                 :            : 
    2432                 :            :         case RTF_BRDREMBOSS:
    2433                 :          0 :             nIdx = 24;
    2434                 :          0 :             break;
    2435                 :            : 
    2436                 :            :         case RTF_BRDRENGRAVE:
    2437                 :          0 :             nIdx = 25;
    2438                 :          0 :             break;
    2439                 :            : 
    2440                 :            :         case RTF_BRSP:
    2441                 :          0 :             nPageDistance = static_cast< short >(nTokenValue);
    2442                 :          0 :             break;
    2443                 :            : 
    2444                 :            :         case RTF_BRDRDOT:           // SO does not have dashed or dotted lines
    2445                 :          0 :             nIdx = 6;
    2446                 :          0 :             break;
    2447                 :            :         case RTF_BRDRDASH:
    2448                 :          0 :             nIdx = 7;
    2449                 :          0 :             break;
    2450                 :            :         case RTF_BRDRDASHSM:
    2451                 :            :         case RTF_BRDRDASHD:
    2452                 :            :         case RTF_BRDRDASHDD:
    2453                 :            :         case RTF_BRDRDASHDOTSTR:
    2454                 :            :         case RTF_BRDRSH:            // shading not supported
    2455                 :            :         case RTF_BRDRCF:            // colors not supported
    2456                 :          0 :             break;
    2457                 :            : 
    2458                 :            :         case RTF_BRDRW:
    2459                 :          0 :             nLineThickness = static_cast< short >(nTokenValue);
    2460                 :          0 :             break;
    2461                 :            :         default:
    2462                 :          0 :             bWeiter = false;
    2463                 :          0 :             SkipToken(-1);
    2464                 :          0 :             break;
    2465                 :            :         }
    2466         [ #  # ]:          0 :         if (bWeiter)
    2467                 :          0 :             nToken = GetNextToken();
    2468                 :          0 :     } while (bWeiter && IsParserWorking());
    2469                 :            : 
    2470                 :          0 :     GetLineIndex(rBox, nLineThickness, nPageDistance, nCol, nIdx, nLine, nLine, 0);
    2471                 :          0 : }
    2472                 :            : 
    2473                 :            : // lese alle Dokument-Controls ein
    2474                 :          0 : void SwRTFParser::ReadDocControls( int nToken )
    2475                 :            : {
    2476                 :          0 :     int bWeiter = true;
    2477                 :            : 
    2478         [ #  # ]:          0 :     SwFtnInfo aFtnInfo;
    2479         [ #  # ]:          0 :     SwEndNoteInfo aEndInfo;
    2480                 :          0 :     bool bSetHyph = false;
    2481                 :            : 
    2482                 :          0 :     sal_Bool bEndInfoChgd = sal_False, bFtnInfoChgd = sal_False;
    2483                 :            : 
    2484   [ #  #  #  # ]:          0 :     do {
                 [ #  # ]
    2485                 :          0 :         sal_uInt16 nValue = sal_uInt16( nTokenValue );
    2486   [ #  #  #  #  :          0 :         switch( nToken )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    2487                 :            :         {
    2488                 :            :         case RTF_RTLDOC:
    2489                 :          0 :             maPageDefaults.mbRTLdoc = true;
    2490                 :          0 :             break;
    2491                 :            :         case RTF_LTRDOC:
    2492                 :          0 :             maPageDefaults.mbRTLdoc = false;
    2493                 :          0 :             break;
    2494                 :            :         case RTF_LANDSCAPE:
    2495                 :          0 :             maPageDefaults.mbLandscape = true;
    2496                 :          0 :             break;
    2497                 :            :         case RTF_PAPERW:
    2498         [ #  # ]:          0 :             if( 0 < nTokenValue )
    2499                 :          0 :                 maPageDefaults.mnPaperw = nTokenValue;
    2500                 :          0 :             break;
    2501                 :            :         case RTF_PAPERH:
    2502         [ #  # ]:          0 :             if( 0 < nTokenValue )
    2503                 :          0 :                 maPageDefaults.mnPaperh = nTokenValue;
    2504                 :          0 :             break;
    2505                 :            :         case RTF_MARGL:
    2506         [ #  # ]:          0 :             if( 0 <= nTokenValue )
    2507                 :          0 :                 maPageDefaults.mnMargl = nTokenValue;
    2508                 :          0 :             break;
    2509                 :            :         case RTF_MARGR:
    2510         [ #  # ]:          0 :             if( 0 <= nTokenValue )
    2511                 :          0 :                 maPageDefaults.mnMargr = nTokenValue;
    2512                 :          0 :             break;
    2513                 :            :         case RTF_MARGT:
    2514         [ #  # ]:          0 :             if( 0 <= nTokenValue )
    2515                 :          0 :                 maPageDefaults.mnMargt = nTokenValue;
    2516                 :          0 :             break;
    2517                 :            :         case RTF_MARGB:
    2518         [ #  # ]:          0 :             if( 0 <= nTokenValue )
    2519                 :          0 :                 maPageDefaults.mnMargb = nTokenValue;
    2520                 :          0 :             break;
    2521                 :            :         case RTF_FACINGP:
    2522                 :          0 :             maPageDefaults.mbFacingp = true;
    2523                 :          0 :             break;
    2524                 :            :         case RTF_PGNSTART:
    2525                 :          0 :             maPageDefaults.mnPgnStart = nTokenValue;
    2526                 :          0 :             break;
    2527                 :            :         case RTF_ENDDOC:
    2528                 :            :         case RTF_ENDNOTES:
    2529                 :          0 :             aFtnInfo.ePos = FTNPOS_CHAPTER; bFtnInfoChgd = sal_True;
    2530                 :          0 :             break;
    2531                 :            :         case RTF_FTNTJ:
    2532                 :            :         case RTF_FTNBJ:
    2533                 :          0 :             aFtnInfo.ePos = FTNPOS_PAGE; bFtnInfoChgd = sal_True;
    2534                 :          0 :             break;
    2535                 :            : 
    2536                 :            :         case RTF_AENDDOC:
    2537                 :            :         case RTF_AENDNOTES:
    2538                 :            :         case RTF_AFTNTJ:
    2539                 :            :         case RTF_AFTNBJ:
    2540                 :            :         case RTF_AFTNRESTART:
    2541                 :            :         case RTF_AFTNRSTCONT:
    2542                 :          0 :             break;      // wir kenn nur am Doc Ende und Doc weite Num.!
    2543                 :            : 
    2544                 :            :         case RTF_FTNSTART:
    2545         [ #  # ]:          0 :             if( nValue )
    2546                 :            :             {
    2547                 :          0 :                 aFtnInfo.nFtnOffset = nValue-1;
    2548                 :          0 :                 bFtnInfoChgd = sal_True;
    2549                 :            :             }
    2550                 :          0 :             break;
    2551                 :            :         case RTF_AFTNSTART:
    2552         [ #  # ]:          0 :             if( nValue )
    2553                 :            :             {
    2554                 :          0 :                 aEndInfo.nFtnOffset = nValue-1;
    2555                 :          0 :                 bEndInfoChgd = sal_True;
    2556                 :            :             }
    2557                 :          0 :             break;
    2558                 :            :         case RTF_FTNRSTPG:
    2559                 :          0 :             aFtnInfo.eNum = FTNNUM_PAGE; bFtnInfoChgd = sal_True;
    2560                 :          0 :             break;
    2561                 :            :         case RTF_FTNRESTART:
    2562                 :          0 :             aFtnInfo.eNum = FTNNUM_CHAPTER; bFtnInfoChgd = sal_True;
    2563                 :          0 :             break;
    2564                 :            :         case RTF_FTNRSTCONT:
    2565                 :          0 :             aFtnInfo.eNum = FTNNUM_DOC; bFtnInfoChgd = sal_True;
    2566                 :          0 :             break;
    2567                 :            : 
    2568                 :            :         case RTF_FTNNAR:
    2569                 :          0 :             aFtnInfo.aFmt.SetNumberingType(SVX_NUM_ARABIC); bFtnInfoChgd = sal_True; break;
    2570                 :            :         case RTF_FTNNALC:
    2571                 :          0 :             aFtnInfo.aFmt.SetNumberingType(SVX_NUM_CHARS_LOWER_LETTER_N); bFtnInfoChgd = sal_True; break;
    2572                 :            :         case RTF_FTNNAUC:
    2573                 :          0 :             aFtnInfo.aFmt.SetNumberingType(SVX_NUM_CHARS_UPPER_LETTER_N); bFtnInfoChgd = sal_True; break;
    2574                 :            :         case RTF_FTNNRLC:
    2575                 :          0 :             aFtnInfo.aFmt.SetNumberingType(SVX_NUM_ROMAN_LOWER); bFtnInfoChgd = sal_True; break;
    2576                 :            :         case RTF_FTNNRUC:
    2577                 :          0 :             aFtnInfo.aFmt.SetNumberingType(SVX_NUM_ROMAN_UPPER); bFtnInfoChgd = sal_True; break;
    2578                 :            :         case RTF_FTNNCHI:
    2579                 :          0 :             aFtnInfo.aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL); bFtnInfoChgd = sal_True; break;
    2580                 :            : 
    2581                 :            :         case RTF_AFTNNAR:
    2582                 :          0 :             aEndInfo.aFmt.SetNumberingType(SVX_NUM_ARABIC); bEndInfoChgd = sal_True; break;
    2583                 :            :         case RTF_AFTNNALC:
    2584                 :          0 :             aEndInfo.aFmt.SetNumberingType(SVX_NUM_CHARS_LOWER_LETTER_N);
    2585                 :          0 :             bEndInfoChgd = sal_True;
    2586                 :          0 :             break;
    2587                 :            :         case RTF_AFTNNAUC:
    2588                 :          0 :             aEndInfo.aFmt.SetNumberingType(SVX_NUM_CHARS_UPPER_LETTER_N);
    2589                 :          0 :             bEndInfoChgd = sal_True;
    2590                 :          0 :             break;
    2591                 :            :         case RTF_AFTNNRLC:
    2592                 :          0 :             aEndInfo.aFmt.SetNumberingType(SVX_NUM_ROMAN_LOWER);
    2593                 :          0 :             bEndInfoChgd = sal_True;
    2594                 :          0 :             break;
    2595                 :            :         case RTF_AFTNNRUC:
    2596                 :          0 :             aEndInfo.aFmt.SetNumberingType(SVX_NUM_ROMAN_UPPER);
    2597                 :          0 :             bEndInfoChgd = sal_True;
    2598                 :          0 :             break;
    2599                 :            :         case RTF_AFTNNCHI:
    2600                 :          0 :             aEndInfo.aFmt.SetNumberingType(SVX_NUM_CHAR_SPECIAL);
    2601                 :          0 :             bEndInfoChgd = sal_True;
    2602                 :          0 :             break;
    2603                 :            :         case RTF_HYPHAUTO:
    2604         [ #  # ]:          0 :             if (nTokenValue)
    2605                 :          0 :                 bSetHyph = true;
    2606                 :            :             //FOO//
    2607                 :          0 :             break;
    2608                 :            :         case RTF_PGBRDRT:
    2609         [ #  # ]:          0 :             SetBorderLine(maPageDefaults.maBox, BOX_LINE_TOP);
    2610                 :          0 :             break;
    2611                 :            : 
    2612                 :            :         case RTF_PGBRDRB:
    2613         [ #  # ]:          0 :             SetBorderLine(maPageDefaults.maBox, BOX_LINE_BOTTOM);
    2614                 :          0 :             break;
    2615                 :            : 
    2616                 :            :         case RTF_PGBRDRL:
    2617         [ #  # ]:          0 :             SetBorderLine(maPageDefaults.maBox, BOX_LINE_LEFT);
    2618                 :          0 :             break;
    2619                 :            : 
    2620                 :            :         case RTF_PGBRDRR:
    2621         [ #  # ]:          0 :             SetBorderLine(maPageDefaults.maBox, BOX_LINE_RIGHT);
    2622                 :          0 :             break;
    2623                 :            : 
    2624                 :            :         case '{':
    2625                 :            :             {
    2626                 :          0 :                 short nSkip = 0;
    2627 [ #  # ][ #  # ]:          0 :                 if( RTF_IGNOREFLAG != GetNextToken() )
    2628                 :          0 :                     nSkip = -1;
    2629 [ #  # ][ #  # ]:          0 :                 else if( RTF_DOCFMT != (( nToken = GetNextToken() )
    2630                 :            :                         & ~(0xff | RTF_SWGDEFS)) )
    2631                 :          0 :                     nSkip = -2;
    2632                 :            :                 else
    2633                 :            :                 {
    2634         [ #  # ]:          0 :                     SkipGroup();        // erstmal komplett ueberlesen
    2635                 :            :                     // ueberlese noch die schliessende Klammer
    2636         [ #  # ]:          0 :                     GetNextToken();
    2637                 :            :                 }
    2638         [ #  # ]:          0 :                 if( nSkip )
    2639                 :            :                 {
    2640         [ #  # ]:          0 :                     SkipToken( nSkip );     // Ignore wieder zurueck
    2641                 :          0 :                     bWeiter = sal_False;
    2642                 :            :                 }
    2643                 :            :             }
    2644                 :          0 :             break;
    2645                 :            : 
    2646                 :            :         default:
    2647 [ #  # ][ #  # ]:          0 :             if( RTF_DOCFMT == (nToken & ~(0xff | RTF_SWGDEFS)) ||
    2648                 :            :                 RTF_UNKNOWNCONTROL == nToken )
    2649         [ #  # ]:          0 :                 SvxRTFParser::NextToken( nToken );
    2650                 :            :             else
    2651                 :          0 :                 bWeiter = sal_False;
    2652                 :          0 :             break;
    2653                 :            :         }
    2654         [ #  # ]:          0 :         if( bWeiter )
    2655         [ #  # ]:          0 :             nToken = GetNextToken();
    2656                 :          0 :     } while( bWeiter && IsParserWorking() );
    2657                 :            : 
    2658         [ #  # ]:          0 :     if (IsNewDoc())
    2659                 :            :     {
    2660         [ #  # ]:          0 :         if( bEndInfoChgd )
    2661         [ #  # ]:          0 :             pDoc->SetEndNoteInfo( aEndInfo );
    2662         [ #  # ]:          0 :         if( bFtnInfoChgd )
    2663         [ #  # ]:          0 :             pDoc->SetFtnInfo( aFtnInfo );
    2664                 :            :     }
    2665                 :            : 
    2666         [ #  # ]:          0 :     if (!bSwPageDesc)
    2667                 :            :     {
    2668         [ #  # ]:          0 :         SetPageInformationAsDefault(maPageDefaults);
    2669                 :            : 
    2670         [ #  # ]:          0 :         MakeStyleTab();
    2671                 :            : 
    2672                 :          0 :         SwTxtFmtColl *pColl = NULL;
    2673         [ #  # ]:          0 :         std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find(0);
    2674                 :            : 
    2675 [ #  # ][ #  # ]:          0 :         if (iter == aTxtCollTbl.end())
    2676         [ #  # ]:          0 :             pColl = pDoc->GetTxtCollFromPool(RES_POOLCOLL_STANDARD, false );
    2677                 :            :         else
    2678         [ #  # ]:          0 :             pColl = iter->second;
    2679                 :            : 
    2680                 :            :         OSL_ENSURE(pColl, "impossible to have no standard style");
    2681                 :            : 
    2682         [ #  # ]:          0 :         if (pColl)
    2683                 :            :         {
    2684 [ #  # ][ #  # ]:          0 :             if (
         [ #  # ][ #  # ]
    2685                 :          0 :                 IsNewDoc() && bSetHyph &&
    2686                 :            :                 SFX_ITEM_SET != pColl->GetItemState(RES_PARATR_HYPHENZONE,
    2687         [ #  # ]:          0 :                 false)
    2688                 :            :                )
    2689                 :            :             {
    2690 [ #  # ][ #  # ]:          0 :                 pColl->SetFmtAttr(SvxHyphenZoneItem(true, RES_PARATR_HYPHENZONE));
                 [ #  # ]
    2691                 :            :             }
    2692                 :            : 
    2693         [ #  # ]:          0 :             pDoc->SetTxtFmtColl( *pPam, pColl );
    2694                 :            :         }
    2695                 :            :     }
    2696                 :            : 
    2697 [ #  # ][ #  # ]:          0 :     SkipToken( -1 );
                 [ #  # ]
    2698                 :          0 : }
    2699                 :            : 
    2700                 :          0 : void SwRTFParser::MakeStyleTab()
    2701                 :            : {
    2702                 :            :     // dann erzeuge aus der SvxStyle-Tabelle die Swg-Collections
    2703         [ #  # ]:          0 :     if( !GetStyleTbl().empty() )
    2704                 :            :     {
    2705                 :          0 :         sal_uInt16 nValidOutlineLevels = 0;
    2706         [ #  # ]:          0 :         if( !IsNewDoc() )
    2707                 :            :         {
    2708                 :            :             // search all outlined collections
    2709                 :          0 :             const SwTxtFmtColls& rColls = *pDoc->GetTxtFmtColls();
    2710         [ #  # ]:          0 :             for( sal_uInt16 n = rColls.size(); n; )
    2711         [ #  # ]:          0 :                 if( rColls[ --n ]->IsAssignedToListLevelOfOutlineStyle())
    2712                 :          0 :                     nValidOutlineLevels |= 1 << rColls[ n ]->GetAssignedOutlineStyleLevel();//<-end,zhaojianwei
    2713                 :            :         }
    2714                 :            : 
    2715 [ #  # ][ #  # ]:          0 :         for (SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it != GetStyleTbl().end(); ++it)
         [ #  # ][ #  # ]
                 [ #  # ]
    2716                 :            :         {
    2717         [ #  # ]:          0 :             sal_uInt16 nNo = it->first;
    2718         [ #  # ]:          0 :             SvxRTFStyleType* pStyle = it->second;
    2719         [ #  # ]:          0 :             if( pStyle->bIsCharFmt )
    2720                 :            :             {
    2721 [ #  # ][ #  # ]:          0 :                 if(aCharFmtTbl.find( nNo ) == aCharFmtTbl.end())
                 [ #  # ]
    2722                 :            :                     // existiert noch nicht, also anlegen
    2723         [ #  # ]:          0 :                     MakeCharStyle( nNo, *pStyle );
    2724                 :            :             }
    2725 [ #  # ][ #  # ]:          0 :             else if( aTxtCollTbl.find( nNo ) == aTxtCollTbl.end() )
                 [ #  # ]
    2726                 :            :             {
    2727                 :            :                 // existiert noch nicht, also anlegen
    2728         [ #  # ]:          0 :                 MakeStyle( nNo, *pStyle );
    2729                 :            :             }
    2730                 :            : 
    2731                 :            :         }
    2732                 :          0 :         bStyleTabValid = sal_True;
    2733                 :            :     }
    2734                 :          0 : }
    2735                 :            : 
    2736                 :          0 : sal_Bool lcl_SetFmtCol( SwFmt& rFmt, sal_uInt16 nCols, sal_uInt16 nColSpace,
    2737                 :            :                     const std::vector<sal_uInt16>& rColumns )
    2738                 :            : {
    2739                 :          0 :     sal_Bool bSet = sal_False;
    2740 [ #  # ][ #  # ]:          0 :     if( nCols && USHRT_MAX != nCols )
    2741                 :            :     {
    2742         [ #  # ]:          0 :         SwFmtCol aCol;
    2743         [ #  # ]:          0 :         if( USHRT_MAX == nColSpace )
    2744                 :          0 :             nColSpace = 720;
    2745                 :            : 
    2746         [ #  # ]:          0 :         aCol.Init( nCols, nColSpace, USHRT_MAX );
    2747         [ #  # ]:          0 :         if( nCols == ( rColumns.size() / 2 ) )
    2748                 :            :         {
    2749                 :          0 :             aCol._SetOrtho( sal_False );
    2750                 :          0 :             sal_uInt16 nWishWidth = 0, nHalfPrev = 0;
    2751         [ #  # ]:          0 :             for (sal_uInt16 n = 0, i = 0; static_cast<size_t>(n+1) < rColumns.size(); n += 2, ++i)
    2752                 :            :             {
    2753         [ #  # ]:          0 :                 SwColumn* pCol = &aCol.GetColumns()[ i ];
    2754                 :          0 :                 pCol->SetLeft( nHalfPrev );
    2755         [ #  # ]:          0 :                 sal_uInt16 nSp = rColumns[ n+1 ];
    2756                 :          0 :                 nHalfPrev = nSp / 2;
    2757                 :          0 :                 pCol->SetRight( nSp - nHalfPrev );
    2758         [ #  # ]:          0 :                 pCol->SetWishWidth( rColumns[ n ] +
    2759                 :          0 :                                     pCol->GetLeft() + pCol->GetRight() );
    2760                 :          0 :                 nWishWidth = nWishWidth + pCol->GetWishWidth();
    2761                 :            :             }
    2762                 :          0 :             aCol.SetWishWidth( nWishWidth );
    2763                 :            :         }
    2764         [ #  # ]:          0 :         rFmt.SetFmtAttr( aCol );
    2765         [ #  # ]:          0 :         bSet = sal_True;
    2766                 :            :     }
    2767                 :          0 :     return bSet;
    2768                 :            : }
    2769                 :            : 
    2770                 :          0 : void SwRTFParser::DoHairyWriterPageDesc(int nToken)
    2771                 :            : {
    2772                 :          0 :     int bWeiter = sal_True;
    2773   [ #  #  #  # ]:          0 :     do {
                 [ #  # ]
    2774         [ #  # ]:          0 :         if( '{' == nToken )
    2775                 :            :         {
    2776      [ #  #  # ]:          0 :             switch( nToken = GetNextToken() )
    2777                 :            :             {
    2778                 :            :             case RTF_IGNOREFLAG:
    2779         [ #  # ]:          0 :                 if( RTF_SECTFMT != (( nToken = GetNextToken() )
    2780                 :            :                     & ~(0xff | RTF_SWGDEFS)) )
    2781                 :            :                 {
    2782                 :          0 :                     SkipToken( -2 );    // Ignore und Token wieder zurueck
    2783                 :          0 :                     bWeiter = sal_False;
    2784                 :          0 :                     break;
    2785                 :            :                 }
    2786                 :            :                 // kein break, Gruppe ueberspringen
    2787                 :            : 
    2788                 :            :             case RTF_FOOTER:
    2789                 :            :             case RTF_HEADER:
    2790                 :            :             case RTF_FOOTERR:
    2791                 :            :             case RTF_HEADERR:
    2792                 :            :             case RTF_FOOTERL:
    2793                 :            :             case RTF_HEADERL:
    2794                 :            :             case RTF_FOOTERF:
    2795                 :            :             case RTF_HEADERF:
    2796                 :          0 :                 SkipGroup();        // erstmal komplett ueberlesen
    2797                 :            :                 // ueberlese noch die schliessende Klammer
    2798                 :          0 :                 GetNextToken();
    2799                 :          0 :                 break;
    2800                 :            : 
    2801                 :            :             default:
    2802                 :          0 :                 SkipToken( -1 );            // Ignore wieder zurueck
    2803                 :          0 :                 bWeiter = sal_False;
    2804                 :          0 :                 break;
    2805                 :            :             }
    2806                 :            :         }
    2807 [ #  # ][ #  # ]:          0 :         else if( RTF_SECTFMT == (nToken & ~(0xff | RTF_SWGDEFS)) ||
    2808                 :            :             RTF_UNKNOWNCONTROL == nToken )
    2809                 :          0 :             SvxRTFParser::NextToken( nToken );
    2810                 :            :         else
    2811                 :          0 :             bWeiter = sal_False;
    2812         [ #  # ]:          0 :         if( bWeiter )
    2813                 :          0 :             nToken = GetNextToken();
    2814                 :          0 :     } while( bWeiter && IsParserWorking() );
    2815                 :          0 :     SkipToken( -1 );                    // letztes Token wieder zurueck
    2816                 :          0 :     return;
    2817                 :            : }
    2818                 :            : 
    2819                 :          0 : void SwRTFParser::ReadSectControls( int nToken )
    2820                 :            : {
    2821                 :            :     //this is some hairy stuff to try and retain writer style page descriptors
    2822                 :            :     //in rtf, almost certainy a bad idea, but we've inherited it, so here it
    2823                 :            :     //stays
    2824         [ #  # ]:          0 :     if (bInPgDscTbl)
    2825                 :            :     {
    2826         [ #  # ]:          0 :         DoHairyWriterPageDesc(nToken);
    2827                 :          0 :         return;
    2828                 :            :     }
    2829                 :            : 
    2830                 :            :     OSL_ENSURE(!maSegments.empty(), "suspicious to have a section with no "
    2831                 :            :         "page info, though probably legal");
    2832         [ #  # ]:          0 :     if (maSegments.empty())
    2833                 :            :     {
    2834                 :          0 :         maSegments.push_back(rtfSection(*pPam->GetPoint(),
    2835   [ #  #  #  # ]:          0 :             SectPageInformation(maPageDefaults)));
         [ #  # ][ #  # ]
                 [ #  # ]
    2836                 :            :     }
    2837                 :            : 
    2838 [ #  # ][ #  # ]:          0 :     SectPageInformation aNewSection(maSegments.back().maPageInfo);
    2839                 :            : 
    2840                 :          0 :     bool bNewSection = false;
    2841                 :          0 :     bool bNewSectionHeader = false;
    2842                 :          0 :     const SwFmtHeader* _pKeepHeader = NULL;
    2843                 :          0 :     const SwFmtFooter* _pKeepFooter = NULL;
    2844                 :          0 :     int bWeiter = true;
    2845                 :          0 :     bool bKeepFooter = false;
    2846   [ #  #  #  # ]:          0 :     do {
                 [ #  # ]
    2847                 :          0 :         sal_uInt16 nValue = sal_uInt16( nTokenValue );
    2848   [ #  #  #  #  :          0 :         switch( nToken )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
    2849                 :            :         {
    2850                 :            :             case RTF_SECT:
    2851                 :          0 :                 bNewSection = true;
    2852                 :          0 :                 bForceNewTable = true;
    2853                 :          0 :                 break;
    2854                 :            :             case RTF_SECTD: {
    2855                 :            :                 //Reset to page defaults
    2856                 :          0 :                 SwPageDesc* oldPageDesc=aNewSection.mpPageHdFt;
    2857 [ #  # ][ #  # ]:          0 :                 aNewSection = SectPageInformation(maPageDefaults);
                 [ #  # ]
    2858                 :          0 :                 aNewSection.mpPageHdFt=oldPageDesc;
    2859                 :          0 :                 _pKeepHeader = NULL;
    2860                 :          0 :                 _pKeepFooter = NULL;
    2861                 :          0 :                 } break;
    2862                 :            :             case RTF_PGWSXN:
    2863         [ #  # ]:          0 :                 if (0 < nTokenValue)
    2864                 :          0 :                     aNewSection.mnPgwsxn = nTokenValue;
    2865                 :          0 :                 break;
    2866                 :            :             case RTF_PGHSXN:
    2867         [ #  # ]:          0 :                 if (0 < nTokenValue)
    2868                 :          0 :                     aNewSection.mnPghsxn = nTokenValue;
    2869                 :          0 :                 break;
    2870                 :            :             case RTF_MARGLSXN:
    2871         [ #  # ]:          0 :                 if (0 <= nTokenValue)
    2872                 :          0 :                     aNewSection.mnMarglsxn = nTokenValue;
    2873                 :          0 :                 break;
    2874                 :            :             case RTF_MARGRSXN:
    2875         [ #  # ]:          0 :                 if (0 <= nTokenValue)
    2876                 :          0 :                     aNewSection.mnMargrsxn = nTokenValue;
    2877                 :          0 :                 break;
    2878                 :            :             case RTF_MARGTSXN:
    2879         [ #  # ]:          0 :                 if (0 <= nTokenValue)
    2880                 :          0 :                     aNewSection.mnMargtsxn = nTokenValue;
    2881                 :          0 :                 break;
    2882                 :            :             case RTF_MARGBSXN:
    2883         [ #  # ]:          0 :                 if (0 <= nTokenValue)
    2884                 :          0 :                     aNewSection.mnMargbsxn = nTokenValue;
    2885                 :          0 :                 break;
    2886                 :            :             case RTF_FACPGSXN:
    2887                 :          0 :                 aNewSection.mbFacpgsxn = true;
    2888                 :          0 :                 break;
    2889                 :            :             case RTF_HEADERY:
    2890                 :          0 :                 aNewSection.mnHeadery = nTokenValue;
    2891                 :          0 :                 break;
    2892                 :            :             case RTF_FOOTERY:
    2893                 :          0 :                 aNewSection.mnFootery = nTokenValue;
    2894                 :          0 :                 break;
    2895                 :            :             case RTF_LNDSCPSXN:
    2896                 :          0 :                 aNewSection.mbLndscpsxn = true;
    2897                 :          0 :                 break;
    2898                 :            :             case RTF_PGNSTARTS:
    2899                 :          0 :                 aNewSection.mnPgnStarts = nTokenValue;
    2900                 :          0 :                 break;
    2901                 :            :             case RTF_PGNDEC:
    2902                 :          0 :                 aNewSection.maNumType.SetNumberingType(SVX_NUM_ARABIC);
    2903                 :          0 :                 break;
    2904                 :            :             case RTF_PGNUCRM:
    2905                 :          0 :                 aNewSection.maNumType.SetNumberingType(SVX_NUM_ROMAN_UPPER);
    2906                 :          0 :                 break;
    2907                 :            :             case RTF_PGNLCRM:
    2908                 :          0 :                 aNewSection.maNumType.SetNumberingType(SVX_NUM_ROMAN_LOWER);
    2909                 :          0 :                 break;
    2910                 :            :             case RTF_PGNUCLTR:
    2911                 :            :                 aNewSection.maNumType.SetNumberingType(
    2912                 :          0 :                     SVX_NUM_CHARS_UPPER_LETTER_N);
    2913                 :          0 :                 break;
    2914                 :            :             case RTF_PGNLCLTR:
    2915                 :            :                 aNewSection.maNumType.SetNumberingType(
    2916                 :          0 :                     SVX_NUM_CHARS_LOWER_LETTER_N);
    2917                 :          0 :                 break;
    2918                 :            :             case RTF_SBKNONE:
    2919                 :          0 :                 aNewSection.mnBkc = 0;
    2920                 :          0 :                 break;
    2921                 :            :             case RTF_SBKCOL:
    2922                 :          0 :                 aNewSection.mnBkc = 1;
    2923                 :          0 :                 break;
    2924                 :            :             case RTF_PGBRDRT:
    2925         [ #  # ]:          0 :                 SetBorderLine(aNewSection.maBox, BOX_LINE_TOP);
    2926                 :          0 :                 break;
    2927                 :            : 
    2928                 :            :             case RTF_PGBRDRB:
    2929         [ #  # ]:          0 :                 SetBorderLine(aNewSection.maBox, BOX_LINE_BOTTOM);
    2930                 :          0 :                 break;
    2931                 :            : 
    2932                 :            :             case RTF_PGBRDRL:
    2933         [ #  # ]:          0 :                 SetBorderLine(aNewSection.maBox, BOX_LINE_LEFT);
    2934                 :          0 :                 break;
    2935                 :            : 
    2936                 :            :             case RTF_PGBRDRR:
    2937         [ #  # ]:          0 :                 SetBorderLine(aNewSection.maBox, BOX_LINE_RIGHT);
    2938                 :          0 :                 break;
    2939                 :            : 
    2940                 :            :             case RTF_PGBRDROPT:
    2941                 :            :             case RTF_ENDNHERE:
    2942                 :            :             case RTF_BINFSXN:
    2943                 :            :             case RTF_BINSXN:
    2944                 :            :             case RTF_SBKPAGE:
    2945                 :            :             case RTF_SBKEVEN:
    2946                 :            :             case RTF_SBKODD:
    2947                 :            :             case RTF_LINEBETCOL:
    2948                 :            :             case RTF_LINEMOD:
    2949                 :            :             case RTF_LINEX:
    2950                 :            :             case RTF_LINESTARTS:
    2951                 :            :             case RTF_LINERESTART:
    2952                 :            :             case RTF_LINEPAGE:
    2953                 :            :             case RTF_LINECONT:
    2954                 :            :             case RTF_GUTTERSXN:
    2955                 :            :             case RTF_PGNCONT:
    2956                 :            :             case RTF_PGNRESTART:
    2957                 :            :             case RTF_PGNX:
    2958                 :            :             case RTF_PGNY:
    2959                 :            :             case RTF_VERTALT:
    2960                 :            :             case RTF_VERTALB:
    2961                 :            :             case RTF_VERTALC:
    2962                 :            :             case RTF_VERTALJ:
    2963                 :          0 :                 break;
    2964                 :            :             case RTF_TITLEPG:
    2965                 :          0 :                 aNewSection.mbTitlepg = true;
    2966                 :          0 :                 break;
    2967                 :            :             case RTF_HEADER:
    2968                 :            :             case RTF_HEADERL:
    2969                 :            :             case RTF_HEADERR:
    2970         [ #  # ]:          0 :                 if (aNewSection.mpPageHdFt!=NULL)
    2971                 :            :                 {
    2972                 :          0 :                     _pKeepHeader = NULL;
    2973                 :          0 :                     bKeepFooter = true; // #i82008
    2974         [ #  # ]:          0 :                     _pKeepFooter = &aNewSection.mpPageHdFt->GetMaster().GetFooter();
    2975                 :            :                 }
    2976                 :            :             case RTF_FOOTER:
    2977                 :            :             case RTF_FOOTERL:
    2978                 :            :             case RTF_FOOTERR:
    2979 [ #  # ][ #  # ]:          0 :                 if (aNewSection.mpPageHdFt!=NULL && !bKeepFooter )
    2980                 :            :                 {
    2981                 :          0 :                     _pKeepFooter = NULL;
    2982         [ #  # ]:          0 :                     _pKeepHeader = &aNewSection.mpPageHdFt->GetMaster().GetHeader();
    2983                 :            :                 }
    2984                 :          0 :                 bKeepFooter = false;
    2985         [ #  # ]:          0 :                 if (!bNewSectionHeader) { // If a header is redefined in a section
    2986                 :          0 :                     bNewSectionHeader=true;           //  a new header must be created.
    2987                 :          0 :                     aNewSection.mpPageHdFt=NULL;
    2988                 :            :                 }
    2989         [ #  # ]:          0 :                 if (!aNewSection.mpPageHdFt)
    2990                 :            :                 {
    2991         [ #  # ]:          0 :                     String aName(RTL_CONSTASCII_USTRINGPARAM("rtfHdFt"));
    2992 [ #  # ][ #  # ]:          0 :                     aName += String::CreateFromInt32(maSegments.size());
                 [ #  # ]
    2993         [ #  # ]:          0 :                     sal_uInt16 nPageNo = pDoc->MakePageDesc(aName);
    2994         [ #  # ]:          0 :                     aNewSection.mpPageHdFt = &pDoc->GetPageDesc(nPageNo);
    2995                 :          0 :                     aNewSection.mbPageHdFtUsed = true;
    2996 [ #  # ][ #  # ]:          0 :                     maSegments.maDummyPageNos.push_back(nPageNo);
    2997                 :            :                 }
    2998         [ #  # ]:          0 :                 ReadHeaderFooter(nToken, aNewSection.mpPageHdFt);
    2999 [ #  # ][ #  # ]:          0 :                 if (_pKeepHeader) aNewSection.mpPageHdFt->GetMaster().SetFmtAttr(*_pKeepHeader);
    3000 [ #  # ][ #  # ]:          0 :                 if (_pKeepFooter) aNewSection.mpPageHdFt->GetMaster().SetFmtAttr(*_pKeepFooter);
    3001                 :          0 :                 break;
    3002                 :            :             case RTF_FOOTERF:
    3003                 :            :             case RTF_HEADERF:
    3004         [ #  # ]:          0 :                 if (!aNewSection.mpTitlePageHdFt)
    3005                 :            :                 {
    3006         [ #  # ]:          0 :                     String aTitle(RTL_CONSTASCII_USTRINGPARAM("rtfTitleHdFt"));
    3007 [ #  # ][ #  # ]:          0 :                     aTitle += String::CreateFromInt32(maSegments.size());
                 [ #  # ]
    3008         [ #  # ]:          0 :                     sal_uInt16 nPageNo = pDoc->MakePageDesc(aTitle);
    3009         [ #  # ]:          0 :                     aNewSection.mpTitlePageHdFt = &pDoc->GetPageDesc(nPageNo);
    3010                 :          0 :                     aNewSection.mbTitlePageHdFtUsed = true;
    3011 [ #  # ][ #  # ]:          0 :                     maSegments.maDummyPageNos.push_back(nPageNo);
    3012                 :            :                 }
    3013         [ #  # ]:          0 :                 ReadHeaderFooter(nToken, aNewSection.mpTitlePageHdFt);
    3014                 :          0 :                 break;
    3015                 :            :             case RTF_COLS:
    3016                 :          0 :                 aNewSection.mnCols = nTokenValue;
    3017                 :          0 :                 break;
    3018                 :            :             case RTF_COLSX:
    3019                 :          0 :                 aNewSection.mnColsx = nTokenValue;
    3020                 :          0 :                 break;
    3021                 :            :             case RTF_COLNO:
    3022                 :            :                 {
    3023                 :            :                     // next token must be either colw or colsr
    3024                 :          0 :                     unsigned long nAktCol = nValue;
    3025                 :          0 :                     long nWidth = 0, nSpace = 0;
    3026         [ #  # ]:          0 :                     int nColToken = GetNextToken();
    3027         [ #  # ]:          0 :                     if (RTF_COLW == nColToken)
    3028                 :            :                     {
    3029                 :            :                         // next token could be colsr (but not required)
    3030                 :          0 :                         nWidth = nTokenValue;
    3031 [ #  # ][ #  # ]:          0 :                         if( RTF_COLSR == GetNextToken() )
    3032                 :          0 :                             nSpace = nTokenValue;
    3033                 :            :                         else
    3034         [ #  # ]:          0 :                             SkipToken( -1 );        // put back token
    3035                 :            :                     }
    3036         [ #  # ]:          0 :                     else if (RTF_COLSR == nColToken)
    3037                 :            :                     {
    3038                 :            :                         // next token must be colw (what sense should it make to have colsr only?!)
    3039                 :          0 :                         nSpace = nTokenValue;
    3040 [ #  # ][ #  # ]:          0 :                         if( RTF_COLW == GetNextToken() )
    3041                 :          0 :                             nWidth = nTokenValue;
    3042                 :            :                         else
    3043                 :            :                             // what should we do if an isolated colsr without colw is found? Doesn't make sense!
    3044         [ #  # ]:          0 :                             SkipToken( -1 );        // put back token
    3045                 :            :                     }
    3046                 :            :                     else
    3047                 :            :                         break;
    3048                 :            : 
    3049         [ #  # ]:          0 :                     if (--nAktCol == (aNewSection.maColumns.size() / 2))
    3050                 :            :                     {
    3051         [ #  # ]:          0 :                         aNewSection.maColumns.push_back(nWidth);
    3052         [ #  # ]:          0 :                         aNewSection.maColumns.push_back(nSpace);
    3053                 :            :                     }
    3054                 :            :                 }
    3055                 :          0 :                 break;
    3056                 :            :             case RTF_STEXTFLOW:
    3057                 :          0 :                 aNewSection.mnStextflow = nTokenValue;
    3058                 :          0 :                 break;
    3059                 :            :             case RTF_RTLSECT:
    3060                 :          0 :                 aNewSection.mbRTLsection = true;
    3061                 :          0 :                 break;
    3062                 :            :             case RTF_LTRSECT:
    3063                 :          0 :                 aNewSection.mbRTLsection = false;
    3064                 :          0 :                 break;
    3065                 :            :             case '{':
    3066                 :            :                 {
    3067                 :          0 :                     short nSkip = 0;
    3068 [ #  # ][ #  # ]:          0 :                     if( RTF_IGNOREFLAG != ( nToken = GetNextToken() ))
    3069                 :          0 :                         nSkip = -1;
    3070 [ #  # ][ #  # ]:          0 :                     else if( RTF_SECTFMT != (( nToken = GetNextToken() )
         [ #  # ][ #  # ]
    3071                 :            :                              & ~(0xff | RTF_SWGDEFS)) &&
    3072                 :            :                             ( RTF_DOCFMT != ( nToken & ~(0xff | RTF_SWGDEFS))) )
    3073                 :          0 :                         nSkip = -2;
    3074                 :            :                     else
    3075                 :            :                     {
    3076                 :            :                         // erstmal komplett ueberlesen
    3077         [ #  # ]:          0 :                         SkipGroup();
    3078                 :            :                         // ueberlese noch die schliessende Klammer
    3079         [ #  # ]:          0 :                         GetNextToken();
    3080                 :            :                     }
    3081         [ #  # ]:          0 :                     if (nSkip)
    3082                 :            :                     {
    3083                 :            :                         bWeiter = ((-1 == nSkip) &&
    3084                 :            :                             (
    3085                 :            :                               RTF_FOOTER == nToken || RTF_HEADER == nToken ||
    3086                 :            :                               RTF_FOOTERR == nToken || RTF_HEADERR == nToken ||
    3087                 :            :                               RTF_FOOTERL == nToken || RTF_HEADERL == nToken ||
    3088                 :            :                               RTF_FOOTERF == nToken || RTF_HEADERF == nToken
    3089 [ #  # ][ #  # ]:          0 :                             ));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    3090         [ #  # ]:          0 :                         SkipToken (nSkip);      // Ignore wieder zurueck
    3091                 :            :                     }
    3092                 :            :                 }
    3093                 :          0 :                 break;
    3094                 :            :             case RTF_PAPERW:
    3095                 :            :             case RTF_PAPERH:
    3096                 :            :             case RTF_MARGL:
    3097                 :            :             case RTF_MARGR:
    3098                 :            :             case RTF_MARGT:
    3099                 :            :             case RTF_MARGB:
    3100                 :            :             case RTF_FACINGP:
    3101                 :            :                 OSL_ENSURE(!this, "why are these tokens found in this section?");
    3102         [ #  # ]:          0 :                 ReadDocControls( nToken );
    3103                 :          0 :                 break;
    3104                 :            :             default:
    3105         [ #  # ]:          0 :                 if (RTF_DOCFMT == (nToken & ~(0xff | RTF_SWGDEFS)))
    3106         [ #  # ]:          0 :                     ReadDocControls( nToken );
    3107 [ #  # ][ #  # ]:          0 :                 else if (RTF_SECTFMT == (nToken & ~(0xff | RTF_SWGDEFS)) ||
    3108                 :            :                          RTF_UNKNOWNCONTROL == nToken)
    3109                 :            :                 {
    3110         [ #  # ]:          0 :                     SvxRTFParser::NextToken(nToken);
    3111                 :            :                 }
    3112                 :            :                 else
    3113                 :          0 :                     bWeiter = false;
    3114                 :          0 :                 break;
    3115                 :            :         }
    3116                 :            : 
    3117         [ #  # ]:          0 :         if (bWeiter)
    3118         [ #  # ]:          0 :             nToken = GetNextToken();
    3119                 :          0 :     } while (bWeiter && IsParserWorking());
    3120                 :            : 
    3121 [ #  # ][ #  # ]:          0 :     if (bNewSection || maSegments.empty())
                 [ #  # ]
    3122                 :            :     {
    3123         [ #  # ]:          0 :         AttrGroupEnd();
    3124 [ #  # ][ #  # ]:          0 :         if(!bContainsPara && !bContainsTablePara) // bContainsTablePara is set in rtftbl.cxx
    3125         [ #  # ]:          0 :             pDoc->AppendTxtNode(*pPam->GetPoint());
    3126                 :          0 :         bContainsPara = false;
    3127                 :          0 :         bContainsTablePara = false;
    3128 [ #  # ][ #  # ]:          0 :         maSegments.push_back(rtfSection(*pPam->GetPoint(), aNewSection));
                 [ #  # ]
    3129                 :            :     }
    3130                 :            :     else //modifying/replacing the current section
    3131                 :            :     {
    3132 [ #  # ][ #  # ]:          0 :         SwPaM aPamStart(maSegments.back().maStart);
    3133         [ #  # ]:          0 :         maSegments.pop_back();
    3134 [ #  # ][ #  # ]:          0 :         maSegments.push_back(rtfSection(*aPamStart.GetPoint(), aNewSection));
         [ #  # ][ #  # ]
    3135                 :            :     }
    3136                 :            : 
    3137 [ #  # ][ #  # ]:          0 :     SkipToken(-1);
    3138                 :            : }
    3139                 :            : 
    3140                 :          0 : void SwRTFParser::EnterEnvironment()
    3141                 :            : {
    3142                 :          0 : }
    3143                 :            : 
    3144                 :            : 
    3145                 :          0 : void SwRTFParser::LeaveEnvironment()
    3146                 :            : {
    3147         [ #  # ]:          0 :     if(pRedlineDelete)
    3148                 :            :     {
    3149         [ #  # ]:          0 :         delete pRedlineDelete;
    3150                 :          0 :         pRedlineDelete = 0;
    3151                 :            :     }
    3152                 :            : 
    3153         [ #  # ]:          0 :     if(pRedlineInsert)
    3154                 :            :     {
    3155         [ #  # ]:          0 :         delete pRedlineInsert;
    3156                 :          0 :         pRedlineInsert = 0;
    3157                 :            :     }
    3158                 :          0 : }
    3159                 :            : 
    3160                 :          0 : void SwRTFParser::SkipPageDescTbl()
    3161                 :            : {
    3162                 :            :     // I have to use this glorified SkipGroup because the
    3163                 :            :     // SvParser SkipGroup uses nNextCh which is not set correctly <groan>
    3164                 :          0 :     int nNumOpenBrakets = 1;
    3165                 :            : 
    3166 [ #  # ][ #  # ]:          0 :     while( nNumOpenBrakets && IsParserWorking() )
                 [ #  # ]
    3167                 :            :     {
    3168      [ #  #  # ]:          0 :         switch( GetNextToken() )
    3169                 :            :         {
    3170                 :            :         case '}':
    3171                 :            :             {
    3172                 :          0 :                 --nNumOpenBrakets;
    3173                 :            :             }
    3174                 :          0 :             break;
    3175                 :            : 
    3176                 :            :         case '{':
    3177                 :            :             {
    3178                 :          0 :                 nNumOpenBrakets++;
    3179                 :            :             }
    3180                 :          0 :             break;
    3181                 :            :         }
    3182                 :            :     }
    3183                 :            : 
    3184                 :          0 :     SkipToken( -1 );
    3185                 :          0 : }
    3186                 :            : 
    3187                 :            : 
    3188                 :            : #define SETPAGEDESC_DEFAULTS() \
    3189                 :            :     do {\
    3190                 :            :         aSz.SetWidth( a4.Width() ); aSz.SetHeight( a4.Height() );\
    3191                 :            :         aLR.SetLeft( 0 );   aLR.SetRight( 0 ); \
    3192                 :            :         aUL.SetLower( 0 );  aUL.SetUpper( 0 ); \
    3193                 :            :         aHLR.SetLeft( 0 );  aHLR.SetRight( 0 ); \
    3194                 :            :         aHUL.SetLower( 0 ); aHUL.SetUpper( 0 ); \
    3195                 :            :         aFLR.SetLeft( 0 );  aFLR.SetRight( 0 ); \
    3196                 :            :         aFUL.SetLower( 0 ); aFUL.SetUpper( 0 ); \
    3197                 :            :         nCols = USHRT_MAX; nColSpace = USHRT_MAX; nAktCol = 0; \
    3198                 :            :         aFSz.SetHeightSizeType( ATT_MIN_SIZE ); aFSz.SetHeight( 0 ); \
    3199                 :            :         aHSz.SetHeightSizeType( ATT_MIN_SIZE ); aHSz.SetHeight( 0 ); \
    3200                 :            :     } while (0)
    3201                 :            : 
    3202                 :          0 : void SwRTFParser::ReadPageDescTbl()
    3203                 :            : {
    3204                 :            :     // dann erzeuge aus der SvxStyle-Tabelle die Swg-Collections, damit
    3205                 :            :     // diese auch in den Headers/Footer benutzt werden koennen!
    3206         [ #  # ]:          0 :     MakeStyleTab();
    3207                 :            :     // das default-Style schon gleich am ersten Node setzen
    3208                 :          0 :     SwTxtFmtColl* pColl = NULL;
    3209         [ #  # ]:          0 :     std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find( 0 );
    3210                 :            : 
    3211 [ #  # ][ #  # ]:          0 :     if( iter == aTxtCollTbl.end() )
    3212         [ #  # ]:          0 :         pColl = pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
    3213                 :            :     else
    3214         [ #  # ]:          0 :         pColl = iter->second;
    3215                 :            : 
    3216         [ #  # ]:          0 :     pDoc->SetTxtFmtColl( *pPam, pColl );
    3217                 :            : 
    3218                 :          0 :     int nToken, bSaveChkStyleAttr = IsChkStyleAttr();
    3219                 :          0 :     int nNumOpenBrakets = 1;        // die erste wurde schon vorher erkannt !!
    3220                 :            : 
    3221                 :          0 :     SetChkStyleAttr(sal_False);     // Attribute nicht gegen die Styles checken
    3222                 :            : 
    3223                 :          0 :     bInPgDscTbl = true;
    3224                 :          0 :     sal_uInt16 nPos = 0;
    3225                 :          0 :     SwPageDesc* pPg = 0;
    3226                 :          0 :     SwFrmFmt* pPgFmt = 0;
    3227                 :            : 
    3228 [ #  # ][ #  # ]:          0 :     SvxULSpaceItem aUL( RES_UL_SPACE ), aHUL( RES_UL_SPACE ), aFUL( RES_UL_SPACE );
                 [ #  # ]
    3229 [ #  # ][ #  # ]:          0 :     SvxLRSpaceItem aLR( RES_LR_SPACE ), aHLR( RES_LR_SPACE ), aFLR( RES_LR_SPACE );
                 [ #  # ]
    3230         [ #  # ]:          0 :     Size a4 = SvxPaperInfo::GetPaperSize(PAPER_A4);
    3231         [ #  # ]:          0 :     SwFmtFrmSize aSz( ATT_FIX_SIZE, a4.Width(), a4.Height() );     // DIN A4 defaulten
    3232 [ #  # ][ #  # ]:          0 :     SwFmtFrmSize aFSz( ATT_MIN_SIZE ), aHSz( ATT_MIN_SIZE );
    3233                 :            : 
    3234         [ #  # ]:          0 :     SvxFrameDirectionItem aFrmDir(FRMDIR_HORI_LEFT_TOP, RES_FRAMEDIR);
    3235                 :            : 
    3236                 :          0 :     sal_uInt16 nCols = USHRT_MAX, nColSpace = USHRT_MAX, nAktCol = 0;
    3237         [ #  # ]:          0 :     std::vector<sal_uInt16> aColumns;
    3238         [ #  # ]:          0 :     ::std::map< const SwPageDesc*, sal_uInt16 > aFollowMap; //store index of following page descriptors
    3239                 :            : 
    3240 [ #  # ][ #  # ]:          0 :     while( nNumOpenBrakets && IsParserWorking() )
                 [ #  # ]
    3241                 :            :     {
    3242 [ #  # ][ #  #  :          0 :         switch( nToken = GetNextToken() )
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
          #  #  #  #  #  
                   #  # ]
    3243                 :            :         {
    3244                 :            :         case '{':
    3245                 :          0 :             ++nNumOpenBrakets;
    3246                 :          0 :             break;
    3247                 :            :         case '}':
    3248         [ #  # ]:          0 :             if (1 == --nNumOpenBrakets)
    3249                 :            :             {
    3250                 :            :                 OSL_ENSURE(pPgFmt && pPg, "Serious problem here");
    3251 [ #  # ][ #  # ]:          0 :                 if (pPgFmt && pPg)
    3252                 :            :                 {
    3253                 :            :                     // PageDesc ist fertig, setze am Doc
    3254         [ #  # ]:          0 :                     pPgFmt->SetFmtAttr(aFrmDir);
    3255         [ #  # ]:          0 :                     pPgFmt->SetFmtAttr(aLR);
    3256         [ #  # ]:          0 :                     pPgFmt->SetFmtAttr(aUL);
    3257         [ #  # ]:          0 :                     pPgFmt->SetFmtAttr(aSz);
    3258         [ #  # ]:          0 :                     ::lcl_SetFmtCol(*pPgFmt, nCols, nColSpace, aColumns);
    3259 [ #  # ][ #  # ]:          0 :                     if (pPgFmt->GetHeader().GetHeaderFmt())
    3260                 :            :                     {
    3261                 :            :                         SwFrmFmt* pHFmt =
    3262         [ #  # ]:          0 :                             (SwFrmFmt*)pPgFmt->GetHeader().GetHeaderFmt();
    3263         [ #  # ]:          0 :                         pHFmt->SetFmtAttr(aHUL);
    3264         [ #  # ]:          0 :                         pHFmt->SetFmtAttr(aHLR);
    3265         [ #  # ]:          0 :                         pHFmt->SetFmtAttr(aHSz);
    3266                 :            :                     }
    3267 [ #  # ][ #  # ]:          0 :                     if (pPgFmt->GetFooter().GetFooterFmt())
    3268                 :            :                     {
    3269                 :            :                         SwFrmFmt* pFFmt =
    3270         [ #  # ]:          0 :                             (SwFrmFmt*)pPgFmt->GetFooter().GetFooterFmt();
    3271         [ #  # ]:          0 :                         pFFmt->SetFmtAttr(aHUL);
    3272         [ #  # ]:          0 :                         pFFmt->SetFmtAttr(aHLR);
    3273         [ #  # ]:          0 :                         pFFmt->SetFmtAttr(aHSz);
    3274                 :            :                     }
    3275         [ #  # ]:          0 :                     if( nPos < pDoc->GetPageDescCnt() )
    3276         [ #  # ]:          0 :                         pDoc->ChgPageDesc(nPos++, *pPg);
    3277                 :            :                 }
    3278                 :            :             }
    3279                 :          0 :             break;
    3280                 :            :         case RTF_PGDSC:
    3281         [ #  # ]:          0 :             if (nPos)   // kein && wg MAC
    3282                 :            :             {
    3283                 :          0 :                 if (nPos != pDoc->MakePageDesc(
    3284 [ #  # ][ #  # ]:          0 :                     String::CreateFromInt32(nTokenValue)))
                 [ #  # ]
    3285                 :            :                 {
    3286                 :            :                     OSL_FAIL( "PageDesc an falscher Position" );
    3287                 :            :                 }
    3288                 :            :             }
    3289         [ #  # ]:          0 :             pPg = &pDoc->GetPageDesc(nPos);
    3290                 :          0 :             pPg->SetLandscape( sal_False );
    3291                 :          0 :             pPgFmt = &pPg->GetMaster();
    3292                 :            : 
    3293                 :          0 :             SETPAGEDESC_DEFAULTS();
    3294                 :          0 :             break;
    3295                 :            : 
    3296                 :            :         case RTF_PGDSCUSE:
    3297                 :          0 :             pPg->WriteUseOn( (UseOnPage)nTokenValue );
    3298                 :          0 :             break;
    3299                 :            : 
    3300                 :            :         case RTF_PGDSCNXT:
    3301                 :            :             // store index of follow in map; will be fixed up later
    3302         [ #  # ]:          0 :             if( nTokenValue )
    3303 [ #  # ][ #  # ]:          0 :                 aFollowMap.insert( ::std::pair<const SwPageDesc*, sal_uInt16>( pPg, nTokenValue ));
    3304                 :            :             else
    3305         [ #  # ]:          0 :                 pPg->SetFollow( &pDoc->GetPageDesc( 0 ) );
    3306                 :          0 :             break;
    3307                 :            : 
    3308                 :            :         case RTF_FORMULA:   /* Zeichen "\|" !!! */
    3309         [ #  # ]:          0 :             pPgFmt->SetFmtAttr( aLR );
    3310         [ #  # ]:          0 :             pPgFmt->SetFmtAttr( aUL );
    3311         [ #  # ]:          0 :             pPgFmt->SetFmtAttr( aSz );
    3312         [ #  # ]:          0 :             ::lcl_SetFmtCol( *pPgFmt, nCols, nColSpace, aColumns );
    3313 [ #  # ][ #  # ]:          0 :             if( pPgFmt->GetHeader().GetHeaderFmt() )
    3314                 :            :             {
    3315         [ #  # ]:          0 :                 SwFrmFmt* pHFmt = (SwFrmFmt*)pPgFmt->GetHeader().GetHeaderFmt();
    3316         [ #  # ]:          0 :                 pHFmt->SetFmtAttr( aHUL );
    3317         [ #  # ]:          0 :                 pHFmt->SetFmtAttr( aHLR );
    3318         [ #  # ]:          0 :                 pHFmt->SetFmtAttr( aHSz );
    3319                 :            :             }
    3320 [ #  # ][ #  # ]:          0 :             if( pPgFmt->GetFooter().GetFooterFmt() )
    3321                 :            :             {
    3322         [ #  # ]:          0 :                 SwFrmFmt* pFFmt = (SwFrmFmt*)pPgFmt->GetFooter().GetFooterFmt();
    3323         [ #  # ]:          0 :                 pFFmt->SetFmtAttr( aHUL );
    3324         [ #  # ]:          0 :                 pFFmt->SetFmtAttr( aHLR );
    3325         [ #  # ]:          0 :                 pFFmt->SetFmtAttr( aHSz );
    3326                 :            :             }
    3327                 :            : 
    3328                 :          0 :             pPgFmt = &pPg->GetLeft();
    3329                 :            : 
    3330                 :          0 :             SETPAGEDESC_DEFAULTS();
    3331                 :          0 :             break;
    3332                 :            : 
    3333                 :            :         case RTF_RTLSECT:
    3334                 :          0 :             aFrmDir.SetValue(FRMDIR_HORI_RIGHT_TOP);
    3335                 :          0 :             break;
    3336                 :            : 
    3337                 :            :         case RTF_LTRSECT:
    3338                 :          0 :             aFrmDir.SetValue(FRMDIR_HORI_LEFT_TOP);
    3339                 :          0 :             break;
    3340                 :            : 
    3341                 :            :         // alt: LI/RI/SA/SB, neu: MARG?SXN
    3342                 :            :         case RTF_MARGLSXN:
    3343                 :          0 :         case RTF_LI:        aLR.SetLeft( (sal_uInt16)nTokenValue );     break;
    3344                 :            :         case RTF_MARGRSXN:
    3345                 :          0 :         case RTF_RI:        aLR.SetRight( (sal_uInt16)nTokenValue );    break;
    3346                 :            :         case RTF_MARGTSXN:
    3347                 :          0 :         case RTF_SA:        aUL.SetUpper( (sal_uInt16)nTokenValue );    break;
    3348                 :            :         case RTF_MARGBSXN:
    3349                 :          0 :         case RTF_SB:        aUL.SetLower( (sal_uInt16)nTokenValue );    break;
    3350                 :          0 :         case RTF_PGWSXN:    aSz.SetWidth( nTokenValue );            break;
    3351                 :          0 :         case RTF_PGHSXN:    aSz.SetHeight( nTokenValue );           break;
    3352                 :            : 
    3353                 :          0 :         case RTF_HEADERY:       aHUL.SetUpper( (sal_uInt16)nTokenValue );   break;
    3354                 :          0 :         case RTF_HEADER_YB:     aHUL.SetLower( (sal_uInt16)nTokenValue );   break;
    3355                 :          0 :         case RTF_HEADER_XL:     aHLR.SetLeft( (sal_uInt16)nTokenValue );    break;
    3356                 :          0 :         case RTF_HEADER_XR:     aHLR.SetRight( (sal_uInt16)nTokenValue );   break;
    3357                 :          0 :         case RTF_FOOTERY:       aFUL.SetLower( (sal_uInt16)nTokenValue );   break;
    3358                 :          0 :         case RTF_FOOTER_YT:     aFUL.SetUpper( (sal_uInt16)nTokenValue );   break;
    3359                 :          0 :         case RTF_FOOTER_XL:     aFLR.SetLeft( (sal_uInt16)nTokenValue );    break;
    3360                 :          0 :         case RTF_FOOTER_XR:     aFLR.SetRight( (sal_uInt16)nTokenValue );   break;
    3361                 :            : 
    3362                 :            :         case RTF_HEADER_YH:
    3363         [ #  # ]:          0 :                 if( 0 > nTokenValue )
    3364                 :            :                 {
    3365                 :          0 :                     aHSz.SetHeightSizeType( ATT_FIX_SIZE );
    3366                 :          0 :                     nTokenValue = -nTokenValue;
    3367                 :            :                 }
    3368                 :          0 :                 aHSz.SetHeight( (sal_uInt16)nTokenValue );
    3369                 :          0 :                 break;
    3370                 :            : 
    3371                 :            :         case RTF_FOOTER_YH:
    3372         [ #  # ]:          0 :                 if( 0 > nTokenValue )
    3373                 :            :                 {
    3374                 :          0 :                     aFSz.SetHeightSizeType( ATT_FIX_SIZE );
    3375                 :          0 :                     nTokenValue = -nTokenValue;
    3376                 :            :                 }
    3377                 :          0 :                 aFSz.SetHeight( (sal_uInt16)nTokenValue );
    3378                 :          0 :                 break;
    3379                 :            : 
    3380                 :            : 
    3381                 :          0 :         case RTF_LNDSCPSXN:     pPg->SetLandscape( sal_True );          break;
    3382                 :            : 
    3383                 :          0 :         case RTF_COLS:          nCols = (sal_uInt16)nTokenValue;        break;
    3384                 :          0 :         case RTF_COLSX:         nColSpace = (sal_uInt16)nTokenValue;    break;
    3385                 :            : 
    3386                 :            :         case RTF_COLNO:
    3387                 :          0 :             nAktCol = (sal_uInt16)nTokenValue;
    3388 [ #  # ][ #  # ]:          0 :             if( RTF_COLW == GetNextToken() )
    3389                 :            :             {
    3390                 :          0 :                 sal_uInt16 nWidth = sal_uInt16( nTokenValue ), nSpace = 0;
    3391 [ #  # ][ #  # ]:          0 :                 if( RTF_COLSR == GetNextToken() )
    3392                 :          0 :                     nSpace = sal_uInt16( nTokenValue );
    3393                 :            :                 else
    3394         [ #  # ]:          0 :                     SkipToken( -1 );        // wieder zurueck
    3395                 :            : 
    3396         [ #  # ]:          0 :                 if( --nAktCol == ( aColumns.size() / 2 ) )
    3397                 :            :                 {
    3398         [ #  # ]:          0 :                     aColumns.push_back( nWidth );
    3399         [ #  # ]:          0 :                     aColumns.push_back( nSpace );
    3400                 :            :                 }
    3401                 :            :             }
    3402                 :          0 :             break;
    3403                 :            : 
    3404                 :            :         case RTF_PAGEBB:
    3405                 :            :             {
    3406 [ #  # ][ #  # ]:          0 :                 pPgFmt->SetFmtAttr( SvxFmtBreakItem( SVX_BREAK_PAGE_BEFORE, RES_BREAK ) );
                 [ #  # ]
    3407                 :            :             }
    3408                 :          0 :             break;
    3409                 :            : 
    3410                 :            :         case RTF_HEADER:
    3411                 :            :         case RTF_HEADERL:
    3412                 :            :         case RTF_HEADERR:
    3413                 :            :         case RTF_FOOTER:
    3414                 :            :         case RTF_FOOTERL:
    3415                 :            :         case RTF_FOOTERR:
    3416                 :            :         case RTF_FOOTERF:
    3417                 :            :         case RTF_HEADERF:
    3418         [ #  # ]:          0 :             ReadHeaderFooter(nToken, pPg);
    3419                 :          0 :             --nNumOpenBrakets;      // Klammer wird im ReadAttr ueberlesen!
    3420                 :          0 :             break;
    3421                 :            :         case RTF_TEXTTOKEN:
    3422 [ #  # ][ #  # ]:          0 :             if (!DelCharAtEnd(aToken, ';' ).Len())
    3423                 :          0 :                 break;
    3424                 :            :             OSL_ENSURE(pPg, "Unexpected missing pPg");
    3425         [ #  # ]:          0 :             if (pPg)
    3426                 :            :             {
    3427         [ #  # ]:          0 :                 pPg->SetName(aToken);
    3428                 :            : 
    3429                 :            :                 // sollte es eine Vorlage aus dem Pool sein ??
    3430                 :            :                 sal_uInt16 n = SwStyleNameMapper::GetPoolIdFromUIName(aToken,
    3431         [ #  # ]:          0 :                     nsSwGetPoolIdFromName::GET_POOLID_PAGEDESC);
    3432         [ #  # ]:          0 :                 if (USHRT_MAX != n)
    3433                 :            :                 {
    3434                 :            :                     // dann setze bei der Neuen die entsp. PoolId
    3435                 :          0 :                     pPg->SetPoolFmtId(n);
    3436                 :            :                 }
    3437                 :            :             }
    3438                 :          0 :             break;
    3439                 :            :         case RTF_BRDBOX:
    3440         [ #  # ]:          0 :             if (3 == nNumOpenBrakets)
    3441                 :            :             {
    3442                 :            :                 ReadBorderAttr(SkipToken(-2),
    3443 [ #  # ][ #  # ]:          0 :                     (SfxItemSet&)pPgFmt->GetAttrSet());
    3444                 :          0 :                 --nNumOpenBrakets;      // Klammer wird im ReadAttr ueberlesen!
    3445                 :            :             }
    3446                 :          0 :             break;
    3447                 :            :         case RTF_SHADOW:
    3448         [ #  # ]:          0 :             if( 3 == nNumOpenBrakets )
    3449                 :            :             {
    3450 [ #  # ][ #  # ]:          0 :                 ReadAttr( SkipToken( -2 ), (SfxItemSet*)&pPgFmt->GetAttrSet() );
    3451                 :          0 :                 --nNumOpenBrakets;      // Klammer wird im ReadAttr ueberlesen!
    3452                 :            :             }
    3453                 :          0 :             break;
    3454                 :            : 
    3455                 :            : 
    3456                 :            :         default:
    3457         [ #  # ]:          0 :             if( (nToken & ~0xff ) == RTF_SHADINGDEF )
    3458         [ #  # ]:          0 :                 ReadBackgroundAttr( nToken, (SfxItemSet&)pPgFmt->GetAttrSet() );
    3459                 :          0 :             break;
    3460                 :            :         }
    3461                 :            :     }
    3462                 :            : 
    3463                 :            : 
    3464                 :            :     // setze jetzt noch bei allen die entsprechenden Follows !!
    3465                 :            :     // Die, die ueber die Tabelle eingelesen wurden und einen
    3466                 :            :     // Follow definiert haben, ist dieser als Tabposition im
    3467                 :            :     // Follow schon gesetzt.
    3468         [ #  # ]:          0 :     for( nPos = 0; nPos < pDoc->GetPageDescCnt(); ++nPos )
    3469                 :            :     {
    3470         [ #  # ]:          0 :         SwPageDesc* pPgDsc = &pDoc->GetPageDesc( nPos );
    3471                 :            :         std::map< const SwPageDesc*, sal_uInt16 >::const_iterator aIter =
    3472 [ #  # ][ #  # ]:          0 :             aFollowMap.find( pPgDsc );
    3473 [ #  # ][ #  # ]:          0 :         if (aIter != aFollowMap.end())
                 [ #  # ]
    3474                 :            :         {
    3475 [ #  # ][ #  # ]:          0 :             if ((*aIter).second < pDoc->GetPageDescCnt())
    3476 [ #  # ][ #  # ]:          0 :                 pPgDsc->SetFollow(& pDoc->GetPageDesc((*aIter).second));
    3477                 :            :         }
    3478                 :            :     }
    3479                 :            : 
    3480                 :          0 :     SetChkStyleAttr( bSaveChkStyleAttr );
    3481                 :            : 
    3482                 :          0 :     bInPgDscTbl = false;
    3483                 :          0 :     nAktPageDesc = 0;
    3484                 :          0 :     nAktFirstPageDesc = 0;
    3485                 :          0 :     bSwPageDesc = true;
    3486 [ #  # ][ #  # ]:          0 :     SkipToken( -1 );
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    3487                 :          0 : }
    3488                 :            : 
    3489                 :          0 : void SwRTFParser::ReadPrtData()
    3490                 :            : {
    3491         [ #  # ]:          0 :     while( IsParserWorking() )
    3492                 :            :     {
    3493                 :          0 :         int nToken = GetNextToken();
    3494 [ #  # ][ #  # ]:          0 :         if( (RTF_TEXTTOKEN != nToken) && ('}' == nToken) )
    3495                 :          0 :             break;
    3496                 :            :     }
    3497                 :            : 
    3498                 :          0 :     SkipToken( -1 );        // schliessende Klammer wieder zurueck!!
    3499                 :          0 : }
    3500                 :            : 
    3501                 :          0 : static const SwNodeIndex* SetHeader(SwFrmFmt* pHdFtFmt, sal_Bool bReuseOld)
    3502                 :            : {
    3503                 :            :     OSL_ENSURE(pHdFtFmt, "Impossible, no header");
    3504                 :            :     const SwFrmFmt* pExisting = bReuseOld ?
    3505         [ #  # ]:          0 :         pHdFtFmt->GetHeader().GetHeaderFmt() : 0;
    3506         [ #  # ]:          0 :     if (!pExisting)
    3507                 :            :     {
    3508                 :            :         //No existing header, create a new one
    3509         [ #  # ]:          0 :         pHdFtFmt->SetFmtAttr(SwFmtHeader(sal_True));
    3510                 :          0 :         pExisting = pHdFtFmt->GetHeader().GetHeaderFmt();
    3511                 :            :     }
    3512                 :          0 :     return pExisting->GetCntnt().GetCntntIdx();
    3513                 :            : }
    3514                 :            : 
    3515                 :          0 : static const SwNodeIndex* SetFooter(SwFrmFmt* pHdFtFmt, sal_Bool bReuseOld)
    3516                 :            : {
    3517                 :            :     OSL_ENSURE(pHdFtFmt, "Impossible, no footer");
    3518                 :            :     const SwFrmFmt* pExisting = bReuseOld ?
    3519         [ #  # ]:          0 :         pHdFtFmt->GetFooter().GetFooterFmt() : 0;
    3520         [ #  # ]:          0 :     if (!pExisting)
    3521                 :            :     {
    3522                 :            :         //No exist footer, create a new one
    3523         [ #  # ]:          0 :         pHdFtFmt->SetFmtAttr(SwFmtFooter(sal_True));
    3524                 :          0 :         pExisting = pHdFtFmt->GetFooter().GetFooterFmt();
    3525                 :            :     }
    3526                 :          0 :     return pExisting->GetCntnt().GetCntntIdx();
    3527                 :            : }
    3528                 :            : 
    3529                 :            : 
    3530                 :          0 : void SwRTFParser::ReadHeaderFooter( int nToken, SwPageDesc* pPageDesc )
    3531                 :            : {
    3532                 :            :     OSL_ENSURE( RTF_FOOTNOTE == nToken ||
    3533                 :            :             RTF_FLY_INPARA == nToken ||
    3534                 :            :             pPageDesc, "PageDesc is missing" );
    3535                 :            : 
    3536                 :          0 :     bool bContainsParaCache = bContainsPara;
    3537                 :            :     // backup all important data
    3538         [ #  # ]:          0 :     SwPosition aSavePos( *pPam->GetPoint() );
    3539         [ #  # ]:          0 :     SvxRTFItemStack aSaveStack(GetAttrStack());
    3540                 :          0 :     GetAttrStack().clear();
    3541                 :            : 
    3542                 :            :     // save the fly array - after read, all flys may be set into
    3543                 :            :     // the header/footer
    3544         [ #  # ]:          0 :     SwFlySaveArr aSaveArray(aFlyArr);
    3545         [ #  # ]:          0 :     aSaveArray.reserve(255);
    3546                 :          0 :     aFlyArr.clear();
    3547                 :          0 :     sal_Bool bSetFlyInDoc = sal_True;
    3548                 :            : 
    3549                 :          0 :     const SwNodeIndex* pSttIdx = 0;
    3550                 :          0 :     SwFrmFmt* pHdFtFmt = 0;
    3551                 :          0 :     SwTxtAttr* pTxtAttr = 0;
    3552                 :          0 :     int bDelFirstChar = sal_False;
    3553                 :          0 :     bool bOldIsFootnote = mbIsFootnote;
    3554                 :          0 :     sal_Bool bOldGrpStt = sal::static_int_cast< sal_Bool, int >(IsNewGroup());
    3555                 :            : 
    3556                 :          0 :     int nNumOpenBrakets = GetOpenBrakets() - 1;
    3557                 :            : 
    3558   [ #  #  #  #  :          0 :     switch( nToken )
             #  #  #  #  
                      # ]
    3559                 :            :     {
    3560                 :            :     case RTF_FOOTNOTE:
    3561                 :            :         {
    3562         [ #  # ]:          0 :             bool bIsEndNote = RTF_FTNALT == GetNextToken();
    3563         [ #  # ]:          0 :             if (!bIsEndNote)
    3564         [ #  # ]:          0 :                 SkipToken(-1);
    3565                 :            : 
    3566                 :          0 :             SwTxtNode* pTxtNd = pPam->GetNode()->GetTxtNode();
    3567         [ #  # ]:          0 :             SwFmtFtn aFtnNote(bIsEndNote);
    3568                 :          0 :             xub_StrLen nPos = pPam->GetPoint()->nContent.GetIndex();
    3569                 :            : 
    3570 [ #  # ][ #  # ]:          0 :             if (nPos && !bFootnoteAutoNum)
    3571                 :            :             {
    3572         [ #  # ]:          0 :                 pPam->GetPoint()->nContent--;
    3573                 :          0 :                 nPos--;
    3574 [ #  # ][ #  # ]:          0 :                 aFtnNote.SetNumStr(rtl::OUString(pTxtNd->GetTxt().GetChar(nPos)));
                 [ #  # ]
    3575         [ #  # ]:          0 :                 ((String&)pTxtNd->GetTxt()).SetChar( nPos, CH_TXTATR_BREAKWORD );
    3576                 :          0 :                 bDelFirstChar = sal_True;
    3577                 :            :             }
    3578                 :            : 
    3579                 :            :             pTxtAttr = pTxtNd->InsertItem( aFtnNote, nPos, nPos,
    3580 [ #  # ][ #  # ]:          0 :                         bDelFirstChar ? nsSetAttrMode::SETATTR_NOTXTATRCHR : 0 );
    3581                 :            : 
    3582                 :            :             OSL_ENSURE( pTxtAttr, "konnte die Fussnote nicht einfuegen/finden" );
    3583                 :            : 
    3584         [ #  # ]:          0 :             if( pTxtAttr )
    3585                 :          0 :                 pSttIdx = ((SwTxtFtn*)pTxtAttr)->GetStartNode();
    3586                 :          0 :             mbIsFootnote = true;
    3587                 :            : 
    3588                 :            :             // wurde an der Position ein Escapement aufgespannt, so entferne
    3589                 :            :             // das jetzt. Fussnoten sind bei uns immer hochgestellt.
    3590 [ #  # ][ #  # ]:          0 :             SvxRTFItemStackType* pTmp = aSaveStack.empty() ? 0 : aSaveStack.back();
    3591 [ #  # ][ #  #  :          0 :             if( pTmp && pTmp->GetSttNodeIdx() ==
             #  #  #  # ]
                 [ #  # ]
    3592                 :          0 :                 pPam->GetPoint()->nNode.GetIndex() &&
    3593                 :          0 :                 pTmp->GetSttCnt() == nPos )
    3594 [ #  # ][ #  # ]:          0 :                 pTmp->GetAttrSet().ClearItem( RES_CHRATR_ESCAPEMENT );
    3595                 :            :         }
    3596                 :          0 :         break;
    3597                 :            : 
    3598                 :            :     case RTF_FLY_INPARA:
    3599                 :            :         {
    3600                 :          0 :             xub_StrLen nPos = pPam->GetPoint()->nContent.GetIndex();
    3601                 :          0 :             SfxItemSet aSet( pDoc->GetAttrPool(), RES_FRMATR_BEGIN,
    3602         [ #  # ]:          0 :                                             RES_FRMATR_END-1 );
    3603 [ #  # ][ #  # ]:          0 :             aSet.Put( SwFmtAnchor( FLY_AS_CHAR ));
                 [ #  # ]
    3604                 :            :             pHdFtFmt = pDoc->MakeFlySection( FLY_AS_CHAR,
    3605         [ #  # ]:          0 :                             pPam->GetPoint(), &aSet );
    3606                 :            : 
    3607                 :            :             pTxtAttr = pPam->GetNode()->GetTxtNode()->GetTxtAttrForCharAt(
    3608         [ #  # ]:          0 :                                                 nPos, RES_TXTATR_FLYCNT );
    3609                 :            :             OSL_ENSURE( pTxtAttr, "konnte den Fly nicht einfuegen/finden" );
    3610                 :            : 
    3611         [ #  # ]:          0 :             pSttIdx = pHdFtFmt->GetCntnt().GetCntntIdx();
    3612         [ #  # ]:          0 :             bSetFlyInDoc = sal_False;
    3613                 :            :         }
    3614                 :          0 :         break;
    3615                 :            : 
    3616                 :            :     case RTF_HEADERF:
    3617                 :            :     case RTF_HEADER:
    3618                 :          0 :         pPageDesc->WriteUseOn( (UseOnPage)(pPageDesc->ReadUseOn() | nsUseOnPage::PD_HEADERSHARE) );
    3619                 :          0 :         pHdFtFmt = &pPageDesc->GetMaster();
    3620         [ #  # ]:          0 :         pSttIdx = SetHeader( pHdFtFmt, sal_False );
    3621                 :          0 :         break;
    3622                 :            : 
    3623                 :            :     case RTF_HEADERL:
    3624                 :            :         // we cannot have left or right, must have always both
    3625                 :          0 :         pPageDesc->WriteUseOn( (UseOnPage)((pPageDesc->ReadUseOn() & ~nsUseOnPage::PD_HEADERSHARE) | nsUseOnPage::PD_ALL));
    3626         [ #  # ]:          0 :         SetHeader( pPageDesc->GetRightFmt(), sal_True );
    3627                 :          0 :         pHdFtFmt = pPageDesc->GetLeftFmt();
    3628         [ #  # ]:          0 :         pSttIdx = SetHeader(pHdFtFmt, sal_False );
    3629                 :          0 :         break;
    3630                 :            : 
    3631                 :            :     case RTF_HEADERR:
    3632                 :            :         // we cannot have left or right, must have always both
    3633                 :          0 :         pPageDesc->WriteUseOn( (UseOnPage)((pPageDesc->ReadUseOn() & ~nsUseOnPage::PD_HEADERSHARE) | nsUseOnPage::PD_ALL));
    3634         [ #  # ]:          0 :         SetHeader( pPageDesc->GetLeftFmt(), sal_True );
    3635                 :          0 :         pHdFtFmt = pPageDesc->GetRightFmt();
    3636         [ #  # ]:          0 :         pSttIdx = SetHeader(pHdFtFmt, sal_False );
    3637                 :          0 :         break;
    3638                 :            : 
    3639                 :            :     case RTF_FOOTERF:
    3640                 :            :     case RTF_FOOTER:
    3641                 :          0 :         pPageDesc->WriteUseOn( (UseOnPage)(pPageDesc->ReadUseOn() | nsUseOnPage::PD_FOOTERSHARE) );
    3642                 :          0 :         pHdFtFmt = &pPageDesc->GetMaster();
    3643         [ #  # ]:          0 :         pSttIdx = SetFooter(pHdFtFmt, sal_False );
    3644                 :          0 :         break;
    3645                 :            : 
    3646                 :            :     case RTF_FOOTERL:
    3647                 :            :         // we cannot have left or right, must have always both
    3648                 :          0 :         pPageDesc->WriteUseOn( (UseOnPage)((pPageDesc->ReadUseOn() & ~nsUseOnPage::PD_FOOTERSHARE) | nsUseOnPage::PD_ALL));
    3649         [ #  # ]:          0 :         SetFooter( pPageDesc->GetRightFmt(), sal_True );
    3650                 :          0 :         pHdFtFmt = pPageDesc->GetLeftFmt();
    3651         [ #  # ]:          0 :         pSttIdx = SetFooter(pHdFtFmt, sal_False );
    3652                 :          0 :         break;
    3653                 :            : 
    3654                 :            :     case RTF_FOOTERR:
    3655                 :            :         // we cannot have left or right, must have always both
    3656                 :          0 :         pPageDesc->WriteUseOn( (UseOnPage)((pPageDesc->ReadUseOn() & ~nsUseOnPage::PD_FOOTERSHARE) | nsUseOnPage::PD_ALL));
    3657         [ #  # ]:          0 :         SetFooter( pPageDesc->GetLeftFmt(), sal_True );
    3658                 :          0 :         pHdFtFmt = pPageDesc->GetRightFmt();
    3659         [ #  # ]:          0 :         pSttIdx = SetFooter(pHdFtFmt, sal_False );
    3660                 :          0 :         break;
    3661                 :            :     }
    3662                 :            : 
    3663                 :          0 :     sal_uInt16 nOldFlyArrCnt = aFlyArr.size();
    3664         [ #  # ]:          0 :     if( !pSttIdx )
    3665         [ #  # ]:          0 :         SkipGroup();
    3666                 :            :     else
    3667                 :            :     {
    3668                 :            :         // es ist auf jedenfall jetzt ein TextNode im Kopf/Fusszeilen-Bereich
    3669                 :            :         // vorhanden. Dieser muss jetzt nur noch gefunden und der neue Cursor
    3670                 :            :         // dort hinein gesetzt werden.
    3671         [ #  # ]:          0 :         SwCntntNode *pNode = pDoc->GetNodes()[ pSttIdx->GetIndex()+1 ]->
    3672         [ #  # ]:          0 :                                 GetCntntNode();
    3673                 :            : 
    3674                 :            :         // immer ans Ende der Section einfuegen !!
    3675         [ #  # ]:          0 :         pPam->GetPoint()->nNode = *pNode->EndOfSectionNode();
    3676         [ #  # ]:          0 :         pPam->Move( fnMoveBackward );
    3677                 :            : 
    3678                 :          0 :         SwTxtFmtColl* pColl = NULL;
    3679         [ #  # ]:          0 :         std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find( 0 );
    3680                 :            : 
    3681 [ #  # ][ #  # ]:          0 :         if( iter == aTxtCollTbl.end() )
    3682         [ #  # ]:          0 :             pColl = pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
    3683                 :            :         else
    3684         [ #  # ]:          0 :             pColl = iter->second;
    3685                 :            : 
    3686         [ #  # ]:          0 :         pDoc->SetTxtFmtColl( *pPam, pColl );
    3687                 :            : 
    3688                 :          0 :         SetNewGroup( sal_True );
    3689                 :            : 
    3690 [ #  # ][ #  # ]:          0 :         while( !( nNumOpenBrakets == GetOpenBrakets() && !GetStackPos()) && IsParserWorking() )
         [ #  # ][ #  # ]
    3691                 :            :         {
    3692         [ #  # ]:          0 :             switch( nToken = GetNextToken() )
              [ #  #  # ]
    3693                 :            :             {
    3694                 :            :             case RTF_U:
    3695         [ #  # ]:          0 :                 if( bDelFirstChar )
    3696                 :            :                 {
    3697                 :          0 :                     bDelFirstChar = sal_False;
    3698                 :          0 :                     nToken = 0;
    3699                 :            :                 }
    3700                 :          0 :                 break;
    3701                 :            : 
    3702                 :            :             case RTF_TEXTTOKEN:
    3703         [ #  # ]:          0 :                 if( bDelFirstChar )
    3704                 :            :                 {
    3705 [ #  # ][ #  # ]:          0 :                     if( !aToken.Erase( 0, 1 ).Len() )
    3706                 :          0 :                         nToken = 0;
    3707                 :          0 :                     bDelFirstChar = sal_False;
    3708                 :            :                 }
    3709                 :          0 :                 break;
    3710                 :            :             }
    3711         [ #  # ]:          0 :             if( nToken )
    3712         [ #  # ]:          0 :                 NextToken( nToken );
    3713                 :            :         }
    3714                 :            : 
    3715         [ #  # ]:          0 :         SetAllAttrOfStk();
    3716 [ #  # ][ #  # ]:          0 :         if( !aFlyArr.empty() && bSetFlyInDoc )
                 [ #  # ]
    3717         [ #  # ]:          0 :             SetFlysInDoc();
    3718                 :            : 
    3719                 :            :         // sollte der letze Node leer sein, dann loesche ihn
    3720                 :            :         // (\par heisst ja Absatzende und nicht neuer Absatz!)
    3721         [ #  # ]:          0 :         DelLastNode();
    3722                 :            :     }
    3723                 :            : 
    3724                 :            :     // vom FlyFmt noch die richtigen Attribute setzen
    3725 [ #  # ][ #  # ]:          0 :     if( pTxtAttr && RES_TXTATR_FLYCNT == pTxtAttr->Which() )
         [ #  # ][ #  # ]
    3726                 :            :     {
    3727                 :            :         // is add a new fly ?
    3728         [ #  # ]:          0 :         if( nOldFlyArrCnt < aFlyArr.size() )
    3729                 :            :         {
    3730         [ #  # ]:          0 :             SwFlySave* pFlySave = aFlyArr.back();
    3731         [ #  # ]:          0 :             pFlySave->aFlySet.ClearItem( RES_ANCHOR );
    3732         [ #  # ]:          0 :             pHdFtFmt->SetFmtAttr( pFlySave->aFlySet );
    3733 [ #  # ][ #  # ]:          0 :             delete aFlyArr.back();
                 [ #  # ]
    3734         [ #  # ]:          0 :             aFlyArr.pop_back();
    3735                 :            :         }
    3736                 :            :         else
    3737                 :            :         {
    3738                 :            :             // no, so remove the created textattribute
    3739                 :          0 :             SwFrmFmt* pFlyFmt = pTxtAttr->GetFlyCnt().GetFrmFmt();
    3740                 :            :             // remove the pam from the flynode
    3741         [ #  # ]:          0 :             *pPam->GetPoint() = aSavePos;
    3742         [ #  # ]:          0 :             pDoc->DelLayoutFmt( pFlyFmt );
    3743                 :            :         }
    3744                 :            :     }
    3745                 :            : 
    3746                 :          0 :     bFootnoteAutoNum = sal_False;       // default auf aus!
    3747                 :            : 
    3748                 :            :     // und alles wieder zurueck
    3749         [ #  # ]:          0 :     *pPam->GetPoint() = aSavePos;
    3750         [ #  # ]:          0 :     if (mbIsFootnote)
    3751                 :          0 :         SetNewGroup( bOldGrpStt );      // Status wieder zurueck
    3752                 :            :     else
    3753                 :          0 :         SetNewGroup( sal_False );           // { - Klammer war kein Group-Start!
    3754                 :          0 :     mbIsFootnote = bOldIsFootnote;
    3755         [ #  # ]:          0 :     GetAttrStack() = aSaveStack;
    3756                 :            : 
    3757         [ #  # ]:          0 :     std::copy(aSaveArray.begin(), aSaveArray.end(), aFlyArr.begin() );
    3758                 :          0 :     aSaveArray.clear();
    3759 [ #  # ][ #  # ]:          0 :     bContainsPara = bContainsParaCache;
    3760                 :          0 : }
    3761                 :            : 
    3762                 :          0 : void SwRTFParser::SetSwgValues( SfxItemSet& rSet )
    3763                 :            : {
    3764                 :            :     const SfxPoolItem* pItem;
    3765                 :            :     // Escapement korrigieren
    3766 [ #  # ][ #  # ]:          0 :     if( SFX_ITEM_SET == rSet.GetItemState( RES_CHRATR_ESCAPEMENT, sal_False, &pItem ))
    3767                 :            :     {
    3768                 :            :         /* prozentuale Veraenderung errechnen !
    3769                 :            :             * Formel :      (FontSize * 1/20 ) pts      Escapement * 2
    3770                 :            :             *               -----------------------  = ----------------
    3771                 :            :             *                     100%                          x
    3772                 :            :             */
    3773                 :            : 
    3774                 :            :         // die richtige
    3775                 :          0 :         long nEsc = ((SvxEscapementItem*)pItem)->GetEsc();
    3776                 :            : 
    3777                 :            :         // automatische Ausrichtung wurde schon richtig berechnet
    3778 [ #  # ][ #  # ]:          0 :         if( DFLT_ESC_AUTO_SUPER != nEsc && DFLT_ESC_AUTO_SUB != nEsc )
    3779                 :            :         {
    3780         [ #  # ]:          0 :             const SvxFontHeightItem& rFH = GetSize( rSet );
    3781                 :          0 :             nEsc *= 1000L;
    3782         [ #  # ]:          0 :             if(rFH.GetHeight()) nEsc /= long(rFH.GetHeight()); // #i77256#
    3783                 :            : 
    3784                 :            :             SvxEscapementItem aEsc( (short) nEsc,
    3785         [ #  # ]:          0 :                                 ((SvxEscapementItem*)pItem)->GetProp(), RES_CHRATR_ESCAPEMENT);
    3786 [ #  # ][ #  # ]:          0 :             rSet.Put( aEsc );
    3787                 :            :         }
    3788                 :            :     }
    3789                 :            : 
    3790                 :            :     // TabStops anpassen
    3791 [ #  # ][ #  # ]:          0 :     if( SFX_ITEM_SET == rSet.GetItemState( RES_PARATR_TABSTOP, sal_False, &pItem ))
    3792                 :            :     {
    3793         [ #  # ]:          0 :         const SvxLRSpaceItem& rLR = GetLRSpace( rSet );
    3794         [ #  # ]:          0 :         SvxTabStopItem aTStop( *(SvxTabStopItem*)pItem );
    3795                 :            : 
    3796                 :          0 :         long nOffset = rLR.GetTxtLeft();
    3797         [ #  # ]:          0 :         if( nOffset )
    3798                 :            :         {
    3799                 :            :             // Tabs anpassen !!
    3800         [ #  # ]:          0 :             for( sal_uInt16 n = 0; n < aTStop.Count(); ++n)
    3801 [ #  # ][ #  # ]:          0 :                 if( SVX_TAB_ADJUST_DEFAULT != aTStop[n].GetAdjustment() )
    3802                 :            :                 {
    3803         [ #  # ]:          0 :                     const_cast<SvxTabStop&>(aTStop[n]).GetTabPos() -= nOffset;
    3804                 :            :                 }
    3805                 :            : 
    3806                 :            :             // negativer Einzug, dann auf 0 Pos einen Tab setzen
    3807         [ #  # ]:          0 :             if( rLR.GetTxtFirstLineOfst() < 0 )
    3808 [ #  # ][ #  # ]:          0 :                 aTStop.Insert( SvxTabStop() );
    3809                 :            :         }
    3810                 :            : 
    3811         [ #  # ]:          0 :         if( !aTStop.Count() )
    3812                 :            :         {
    3813                 :            :             const SvxTabStopItem& rDflt = (const SvxTabStopItem&)rSet.
    3814         [ #  # ]:          0 :                                 GetPool()->GetDefaultItem(RES_PARATR_TABSTOP);
    3815         [ #  # ]:          0 :             if( rDflt.Count() )
    3816         [ #  # ]:          0 :                 aTStop.Insert( &rDflt, 0 );
    3817                 :            :         }
    3818 [ #  # ][ #  # ]:          0 :         rSet.Put( aTStop );
    3819                 :            :     }
    3820         [ #  # ]:          0 :     else if( SFX_ITEM_SET == rSet.GetItemState( RES_LR_SPACE, sal_False, &pItem )
           [ #  #  #  # ]
                 [ #  # ]
    3821                 :          0 :             && ((SvxLRSpaceItem*)pItem)->GetTxtFirstLineOfst() < 0 )
    3822                 :            :     {
    3823                 :            :         // negativer Einzug, dann auf 0 Pos einen Tab setzen
    3824 [ #  # ][ #  # ]:          0 :         rSet.Put( SvxTabStopItem( 1, 0, SVX_TAB_ADJUST_DEFAULT, RES_PARATR_TABSTOP ));
                 [ #  # ]
    3825                 :            :     }
    3826                 :            : 
    3827                 :            :     // NumRules anpassen
    3828 [ #  # ][ #  # ]:          0 :     if( !bStyleTabValid &&
                 [ #  # ]
    3829         [ #  # ]:          0 :         SFX_ITEM_SET == rSet.GetItemState( RES_PARATR_NUMRULE, sal_False, &pItem ))
    3830                 :            :     {
    3831                 :            :         // dann steht im Namen nur ein Verweis in das ListArray
    3832                 :            :         SwNumRule* pRule = GetNumRuleOfListNo( ((SwNumRuleItem*)pItem)->
    3833 [ #  # ][ #  # ]:          0 :                                                 GetValue().ToInt32() );
    3834         [ #  # ]:          0 :         if( pRule )
    3835 [ #  # ][ #  # ]:          0 :             rSet.Put( SwNumRuleItem( pRule->GetName() ));
                 [ #  # ]
    3836                 :            :         else
    3837         [ #  # ]:          0 :             rSet.ClearItem( RES_PARATR_NUMRULE );
    3838                 :            : 
    3839                 :            :     }
    3840                 :            : 
    3841                 :          0 : }
    3842                 :            : 
    3843                 :            : 
    3844                 :          0 : SwTxtFmtColl* SwRTFParser::MakeColl(const String& rName, sal_uInt16 nPos,
    3845                 :            :     sal_uInt8 nOutlineLevel, bool& rbCollExist)
    3846                 :            : {
    3847         [ #  # ]:          0 :     if( sal_uInt8(-1) == nOutlineLevel )
    3848                 :          0 :         nOutlineLevel = MAXLEVEL;
    3849                 :            : 
    3850                 :          0 :     rbCollExist = false;
    3851                 :            :     SwTxtFmtColl* pColl;
    3852         [ #  # ]:          0 :     String aNm( rName );
    3853         [ #  # ]:          0 :     if( !aNm.Len() )
    3854                 :            :     {
    3855                 :            :         OSL_ENSURE(!this, "not a bug, but I (cmc) want to see an example of this");
    3856         [ #  # ]:          0 :         if( !nPos )
    3857                 :            :         {
    3858         [ #  # ]:          0 :             pColl = pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
    3859         [ #  # ]:          0 :             if(nOutlineLevel < MAXLEVEL )
    3860         [ #  # ]:          0 :                 pColl->AssignToListLevelOfOutlineStyle( nOutlineLevel );
    3861                 :            :             else
    3862         [ #  # ]:          0 :                 pColl->DeleteAssignmentToListLevelOfOutlineStyle();
    3863                 :          0 :             return pColl;
    3864                 :            :         }
    3865                 :            : 
    3866                 :            :         // erzeuge einen Namen
    3867         [ #  # ]:          0 :         aNm.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "NoName(" ));
    3868 [ #  # ][ #  # ]:          0 :         aNm += String::CreateFromInt32( nPos );
                 [ #  # ]
    3869         [ #  # ]:          0 :         aNm += ')';
    3870                 :            :     }
    3871                 :          0 :     ww::sti eSti = ww::GetCanonicalStiFromEnglishName(rName);
    3872                 :            :     sw::util::ParaStyleMapper::StyleResult aResult =
    3873         [ #  # ]:          0 :         maParaStyleMapper.GetStyle(rName, eSti);
    3874                 :          0 :     pColl = aResult.first;
    3875                 :          0 :     rbCollExist = aResult.second;
    3876 [ #  # ][ #  # ]:          0 :     if (IsNewDoc() && rbCollExist)
                 [ #  # ]
    3877                 :            :     {
    3878         [ #  # ]:          0 :         pColl->ResetAllFmtAttr(); // #i73790# - method renamed
    3879                 :          0 :         rbCollExist = false;
    3880                 :            :     }
    3881                 :            : 
    3882         [ #  # ]:          0 :     if (!rbCollExist)
    3883                 :            :     {
    3884         [ #  # ]:          0 :         if(nOutlineLevel < MAXLEVEL)
    3885         [ #  # ]:          0 :             pColl->AssignToListLevelOfOutlineStyle( nOutlineLevel );
    3886                 :            :         else
    3887         [ #  # ]:          0 :             pColl->DeleteAssignmentToListLevelOfOutlineStyle();
    3888                 :            :     }
    3889                 :            : 
    3890         [ #  # ]:          0 :     return pColl;
    3891                 :            : }
    3892                 :            : 
    3893                 :          0 : SwCharFmt* SwRTFParser::MakeCharFmt(const String& rName, sal_uInt16 nPos,
    3894                 :            :                                     int& rbCollExist)
    3895                 :            : {
    3896                 :          0 :     rbCollExist = sal_False;
    3897                 :            :     SwCharFmt* pFmt;
    3898         [ #  # ]:          0 :     String aNm( rName );
    3899         [ #  # ]:          0 :     if( !aNm.Len() )
    3900                 :            :     {
    3901                 :            :         OSL_ENSURE(!this, "not a bug, but I (cmc) want to see an example of this");
    3902         [ #  # ]:          0 :         aNm.AssignAscii( RTL_CONSTASCII_STRINGPARAM( "NoName(" ));
    3903 [ #  # ][ #  # ]:          0 :         aNm += String::CreateFromInt32( nPos );
                 [ #  # ]
    3904         [ #  # ]:          0 :         aNm += ')';
    3905                 :            :     }
    3906                 :            : 
    3907                 :          0 :     ww::sti eSti = ww::GetCanonicalStiFromEnglishName(rName);
    3908                 :            :     sw::util::CharStyleMapper::StyleResult aResult =
    3909         [ #  # ]:          0 :         maCharStyleMapper.GetStyle(rName, eSti);
    3910                 :          0 :     pFmt = aResult.first;
    3911                 :          0 :     rbCollExist = aResult.second;
    3912 [ #  # ][ #  # ]:          0 :     if (IsNewDoc() && rbCollExist)
                 [ #  # ]
    3913                 :            :     {
    3914         [ #  # ]:          0 :         pFmt->ResetAllFmtAttr(); // #i73790# - method renamed
    3915                 :          0 :         rbCollExist = false;
    3916                 :            :     }
    3917         [ #  # ]:          0 :     return pFmt;
    3918                 :            : }
    3919                 :            : 
    3920                 :          0 : void SwRTFParser::SetStyleAttr( SfxItemSet& rCollSet,
    3921                 :            :                                 const SfxItemSet& rStyleSet,
    3922                 :            :                                 const SfxItemSet& rDerivedSet )
    3923                 :            : {
    3924                 :          0 :     rCollSet.Put( rStyleSet );
    3925         [ #  # ]:          0 :     if( rDerivedSet.Count() )
    3926                 :            :     {
    3927                 :            :         // suche alle Attribute, die neu gesetzt werden:
    3928                 :            :         const SfxPoolItem* pItem;
    3929         [ #  # ]:          0 :         SfxItemIter aIter( rDerivedSet );
    3930                 :          0 :         sal_uInt16 nWhich = aIter.GetCurItem()->Which();
    3931                 :          0 :         while( sal_True )
    3932                 :            :         {
    3933         [ #  # ]:          0 :             switch( rStyleSet.GetItemState( nWhich, sal_False, &pItem ) )
              [ #  #  # ]
    3934                 :            :             {
    3935                 :            :             case SFX_ITEM_DEFAULT:
    3936                 :            :                 // auf default zuruecksetzen
    3937         [ #  # ]:          0 :                 if( RES_FRMATR_END > nWhich )
    3938 [ #  # ][ #  # ]:          0 :                     rCollSet.Put( rCollSet.GetPool()->GetDefaultItem( nWhich ));
    3939                 :          0 :                 break;
    3940                 :            :             case SFX_ITEM_SET:
    3941 [ #  # ][ #  # ]:          0 :                 if( *pItem == *aIter.GetCurItem() )     // gleiches Attribut?
    3942                 :            :                     // definition kommt aus dem Parent
    3943         [ #  # ]:          0 :                     rCollSet.ClearItem( nWhich );       // loeschen
    3944                 :          0 :                 break;
    3945                 :            :             }
    3946                 :            : 
    3947         [ #  # ]:          0 :             if( aIter.IsAtEnd() )
    3948                 :          0 :                 break;
    3949         [ #  # ]:          0 :             nWhich = aIter.NextItem()->Which();
    3950         [ #  # ]:          0 :         }
    3951                 :            :     }
    3952                 :            :     // und jetzt noch auf unsere Werte abgleichen
    3953                 :          0 :     SetSwgValues( rCollSet );
    3954                 :          0 : }
    3955                 :            : 
    3956                 :          0 : SwTxtFmtColl* SwRTFParser::MakeStyle( sal_uInt16 nNo, const SvxRTFStyleType& rStyle)
    3957                 :            : {
    3958                 :            :     bool bCollExist;
    3959                 :            :     SwTxtFmtColl* pColl = MakeColl( rStyle.sName, sal_uInt16(nNo),
    3960         [ #  # ]:          0 :         rStyle.nOutlineNo, bCollExist);
    3961 [ #  # ][ #  # ]:          0 :     aTxtCollTbl.insert(std::make_pair(nNo,pColl));
    3962                 :            : 
    3963                 :            :     // in bestehendes Dok einfuegen, dann keine Ableitung usw. setzen
    3964         [ #  # ]:          0 :     if( bCollExist )
    3965                 :          0 :         return pColl;
    3966                 :            : 
    3967                 :          0 :     sal_uInt16 nStyleNo = rStyle.nBasedOn;
    3968 [ #  # ][ #  # ]:          0 :     if( rStyle.bBasedOnIsSet && nStyleNo != nNo )
    3969                 :            :     {
    3970         [ #  # ]:          0 :         SvxRTFStyleTbl::iterator styleIter = GetStyleTbl().find( nStyleNo );
    3971                 :          0 :         SvxRTFStyleType* pDerivedStyle = NULL;
    3972 [ #  # ][ #  # ]:          0 :         if ( styleIter != GetStyleTbl().end() )
                 [ #  # ]
    3973         [ #  # ]:          0 :             pDerivedStyle = styleIter->second;
    3974                 :            : 
    3975                 :          0 :         SwTxtFmtColl* pDerivedColl = NULL;
    3976         [ #  # ]:          0 :         std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find(nStyleNo);
    3977                 :            : 
    3978 [ #  # ][ #  # ]:          0 :         if(iter == aTxtCollTbl.end() )         // noch nicht vorhanden, also anlegen
    3979                 :            :         {
    3980                 :            :             // ist die ueberhaupt als Style vorhanden ?
    3981                 :            :             pDerivedColl = pDerivedStyle
    3982                 :          0 :                     ? MakeStyle( nStyleNo, *pDerivedStyle )
    3983 [ #  # ][ #  # ]:          0 :                     : pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
                 [ #  # ]
    3984                 :            :         }
    3985                 :            :         else
    3986         [ #  # ]:          0 :             pDerivedColl = iter->second;
    3987                 :            : 
    3988         [ #  # ]:          0 :         if( pColl == pDerivedColl )
    3989         [ #  # ]:          0 :             ((SfxItemSet&)pColl->GetAttrSet()).Put( rStyle.aAttrSet );
    3990                 :            :         else
    3991                 :            :         {
    3992         [ #  # ]:          0 :             pColl->SetDerivedFrom( pDerivedColl );
    3993                 :            : 
    3994                 :            :             // setze die richtigen Attribute
    3995                 :            :             const SfxItemSet* pDerivedSet;
    3996         [ #  # ]:          0 :             if( pDerivedStyle )
    3997                 :          0 :                 pDerivedSet = &pDerivedStyle->aAttrSet;
    3998                 :            :             else
    3999                 :          0 :                 pDerivedSet = &pDerivedColl->GetAttrSet();
    4000                 :            : 
    4001                 :          0 :             SetStyleAttr( (SfxItemSet&)pColl->GetAttrSet(),
    4002         [ #  # ]:          0 :                             rStyle.aAttrSet, *pDerivedSet );
    4003                 :          0 :         }
    4004                 :            :     }
    4005                 :            :     else
    4006         [ #  # ]:          0 :         ((SfxItemSet&)pColl->GetAttrSet()).Put( rStyle.aAttrSet );
    4007                 :            : 
    4008                 :            : 
    4009                 :          0 :     nStyleNo = rStyle.nNext;
    4010         [ #  # ]:          0 :     if( nStyleNo != nNo )
    4011                 :            :     {
    4012                 :          0 :         SwTxtFmtColl* pNext = NULL;
    4013         [ #  # ]:          0 :         std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find( nStyleNo );
    4014                 :            : 
    4015 [ #  # ][ #  # ]:          0 :         if( iter == aTxtCollTbl.end())            // noch nicht vorhanden, also anlegen
    4016                 :            :         {
    4017                 :            :             // ist die ueberhaupt als Style vorhanden ?
    4018         [ #  # ]:          0 :             SvxRTFStyleTbl::iterator styleIter = GetStyleTbl().find( nStyleNo );
    4019 [ #  # ][ #  # ]:          0 :             if ( styleIter != GetStyleTbl().end() )
                 [ #  # ]
    4020 [ #  # ][ #  # ]:          0 :                 pNext = MakeStyle( nStyleNo, *styleIter->second );
    4021                 :            :             else
    4022         [ #  # ]:          0 :                 pNext = pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
    4023                 :            :         }
    4024                 :            :         else
    4025         [ #  # ]:          0 :             pNext = iter->second;
    4026                 :            : 
    4027                 :          0 :         pColl->SetNextTxtFmtColl( *pNext );
    4028                 :            :     }
    4029                 :          0 :     return pColl;
    4030                 :            : }
    4031                 :            : 
    4032                 :          0 : SwCharFmt* SwRTFParser::MakeCharStyle( sal_uInt16 nNo, const SvxRTFStyleType& rStyle )
    4033                 :            : {
    4034                 :            :     int bCollExist;
    4035         [ #  # ]:          0 :     SwCharFmt* pFmt = MakeCharFmt( rStyle.sName, sal_uInt16(nNo), bCollExist );
    4036 [ #  # ][ #  # ]:          0 :     aCharFmtTbl.insert(std::make_pair(nNo,pFmt));
    4037                 :            : 
    4038                 :            :     // in bestehendes Dok einfuegen, dann keine Ableitung usw. setzen
    4039         [ #  # ]:          0 :     if( bCollExist )
    4040                 :          0 :         return pFmt;
    4041                 :            : 
    4042                 :          0 :     sal_uInt16 nStyleNo = rStyle.nBasedOn;
    4043 [ #  # ][ #  # ]:          0 :     if( rStyle.bBasedOnIsSet && nStyleNo != nNo )
    4044                 :            :     {
    4045         [ #  # ]:          0 :         SvxRTFStyleTbl::iterator styleIter = GetStyleTbl().find( nStyleNo );
    4046                 :          0 :         SvxRTFStyleType* pDerivedStyle = NULL;
    4047 [ #  # ][ #  # ]:          0 :         if ( styleIter != GetStyleTbl().end() )
                 [ #  # ]
    4048         [ #  # ]:          0 :             pDerivedStyle = styleIter->second;
    4049                 :            : 
    4050                 :          0 :         SwCharFmt* pDerivedFmt = NULL;
    4051         [ #  # ]:          0 :         std::map<sal_Int32,SwCharFmt*>::iterator iter = aCharFmtTbl.find( nStyleNo );
    4052                 :            : 
    4053 [ #  # ][ #  # ]:          0 :         if(iter == aCharFmtTbl.end())          // noch nicht vorhanden, also anlegen
    4054                 :            :         {
    4055                 :            :             // ist die ueberhaupt als Style vorhanden ?
    4056                 :            :             pDerivedFmt = pDerivedStyle
    4057                 :          0 :                     ? MakeCharStyle( nStyleNo, *pDerivedStyle )
    4058 [ #  # ][ #  # ]:          0 :                     : pDoc->GetDfltCharFmt();
    4059                 :            :         }
    4060                 :            :         else
    4061         [ #  # ]:          0 :             pDerivedFmt = iter->second;
    4062                 :            : 
    4063         [ #  # ]:          0 :         if( pFmt == pDerivedFmt )
    4064         [ #  # ]:          0 :             ((SfxItemSet&)pFmt->GetAttrSet()).Put( rStyle.aAttrSet );
    4065                 :            :         else
    4066                 :            :         {
    4067         [ #  # ]:          0 :             pFmt->SetDerivedFrom( pDerivedFmt );
    4068                 :            : 
    4069                 :            :             // setze die richtigen Attribute
    4070                 :            :             const SfxItemSet* pDerivedSet;
    4071         [ #  # ]:          0 :             if( pDerivedStyle )
    4072                 :          0 :                 pDerivedSet = &pDerivedStyle->aAttrSet;
    4073                 :            :             else
    4074                 :          0 :                 pDerivedSet = &pDerivedFmt->GetAttrSet();
    4075                 :            : 
    4076                 :          0 :             SetStyleAttr( (SfxItemSet&)pFmt->GetAttrSet(),
    4077         [ #  # ]:          0 :                             rStyle.aAttrSet, *pDerivedSet );
    4078                 :          0 :         }
    4079                 :            :     }
    4080                 :            :     else
    4081         [ #  # ]:          0 :         ((SfxItemSet&)pFmt->GetAttrSet()).Put( rStyle.aAttrSet );
    4082                 :            : 
    4083                 :          0 :     return pFmt;
    4084                 :            : }
    4085                 :            : 
    4086                 :            : // loesche den letzten Node (Tabelle/Fly/Ftn/..)
    4087                 :          0 : void SwRTFParser::DelLastNode()
    4088                 :            : {
    4089                 :            :     // sollte der letze Node leer sein, dann loesche ihn
    4090                 :            :     // (\par heisst ja Absatzende und nicht neuer Absatz!)
    4091                 :            : 
    4092         [ #  # ]:          0 :     if( !pPam->GetPoint()->nContent.GetIndex() )
    4093                 :            :     {
    4094                 :          0 :         sal_uLong nNodeIdx = pPam->GetPoint()->nNode.GetIndex();
    4095                 :          0 :         SwCntntNode* pCNd = pDoc->GetNodes()[ nNodeIdx ]->GetCntntNode();
    4096                 :            :         // paragraphs with page break information are not empty!)
    4097         [ #  # ]:          0 :         if(const SfxPoolItem* pItem=&(pCNd->GetAttr( RES_PAGEDESC, sal_False)))
    4098                 :            :         {
    4099                 :          0 :             SwFmtPageDesc* pPageDescItem = ((SwFmtPageDesc*)pItem);
    4100         [ #  # ]:          0 :             if (pPageDescItem->GetPageDesc()!=NULL)
    4101                 :          0 :             return;
    4102                 :            :         }
    4103                 :            : 
    4104 [ #  # ][ #  # ]:          0 :         if( pCNd && pCNd->StartOfSectionIndex()+2 <
                 [ #  # ]
    4105                 :          0 :             pCNd->EndOfSectionIndex() )
    4106                 :            :         {
    4107         [ #  # ]:          0 :             if( !GetAttrStack().empty() )
    4108                 :            :             {
    4109                 :            :                 // Attribut Stack-Eintraege, muessen ans Ende des vorherigen
    4110                 :            :                 // Nodes verschoben werden.
    4111                 :          0 :                 sal_Bool bMove = sal_False;
    4112         [ #  # ]:          0 :                 for( size_t n = GetAttrStack().size(); n; )
    4113                 :            :                 {
    4114                 :            :                     SvxRTFItemStackType* pStkEntry = (SvxRTFItemStackType*)
    4115                 :          0 :                                                     GetAttrStack()[ --n ];
    4116         [ #  # ]:          0 :                     if( nNodeIdx == pStkEntry->GetSttNode().GetIdx() )
    4117                 :            :                     {
    4118         [ #  # ]:          0 :                         if( !bMove )
    4119                 :            :                         {
    4120                 :          0 :                             pPam->Move( fnMoveBackward );
    4121                 :          0 :                             bMove = sal_True;
    4122                 :            :                         }
    4123         [ #  # ]:          0 :                         pStkEntry->SetStartPos( SwxPosition( pPam ) );
    4124                 :            :                     }
    4125                 :            :                 }
    4126         [ #  # ]:          0 :                 if( bMove )
    4127                 :          0 :                     pPam->Move( fnMoveForward );
    4128                 :            :             }
    4129                 :          0 :             pPam->GetPoint()->nContent.Assign( 0, 0 );
    4130                 :          0 :             pPam->SetMark();
    4131                 :          0 :             pPam->DeleteMark();
    4132                 :            : 
    4133                 :          0 :             pDoc->GetNodes().Delete( pPam->GetPoint()->nNode );
    4134                 :            :         }
    4135                 :            :     }
    4136                 :            : }
    4137                 :            : 
    4138                 :            :     // fuer Tokens, die im ReadAttr nicht ausgewertet werden
    4139                 :          0 : void SwRTFParser::UnknownAttrToken( int nToken, SfxItemSet* pSet )
    4140                 :            : {
    4141   [ #  #  #  #  :          0 :     switch( nToken )
             #  #  #  # ]
    4142                 :            :     {
    4143                 :            :     case RTF_INTBL:
    4144                 :            :         {
    4145         [ #  # ]:          0 :             if( !pTableNode )           // Tabelle nicht mehr vorhanden ?
    4146                 :          0 :                 NewTblLine();           // evt. Line copieren
    4147                 :            :             else
    4148                 :            :             {
    4149                 :            :                 static int _do=0;
    4150                 :            :                 // Crsr nicht mehr in der Tabelle ?
    4151 [ #  # ][ #  # ]:          0 :                 if( !pPam->GetNode()->FindTableNode() && _do )
                 [ #  # ]
    4152                 :            :                 {
    4153                 :          0 :                     sal_uLong nOldPos = pPam->GetPoint()->nNode.GetIndex();
    4154                 :            : 
    4155                 :            :                     // dann wieder in die letzte Box setzen
    4156                 :            :                     // (kann durch einlesen von Flys geschehen!)
    4157                 :          0 :                     pPam->GetPoint()->nNode = *pTableNode->EndOfSectionNode();
    4158                 :          0 :                     pPam->Move( fnMoveBackward );
    4159                 :            : 
    4160                 :            :                     // alle Attribute, die schon auf den nachfolgen zeigen
    4161                 :            :                     // auf die neue Box umsetzen !!
    4162                 :          0 :                     SvxRTFItemStack& rAttrStk = GetAttrStack();
    4163                 :            :                     const SvxRTFItemStackType* pStk;
    4164         [ #  # ]:          0 :                     for( size_t n = 0; n < rAttrStk.size(); ++n )
    4165   [ #  #  #  # ]:          0 :                         if( ( pStk = rAttrStk[ n ])->GetSttNodeIdx() == nOldPos &&
                 [ #  # ]
    4166                 :          0 :                             !pStk->GetSttCnt() )
    4167         [ #  # ]:          0 :                             ((SvxRTFItemStackType*)pStk)->SetStartPos( SwxPosition( pPam ) );
    4168                 :            :                 }
    4169                 :            :             }
    4170                 :            :         }
    4171                 :          0 :         break;
    4172                 :            : 
    4173                 :            :     case RTF_PAGEBB:
    4174                 :            :         {
    4175         [ #  # ]:          0 :             pSet->Put( SvxFmtBreakItem( SVX_BREAK_PAGE_BEFORE, RES_BREAK ));
    4176                 :            :         }
    4177                 :          0 :         break;
    4178                 :            : 
    4179                 :            :     case RTF_PGBRK:
    4180                 :            :         {
    4181                 :            :             pSet->Put( SvxFmtBreakItem( 1 == nTokenValue ?
    4182 [ #  # ][ #  # ]:          0 :                                 SVX_BREAK_PAGE_BOTH : SVX_BREAK_PAGE_AFTER, RES_BREAK ));
    4183                 :            :         }
    4184                 :          0 :         break;
    4185                 :            : 
    4186                 :            :     case RTF_PGDSCNO:
    4187         [ #  # ]:          0 :         if( IsNewDoc() && bSwPageDesc &&
           [ #  #  #  # ]
                 [ #  # ]
    4188                 :          0 :             sal_uInt16(nTokenValue) < pDoc->GetPageDescCnt() )
    4189                 :            :         {
    4190                 :          0 :             const SwPageDesc* pPgDsc = &pDoc->GetPageDesc( (sal_uInt16)nTokenValue );
    4191         [ #  # ]:          0 :             pDoc->InsertPoolItem( *pPam, SwFmtPageDesc( pPgDsc ), 0);
    4192                 :            :         }
    4193                 :          0 :         break;
    4194                 :            :     case RTF_CS:
    4195                 :            :         {
    4196         [ #  # ]:          0 :             std::map<sal_Int32,SwCharFmt*>::iterator iter = aCharFmtTbl.find( nTokenValue );
    4197                 :            : 
    4198 [ #  # ][ #  # ]:          0 :             if(iter != aCharFmtTbl.end())
    4199 [ #  # ][ #  # ]:          0 :                 pSet->Put( SwFmtCharFmt(iter->second));
         [ #  # ][ #  # ]
    4200                 :            :         }
    4201                 :          0 :         break;
    4202                 :            : 
    4203                 :            :     case RTF_LS:
    4204         [ #  # ]:          0 :         if( -1 != nTokenValue )
    4205                 :            :         {
    4206         [ #  # ]:          0 :             if( bStyleTabValid )
    4207                 :            :             {
    4208                 :            :                 // dann ist auch die ListTabelle gueltig, also suche die
    4209                 :            :                 // enstprechende NumRule
    4210                 :          0 :                 SwNumRule* pRule = GetNumRuleOfListNo( nTokenValue );
    4211         [ #  # ]:          0 :                 if( pRule )
    4212         [ #  # ]:          0 :                     pSet->Put( SwNumRuleItem( pRule->GetName() ));
    4213                 :            : 
    4214         [ #  # ]:          0 :                 if( SFX_ITEM_SET != pSet->GetItemState( FN_PARAM_NUM_LEVEL, sal_False ))
    4215         [ #  # ]:          0 :                     pSet->Put( SfxUInt16Item( FN_PARAM_NUM_LEVEL, 0 ));
    4216                 :            :             }
    4217                 :            :             else
    4218                 :            :             {
    4219                 :            :                 // wir sind in der Style-Definitions - Phase. Der Name
    4220                 :            :                 // wird dann spaeter umgesetzt
    4221                 :            :                                 // pSet->Put( SwNumRuleItem( String::CreateFromInt32( nTokenValue )));
    4222                 :            :             }
    4223                 :            : 
    4224                 :            :         }
    4225                 :          0 :         break;
    4226                 :            : 
    4227                 :            :     case RTF_ILVL:
    4228                 :            :     case RTF_SOUTLVL:
    4229                 :            :         {
    4230                 :            :             sal_uInt8 nLevel = MAXLEVEL <= nTokenValue ? MAXLEVEL - 1
    4231         [ #  # ]:          0 :                                                   : sal_uInt8( nTokenValue );
    4232         [ #  # ]:          0 :             pSet->Put( SfxUInt16Item( FN_PARAM_NUM_LEVEL, nLevel ));
    4233                 :            :         }
    4234                 :          0 :         break;
    4235                 :            : 
    4236                 :            :     }
    4237                 :          0 : }
    4238                 :            : 
    4239                 :          0 : void SwRTFParser::ReadInfo( const sal_Char* pChkForVerNo )
    4240                 :            : {
    4241                 :          0 : sal_Char const aChkForVerNo[] = "StarWriter";
    4242                 :            : 
    4243                 :            :     // falls nicht schon was vorgegeben wurde, setzen wir unseren Namen
    4244                 :            :     // rein. Wenn das im Kommentar match, wird im Parser die VersionNummer
    4245                 :            :     // gelesen und gesetzt
    4246         [ #  # ]:          0 :     if( !pChkForVerNo )
    4247                 :          0 :         pChkForVerNo = aChkForVerNo;
    4248                 :            : 
    4249         [ #  # ]:          0 :     SvxRTFParser::ReadInfo( pChkForVerNo );
    4250                 :          0 : }
    4251                 :            : 
    4252                 :          0 : void SwRTFParser::ReadUserProperties()
    4253                 :            : {
    4254                 :            :     // For now we don't support user properties but at least the parser is here.
    4255                 :            :     // At the moment it just swallows the tokens to prevent them being displayed
    4256                 :          0 :     int nNumOpenBrakets = 1, nToken;
    4257                 :            : 
    4258 [ #  # ][ #  # ]:          0 :     while( nNumOpenBrakets && IsParserWorking() )
                 [ #  # ]
    4259                 :            :     {
    4260   [ #  #  #  #  :          0 :         switch( nToken = GetNextToken() )
                   #  # ]
    4261                 :            :         {
    4262                 :            :         case '}':
    4263                 :          0 :              --nNumOpenBrakets;
    4264                 :          0 :              break;
    4265                 :            :         case '{':
    4266                 :            :             {
    4267         [ #  # ]:          0 :                 if( RTF_IGNOREFLAG != GetNextToken() )
    4268                 :          0 :                     nToken = SkipToken( -1 );
    4269         [ #  # ]:          0 :                 else if( RTF_UNKNOWNCONTROL != GetNextToken() )
    4270                 :          0 :                     nToken = SkipToken( -2 );
    4271                 :            :                 else
    4272                 :            :                 {
    4273                 :            :                     // gleich herausfiltern
    4274                 :          0 :                     ReadUnknownData();
    4275                 :          0 :                     nToken = GetNextToken();
    4276         [ #  # ]:          0 :                     if( '}' != nToken )
    4277                 :          0 :                         eState = SVPAR_ERROR;
    4278                 :          0 :                     break;
    4279                 :            :                 }
    4280                 :          0 :                 ++nNumOpenBrakets;
    4281                 :            :             }
    4282                 :          0 :             break;
    4283                 :            : 
    4284                 :            :         case RTF_PROPNAME:
    4285                 :          0 :             SkipGroup();
    4286                 :          0 :             break;
    4287                 :            : 
    4288                 :            :         case RTF_PROPTYPE:
    4289                 :          0 :             break;
    4290                 :            : 
    4291                 :            :         case RTF_STATICVAL:
    4292                 :          0 :             SkipGroup();
    4293                 :          0 :              break;
    4294                 :            : 
    4295                 :            : //      default:
    4296                 :            :         }
    4297                 :            :     }
    4298                 :            : 
    4299                 :          0 :     SkipToken( -1 );
    4300                 :          0 : }
    4301                 :            : 
    4302                 :            : 
    4303                 :            : #ifdef USED
    4304                 :            : void SwRTFParser::SaveState( int nToken )
    4305                 :            : {
    4306                 :            :     SvxRTFParser::SaveState( nToken );
    4307                 :            : }
    4308                 :            : 
    4309                 :            : void SwRTFParser::RestoreState()
    4310                 :            : {
    4311                 :            :     SvxRTFParser::RestoreState();
    4312                 :            : }
    4313                 :            : #endif
    4314                 :            : 
    4315                 :            : /**/
    4316                 :            : 
    4317                 :          0 : BookmarkPosition::BookmarkPosition(const SwPaM &rPaM)
    4318                 :          0 :     : maMkNode(rPaM.GetMark()->nNode),
    4319                 :          0 :     mnMkCntnt(rPaM.GetMark()->nContent.GetIndex())
    4320                 :            : {
    4321                 :          0 : }
    4322                 :            : 
    4323                 :          0 : BookmarkPosition::BookmarkPosition(const BookmarkPosition &rEntry)
    4324                 :          0 :     : maMkNode(rEntry.maMkNode), mnMkCntnt(rEntry.mnMkCntnt)
    4325                 :            : {
    4326                 :          0 : }
    4327                 :            : 
    4328                 :          0 : bool BookmarkPosition::operator==(const BookmarkPosition rhs)
    4329                 :            : {
    4330 [ #  # ][ #  # ]:          0 :     return(maMkNode.GetIndex() == rhs.maMkNode.GetIndex() && mnMkCntnt == rhs.mnMkCntnt);
    4331                 :            : }
    4332                 :            : 
    4333                 :          0 : sal_uLong SwNodeIdx::GetIdx() const
    4334                 :            : {
    4335                 :          0 :     return aIdx.GetIndex();
    4336                 :            : }
    4337                 :            : 
    4338                 :          0 : SvxNodeIdx* SwNodeIdx::Clone() const
    4339                 :            : {
    4340         [ #  # ]:          0 :     return new SwNodeIdx( aIdx );
    4341                 :            : }
    4342                 :            : 
    4343                 :          0 : SvxPosition* SwxPosition::Clone() const
    4344                 :            : {
    4345                 :          0 :     return new SwxPosition( pPam );
    4346                 :            : }
    4347                 :            : 
    4348                 :          0 : SvxNodeIdx* SwxPosition::MakeNodeIdx() const
    4349                 :            : {
    4350         [ #  # ]:          0 :     return new SwNodeIdx( pPam->GetPoint()->nNode );
    4351                 :            : }
    4352                 :            : 
    4353                 :          0 : sal_uLong   SwxPosition::GetNodeIdx() const
    4354                 :            : {
    4355                 :          0 :     return pPam->GetPoint()->nNode.GetIndex();
    4356                 :            : }
    4357                 :            : 
    4358                 :          0 : xub_StrLen SwxPosition::GetCntIdx() const
    4359                 :            : {
    4360                 :          0 :     return pPam->GetPoint()->nContent.GetIndex();
    4361                 :            : }
    4362                 :            : 
    4363                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10