LCOV - code coverage report
Current view: top level - writerfilter/source/doctok - WW8DocumentImpl.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 1 966 0.1 %
Date: 2012-08-25 Functions: 2 123 1.6 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 2 2110 0.1 %

           Branch data     Line data    Source code
       1                 :            : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2                 :            : /*
       3                 :            :  * This file is part of the LibreOffice project.
       4                 :            :  *
       5                 :            :  * This Source Code Form is subject to the terms of the Mozilla Public
       6                 :            :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7                 :            :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8                 :            :  *
       9                 :            :  * This file incorporates work covered by the following license notice:
      10                 :            :  *
      11                 :            :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12                 :            :  *   contributor license agreements. See the NOTICE file distributed
      13                 :            :  *   with this work for additional information regarding copyright
      14                 :            :  *   ownership. The ASF licenses this file to you under the Apache
      15                 :            :  *   License, Version 2.0 (the "License"); you may not use this file
      16                 :            :  *   except in compliance with the License. You may obtain a copy of
      17                 :            :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18                 :            :  */
      19                 :            : 
      20                 :            : #include <resourcemodel/exceptions.hxx>
      21                 :            : #include <resourcemodel/QNameToString.hxx>
      22                 :            : #include <WW8DocumentImpl.hxx>
      23                 :            : #include <WW8FKPImpl.hxx>
      24                 :            : #include <WW8PieceTableImpl.hxx>
      25                 :            : #include <WW8BinTableImpl.hxx>
      26                 :            : #include <WW8StreamImpl.hxx>
      27                 :            : #include <WW8Sttbf.hxx>
      28                 :            : #include <Dff.hxx>
      29                 :            : #include <iterator>
      30                 :            : #include <XNoteHelperImpl.hxx>
      31                 :            : #include <rtl/ustring.hxx>
      32                 :            : #include <rtl/ustrbuf.hxx>
      33                 :            : #include <doctokLoggers.hxx>
      34                 :            : 
      35                 :            : namespace writerfilter {
      36                 :            : namespace doctok
      37                 :            : {
      38                 :            : 
      39                 :            : using namespace ::std;
      40                 :            : 
      41                 :            : template <class T>
      42                 :            : struct PLCFHelper
      43                 :            : {
      44                 :          0 :     static void processPLCFCpAndFcs(WW8DocumentImpl & rDoc,
      45                 :            :                                     WW8PieceTable::Pointer_t pPieceTable,
      46                 :            :                                     typename PLCF<T>::Pointer_t pPLCF,
      47                 :            :                                     PropertyType eType,
      48                 :            :                                     sal_uInt32 nOffset)
      49                 :            :     {
      50                 :          0 :         sal_uInt32 nCount = pPLCF->getEntryCount();
      51 [ #  # ][ #  # ]:          0 :         for (sal_uInt32 n = 0; n < nCount; ++n)
      52                 :            :         {
      53 [ #  # ][ #  # ]:          0 :             Cp aCp(pPLCF->getFc(n) + nOffset);
      54   [ #  #  #  # ]:          0 :             CpAndFc aCpAndFc = pPieceTable->createCpAndFc(aCp, eType);
      55                 :            : 
      56 [ #  # ][ #  # ]:          0 :             rDoc.insertCpAndFc(aCpAndFc);
      57                 :            :         }
      58                 :          0 :     }
      59                 :            : };
      60                 :            : 
      61                 :            : // WW8DocumentIteratorImpl
      62                 :          0 : bool operator == (const WW8DocumentIterator & rA,
      63                 :            :                   const WW8DocumentIterator & rB)
      64                 :            : {
      65                 :          0 :     return rA.equal(rB);
      66                 :            : }
      67                 :            : 
      68                 :          0 : WW8DocumentIterator::~WW8DocumentIterator()
      69                 :            : {
      70         [ #  # ]:          0 : }
      71                 :            : 
      72                 :          0 : WW8DocumentIteratorImpl::~WW8DocumentIteratorImpl()
      73                 :            : {
      74         [ #  # ]:          0 : }
      75                 :            : 
      76                 :          0 : WW8DocumentIterator & WW8DocumentIteratorImpl::operator++()
      77                 :            : {
      78                 :          0 :     mCpAndFc = mpDocument->getNextCp(mCpAndFc);
      79                 :            : 
      80                 :          0 :     return *this;
      81                 :            : }
      82                 :            : 
      83                 :          0 : WW8DocumentIterator & WW8DocumentIteratorImpl::operator--()
      84                 :            : {
      85                 :          0 :     mCpAndFc = mpDocument->getPrevCp(mCpAndFc);
      86                 :            : 
      87                 :          0 :     return *this;
      88                 :            : }
      89                 :            : 
      90                 :          0 : bool WW8DocumentIteratorImpl::equal(const WW8DocumentIterator & rIt_) const
      91                 :            : {
      92                 :            :     const WW8DocumentIteratorImpl & rIt =
      93         [ #  # ]:          0 :         dynamic_cast<const WW8DocumentIteratorImpl &>(rIt_);
      94                 :            : 
      95 [ #  # ][ #  # ]:          0 :     return mCpAndFc == rIt.mCpAndFc && mpDocument == rIt.mpDocument;
      96                 :            : }
      97                 :            : 
      98                 :            : writerfilter::Reference<Properties>::Pointer_t
      99                 :          0 : WW8DocumentIteratorImpl::getProperties() const
     100                 :            : {
     101                 :          0 :     return mpDocument->getProperties(mCpAndFc);
     102                 :            : }
     103                 :            : 
     104                 :            : writerfilter::Reference<Stream>::Pointer_t
     105                 :          0 : WW8DocumentIteratorImpl::getSubDocument() const
     106                 :            : {
     107                 :          0 :     return mpDocument->getSubDocument(mCpAndFc);
     108                 :            : }
     109                 :            : 
     110                 :          0 : WW8Stream::Sequence WW8DocumentIteratorImpl::getText()
     111                 :            : {
     112                 :          0 :     return mpDocument->getText(mCpAndFc);
     113                 :            : }
     114                 :            : 
     115                 :            : writerfilter::Reference<Properties>::Pointer_t
     116                 :          0 : WW8DocumentIteratorImpl::getShape() const
     117                 :            : {
     118                 :          0 :     return mpDocument->getShape(mCpAndFc);
     119                 :            : }
     120                 :            : 
     121                 :          0 : PropertyType WW8DocumentIteratorImpl::getPropertyType() const
     122                 :            : {
     123                 :          0 :     return mCpAndFc.getType();
     124                 :            : }
     125                 :            : 
     126                 :          0 : bool WW8DocumentIteratorImpl::isComplex() const
     127                 :            : {
     128                 :          0 :     return mCpAndFc.isComplex();
     129                 :            : }
     130                 :            : 
     131                 :          0 : void WW8DocumentIteratorImpl::dump(ostream & o) const
     132                 :            : {
     133                 :          0 :     o << mCpAndFc;
     134                 :          0 : }
     135                 :            : 
     136                 :          0 : string WW8DocumentIteratorImpl::toString() const
     137                 :            : {
     138                 :          0 :     return mCpAndFc.toString();
     139                 :            : }
     140                 :            : 
     141                 :            : // WW8DocumentImpl
     142                 :            : 
     143                 :          0 : WW8Document::~WW8Document()
     144                 :            : {
     145         [ #  # ]:          0 : }
     146                 :            : 
     147                 :            : #if OSL_DEBUG_LEVEL > 1
     148                 :            : class WW8IdToString : public IdToString
     149                 :            : {
     150                 :            : public:
     151                 :            :     WW8IdToString() : IdToString() {}
     152                 :            :     virtual ~WW8IdToString() {}
     153                 :            : 
     154                 :            :     virtual string toString(const Id & rId) const
     155                 :            :     {
     156                 :            :         string s((*SprmIdToString::Instance())(rId));
     157                 :            : 
     158                 :            :         if (s.empty())
     159                 :            :             s = (*QNameToString::Instance())(rId);
     160                 :            : 
     161                 :            :         return s;
     162                 :            :     }
     163                 :            : };
     164                 :            : #endif
     165                 :            : 
     166 [ #  # ][ #  # ]:          0 : WW8DocumentImpl::~WW8DocumentImpl()
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     167                 :            : {
     168         [ #  # ]:          0 : }
     169                 :            : 
     170                 :          0 : WW8DocumentImpl::WW8DocumentImpl(WW8Stream::Pointer_t rpStream)
     171                 :            : : bSubDocument(false), mfcPicLoc(0), mbPicIsData(false), mpStream(rpStream),
     172 [ #  # ][ #  # ]:          0 : mbInSection(false), mbInParagraphGroup(false), mbInCharacterGroup(false)
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     173                 :            : {
     174 [ #  # ][ #  # ]:          0 :     mpDocStream = getSubStream("WordDocument");
                 [ #  # ]
     175                 :            : 
     176 [ #  # ][ #  # ]:          0 :     mpSummaryInformationStream = getSubStream("\5SummaryInformation");
                 [ #  # ]
     177                 :            : 
     178                 :            :     try
     179                 :            :     {
     180 [ #  # ][ #  # ]:          0 :         mpDataStream = getSubStream("Data");
         [ #  # ][ #  # ]
     181                 :            :     }
     182         [ #  # ]:          0 :     catch (const ExceptionNotFound &)
     183                 :            :     {
     184                 :            :     }
     185                 :            : 
     186                 :            :     try
     187                 :            :     {
     188 [ #  # ][ #  # ]:          0 :         mpCompObjStream = getSubStream("\1CompObj");
         [ #  # ][ #  # ]
     189                 :            :     }
     190         [ #  # ]:          0 :     catch (const ExceptionNotFound &)
     191                 :            :     {
     192                 :            :     }
     193                 :            : 
     194                 :            :     mpCHPFKPCache =
     195 [ #  # ][ #  # ]:          0 :         WW8FKPCache::Pointer_t(new WW8CHPFKPCacheImpl(mpDocStream, 5));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     196                 :            :     mpPAPFKPCache =
     197 [ #  # ][ #  # ]:          0 :         WW8FKPCache::Pointer_t(new WW8PAPFKPCacheImpl(mpDocStream, 5));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     198                 :            : 
     199 [ #  # ][ #  # ]:          0 :     mpFib = WW8Fib::Pointer_t(new WW8Fib(*mpDocStream));
         [ #  # ][ #  # ]
                 [ #  # ]
     200                 :            : 
     201      [ #  #  # ]:          0 :     switch (mpFib->get_fWhichTblStm())
     202                 :            :     {
     203                 :            :     case 0:
     204 [ #  # ][ #  # ]:          0 :         mpTableStream = getSubStream("0Table");
                 [ #  # ]
     205                 :            : 
     206                 :          0 :         break;
     207                 :            : 
     208                 :            :     case 1:
     209 [ #  # ][ #  # ]:          0 :         mpTableStream = getSubStream("1Table");
                 [ #  # ]
     210                 :            : 
     211                 :          0 :         break;
     212                 :            : 
     213                 :            :     default:
     214                 :          0 :         break;
     215                 :            :     }
     216                 :            : 
     217         [ #  # ]:          0 :     if (mpFib->get_nFib() >= 0xD9)
     218                 :            :     {
     219 [ #  # ][ #  # ]:          0 :         mpFibRgFcLcb2000.reset(new WW8FibRgFcLcb2000(*mpFib));
                 [ #  # ]
     220                 :            :     }
     221                 :            : 
     222         [ #  # ]:          0 :     if (mpTableStream.get() == NULL)
     223 [ #  # ][ #  # ]:          0 :         throw ExceptionNotFound("Table stream not found.");
     224                 :            : 
     225                 :            :     mpPieceTable =
     226                 :            :         WW8PieceTable::Pointer_t
     227                 :          0 :         (new WW8PieceTableImpl(*mpTableStream, mpFib->get_fcClx(),
     228 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbClx()));
         [ #  # ][ #  # ]
                 [ #  # ]
     229                 :            : 
     230                 :            :     {
     231         [ #  # ]:          0 :         Cp aCp(mpPieceTable->getLastCp());
     232         [ #  # ]:          0 :         Fc aFc(mpPieceTable->getLastFc());
     233         [ #  # ]:          0 :         CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
     234         [ #  # ]:          0 :         mCpAndFcs.insert(aCpAndFc);
     235                 :            :     }
     236                 :            : 
     237                 :            :     {
     238                 :          0 :         Cp aCp(mpFib->get_ccpText());
     239                 :            : 
     240                 :          0 :         mDocumentEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     241 [ #  # ][ #  # ]:          0 :                                       PROP_DOC);
     242         [ #  # ]:          0 :         mCpAndFcs.insert(mDocumentEndCpAndFc);
     243                 :            : 
     244                 :          0 :         aCp += mpFib->get_ccpFtn();
     245                 :          0 :         mFootnoteEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     246 [ #  # ][ #  # ]:          0 :                                       PROP_DOC);
     247         [ #  # ]:          0 :         mCpAndFcs.insert(mFootnoteEndCpAndFc);
     248                 :            : 
     249                 :          0 :         aCp += mpFib->get_ccpHdd();
     250                 :          0 :         mHeaderEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     251 [ #  # ][ #  # ]:          0 :                                     PROP_DOC);
     252         [ #  # ]:          0 :         mCpAndFcs.insert(mHeaderEndCpAndFc);
     253                 :            : 
     254                 :          0 :         aCp += mpFib->get_ccpAtn();
     255                 :          0 :         mAnnotationEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     256 [ #  # ][ #  # ]:          0 :                                         PROP_DOC);
     257         [ #  # ]:          0 :         mCpAndFcs.insert(mAnnotationEndCpAndFc);
     258                 :            : 
     259                 :          0 :         aCp += mpFib->get_ccpEdn();
     260                 :          0 :         mEndnoteEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     261 [ #  # ][ #  # ]:          0 :                                      PROP_DOC);
     262         [ #  # ]:          0 :         mCpAndFcs.insert(mEndnoteEndCpAndFc);
     263                 :            : 
     264                 :          0 :         aCp += mpFib->get_ccpTxbx();
     265                 :          0 :         mTextboxEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     266 [ #  # ][ #  # ]:          0 :                                      PROP_DOC);
     267         [ #  # ]:          0 :         mCpAndFcs.insert(mTextboxEndCpAndFc);
     268                 :            : 
     269                 :          0 :         aCp += mpFib->get_ccpHdrTxbx();
     270                 :          0 :         mTextboxHeaderEndCpAndFc = CpAndFc(aCp, mpPieceTable->cp2fc(aCp),
     271 [ #  # ][ #  # ]:          0 :                                            PROP_DOC);
     272         [ #  # ]:          0 :         mCpAndFcs.insert(mTextboxHeaderEndCpAndFc);
     273                 :            :     }
     274                 :            : 
     275                 :            :     mpBinTablePAPX =
     276                 :            :         WW8BinTable::Pointer_t(new WW8BinTableImpl
     277                 :          0 :                                (*mpTableStream,
     278                 :          0 :                                 mpFib->get_fcPlcfbtePapx(),
     279 [ #  # ][ #  # ]:          0 :                                 mpFib->get_lcbPlcfbtePapx()));
         [ #  # ][ #  # ]
                 [ #  # ]
     280                 :            : 
     281                 :            :     //clog << "BinTable(PAP):" << mpBinTablePAPX->toString();
     282                 :            : 
     283         [ #  # ]:          0 :     parseBinTableCpAndFcs(*mpBinTablePAPX, PROP_PAP);
     284                 :            : 
     285                 :            :     mpBinTableCHPX =
     286                 :            :         WW8BinTable::Pointer_t(new WW8BinTableImpl
     287                 :          0 :                                (*mpTableStream,
     288                 :          0 :                                 mpFib->get_fcPlcfbteChpx(),
     289 [ #  # ][ #  # ]:          0 :                                 mpFib->get_lcbPlcfbteChpx()));
         [ #  # ][ #  # ]
                 [ #  # ]
     290                 :            : 
     291         [ #  # ]:          0 :     parseBinTableCpAndFcs(*mpBinTableCHPX, PROP_CHP);
     292                 :            : 
     293                 :            :     mpSEDs = PLCF<WW8SED>::Pointer_t(new PLCF<WW8SED>
     294                 :          0 :                                      (*mpTableStream,
     295                 :          0 :                                       mpFib->get_fcPlcfsed(),
     296 [ #  # ][ #  # ]:          0 :                                       mpFib->get_lcbPlcfsed()));
         [ #  # ][ #  # ]
                 [ #  # ]
     297                 :            : 
     298                 :            :     {
     299                 :            :         PLCFHelper<WW8SED>::processPLCFCpAndFcs
     300 [ #  # ][ #  # ]:          0 :             (*this, mpPieceTable, mpSEDs, PROP_SEC, 0);
         [ #  # ][ #  # ]
                 [ #  # ]
     301                 :            :     }
     302                 :            : 
     303         [ #  # ]:          0 :     sal_uInt32 nHeaders = getHeaderCount();
     304                 :            : 
     305         [ #  # ]:          0 :     if (nHeaders > 0)
     306                 :            :     {
     307                 :            :         mpHeaderOffsets = WW8StructBase::Pointer_t
     308                 :          0 :             (new WW8StructBase(*mpTableStream,
     309                 :          0 :                                mpFib->get_fcPlcfhdd(),
     310 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcfhdd()));
         [ #  # ][ #  # ]
                 [ #  # ]
     311                 :            : 
     312                 :            :         {
     313         [ #  # ]:          0 :             for (sal_uInt32 n = 0; n <= nHeaders; ++n)
     314                 :            :             {
     315         [ #  # ]:          0 :                 CpAndFc aCpAndFc(getHeaderCpAndFc(n));
     316                 :            : 
     317         [ #  # ]:          0 :                 mCpAndFcs.insert(aCpAndFc);
     318                 :            :             }
     319                 :            :         }
     320                 :            :     }
     321                 :            : 
     322         [ #  # ]:          0 :     if (mpFib->get_lcbPlcffndTxt() > 0)
     323                 :            :     {
     324                 :            :         WW8StructBase::Pointer_t pCps
     325                 :          0 :             (new WW8StructBase(*mpTableStream,
     326                 :          0 :                                mpFib->get_fcPlcffndTxt(),
     327 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcffndTxt()));
                 [ #  # ]
     328                 :            : 
     329                 :            :         PLCF<WW8FRD>::Pointer_t pRefs
     330                 :          0 :             (new PLCF<WW8FRD>(*mpTableStream,
     331                 :          0 :                                mpFib->get_fcPlcffndRef(),
     332 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcffndRef()));
                 [ #  # ]
     333                 :            : 
     334                 :            :         mpFootnoteHelper = XNoteHelper<WW8FRD>::Pointer_t
     335                 :            :             (new XNoteHelper<WW8FRD>(pCps, pRefs, mpPieceTable, this,
     336 [ #  # ][ #  # ]:          0 :                              PROP_FOOTNOTE, getDocumentEndCp()));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     337                 :            : 
     338 [ #  # ][ #  # ]:          0 :         mpFootnoteHelper->init();
                 [ #  # ]
     339                 :            :     }
     340                 :            : 
     341         [ #  # ]:          0 :     if (mpFib->get_lcbPlcfendTxt() > 0)
     342                 :            :     {
     343                 :            :         WW8StructBase::Pointer_t pCps
     344                 :          0 :             (new WW8StructBase(*mpTableStream,
     345                 :          0 :                                mpFib->get_fcPlcfendTxt(),
     346 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcfendTxt()));
                 [ #  # ]
     347                 :            : 
     348                 :            :         PLCF<WW8FRD>::Pointer_t pRefs
     349                 :          0 :             (new PLCF<WW8FRD>(*mpTableStream,
     350                 :          0 :                                mpFib->get_fcPlcfendRef(),
     351 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcfendRef()));
                 [ #  # ]
     352                 :            : 
     353                 :            :         mpEndnoteHelper = XNoteHelper<WW8FRD>::Pointer_t
     354                 :            :             (new XNoteHelper<WW8FRD>(pCps, pRefs, mpPieceTable, this,
     355 [ #  # ][ #  # ]:          0 :                              PROP_ENDNOTE, getAnnotationEndCp()));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     356                 :            : 
     357 [ #  # ][ #  # ]:          0 :         mpEndnoteHelper->init();
                 [ #  # ]
     358                 :            :     }
     359                 :            : 
     360         [ #  # ]:          0 :     if (mpFib->get_lcbPlcfandTxt() > 0)
     361                 :            :     {
     362                 :            :         WW8StructBase::Pointer_t pCps
     363                 :          0 :             (new WW8StructBase(*mpTableStream,
     364                 :          0 :                                mpFib->get_fcPlcfandTxt(),
     365 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcfandTxt()));
                 [ #  # ]
     366                 :            : 
     367                 :            :         PLCF<WW8ATRD>::Pointer_t pRefs
     368                 :          0 :             (new PLCF<WW8ATRD>(*mpTableStream,
     369                 :          0 :                                mpFib->get_fcPlcfandRef(),
     370 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcfandRef()));
                 [ #  # ]
     371                 :            : 
     372                 :            :         mpAnnotationHelper = XNoteHelper<WW8ATRD>::Pointer_t
     373                 :            :             (new XNoteHelper<WW8ATRD>(pCps, pRefs, mpPieceTable, this,
     374 [ #  # ][ #  # ]:          0 :                                    PROP_ANNOTATION, getHeaderEndCp()));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     375                 :            : 
     376 [ #  # ][ #  # ]:          0 :         mpAnnotationHelper->init();
                 [ #  # ]
     377                 :            :     }
     378                 :            : 
     379         [ #  # ]:          0 :     if (mpFib->get_lcbSttbfbkmk() > 0)
     380                 :            :     {
     381                 :            :         PLCF<WW8BKF>::Pointer_t pStartCps
     382                 :          0 :             (new PLCF<WW8BKF>(*mpTableStream, mpFib->get_fcPlcfbkf(),
     383 [ #  # ][ #  # ]:          0 :                               mpFib->get_lcbPlcfbkf()));
                 [ #  # ]
     384                 :            : 
     385                 :            :         WW8StructBase::Pointer_t pEndCps
     386                 :          0 :             (new WW8StructBase(*mpTableStream, mpFib->get_fcPlcfbkl(),
     387 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcfbkl()));
                 [ #  # ]
     388                 :            : 
     389                 :            :         WW8Sttbf::Pointer_t pNames
     390                 :          0 :             (new WW8Sttbf(*mpTableStream, mpFib->get_fcSttbfbkmk(),
     391 [ #  # ][ #  # ]:          0 :                           mpFib->get_lcbSttbfbkmk()));
                 [ #  # ]
     392                 :            : 
     393                 :            :         mpBookmarkHelper = BookmarkHelper::Pointer_t
     394 [ #  # ][ #  # ]:          0 :             (new BookmarkHelper(pStartCps, pEndCps, pNames, mpPieceTable, this));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     395                 :            : 
     396 [ #  # ][ #  # ]:          0 :         mpBookmarkHelper->init();
         [ #  # ][ #  # ]
     397                 :            :     }
     398                 :            : 
     399                 :            :     {
     400         [ #  # ]:          0 :         PLCF<WW8FLD>::Pointer_t pPlcffldMom;
     401                 :            : 
     402         [ #  # ]:          0 :         if (mpFib->get_lcbPlcffldMom() > 0)
     403                 :            :         {
     404                 :            :             pPlcffldMom = PLCF<WW8FLD>::Pointer_t
     405                 :          0 :                 (new PLCF<WW8FLD>(*mpTableStream,
     406                 :          0 :                                   mpFib->get_fcPlcffldMom(),
     407 [ #  # ][ #  # ]:          0 :                                   mpFib->get_lcbPlcffldMom()));
         [ #  # ][ #  # ]
                 [ #  # ]
     408                 :            : 
     409                 :            :             mpFieldHelper = FieldHelper::Pointer_t
     410                 :            :                 (new FieldHelper(pPlcffldMom,
     411 [ #  # ][ #  # ]:          0 :                                  this));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     412                 :            : 
     413         [ #  # ]:          0 :             mpFieldHelper->init();
     414         [ #  # ]:          0 :         }
     415                 :            :     }
     416                 :            : 
     417         [ #  # ]:          0 :     PLCF<WW8FSPA>::Pointer_t pPlcspaMom;
     418         [ #  # ]:          0 :     if (mpFib->get_lcbPlcspaMom() > 0)
     419                 :            :     {
     420                 :            :         pPlcspaMom = PLCF<WW8FSPA>::Pointer_t
     421                 :            :             (new PLCF<WW8FSPA>
     422                 :          0 :              (*mpTableStream, mpFib->get_fcPlcspaMom(),
     423 [ #  # ][ #  # ]:          0 :               mpFib->get_lcbPlcspaMom()));
         [ #  # ][ #  # ]
                 [ #  # ]
     424                 :            :     }
     425                 :            : 
     426         [ #  # ]:          0 :     PLCF<WW8FSPA>::Pointer_t pPlcspaHdr;
     427         [ #  # ]:          0 :     if (mpFib->get_lcbPlcspaHdr() > 0)
     428                 :            :     {
     429                 :            :         pPlcspaHdr = PLCF<WW8FSPA>::Pointer_t
     430                 :            :             (new PLCF<WW8FSPA>
     431                 :          0 :              (*mpTableStream, mpFib->get_fcPlcspaHdr(),
     432 [ #  # ][ #  # ]:          0 :               mpFib->get_lcbPlcspaHdr()));
         [ #  # ][ #  # ]
                 [ #  # ]
     433                 :            :     }
     434                 :            : 
     435                 :            :     mpShapeHelper = ShapeHelper::Pointer_t
     436 [ #  # ][ #  # ]:          0 :         (new ShapeHelper(pPlcspaMom, pPlcspaHdr, this));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     437                 :            : 
     438         [ #  # ]:          0 :     mpShapeHelper->init();
     439                 :            : 
     440         [ #  # ]:          0 :     PLCF<WW8BKD>::Pointer_t pPlcbkdMother;
     441 [ #  # ][ #  # ]:          0 :     if (mpFib->get_fcBkdMother() > 0 && mpFib->get_lcbBkdMother() > 0)
                 [ #  # ]
     442                 :            :     {
     443                 :            :         pPlcbkdMother = PLCF<WW8BKD>::Pointer_t
     444                 :            :             (new PLCF<WW8BKD>
     445                 :          0 :              (*mpTableStream, mpFib->get_fcBkdMother(),
     446 [ #  # ][ #  # ]:          0 :               mpFib->get_lcbBkdMother()));
         [ #  # ][ #  # ]
                 [ #  # ]
     447                 :            :     }
     448                 :            : 
     449                 :            :     mpBreakHelper = BreakHelper::Pointer_t
     450 [ #  # ][ #  # ]:          0 :         (new BreakHelper(pPlcbkdMother, this));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
     451                 :            : 
     452         [ #  # ]:          0 :     mpBreakHelper->init();
     453                 :            : 
     454 [ #  # ][ #  # ]:          0 :     if (mpFib->get_fcDggInfo() != 0 && mpFib->get_lcbDggInfo() > 0)
                 [ #  # ]
     455                 :            :     {
     456                 :            :         mpDffBlock = DffBlock::Pointer_t
     457                 :          0 :             (new DffBlock(*mpTableStream, mpFib->get_fcDggInfo(),
     458 [ #  # ][ #  # ]:          0 :                          mpFib->get_lcbDggInfo(), 1));
         [ #  # ][ #  # ]
                 [ #  # ]
     459                 :            : 
     460         [ #  # ]:          0 :         mpDffBlock->setDocument(this);
     461                 :            :     }
     462                 :            : 
     463         [ #  # ]:          0 :     if (mpFib->get_lcbPlcftxbxTxt() > 0)
     464                 :            :     {
     465                 :            :         mpTextBoxStories = PLCF<WW8FTXBXS>::Pointer_t
     466                 :          0 :             (new PLCF<WW8FTXBXS>(*mpTableStream,
     467                 :          0 :                                  mpFib->get_fcPlcftxbxTxt(),
     468 [ #  # ][ #  # ]:          0 :                                  mpFib->get_lcbPlcftxbxTxt()));
         [ #  # ][ #  # ]
                 [ #  # ]
     469                 :            : 
     470                 :            :         PLCFHelper<WW8FTXBXS>::processPLCFCpAndFcs
     471                 :            :             (*this, mpPieceTable, mpTextBoxStories, PROP_DOC,
     472 [ #  # ][ #  # ]:          0 :              mEndnoteEndCpAndFc.getCp().get());
         [ #  # ][ #  # ]
                 [ #  # ]
     473                 :            :     }
     474                 :            : 
     475         [ #  # ]:          0 :     if (mCpAndFcs.size() > 0)
     476                 :            :     {
     477                 :          0 :         mCpAndFcStart = *mCpAndFcs.begin();
     478                 :          0 :         mCpAndFcEnd = getDocumentEndCp();
     479 [ #  # ][ #  # ]:          0 :     }
                 [ #  # ]
     480                 :          0 : }
     481                 :            : 
     482                 :          0 : bool WW8DocumentImpl::isSpecial(sal_uInt32 nChar)
     483                 :            : {
     484                 :          0 :     bool bResult = false;
     485                 :            : 
     486         [ #  # ]:          0 :     if (nChar <= 8)
     487                 :          0 :         bResult = true;
     488         [ #  # ]:          0 :     else if (nChar >= 10)
     489                 :            :     {
     490         [ #  # ]:          0 :         if (nChar == 12)
     491                 :          0 :             bResult= true;
     492         [ #  # ]:          0 :         else if (nChar <= 16)
     493                 :          0 :             bResult = true;
     494         [ #  # ]:          0 :         else if (nChar >= 22)
     495                 :            :         {
     496         [ #  # ]:          0 :             if (nChar <= 30)
     497                 :          0 :                 bResult = true;
     498         [ #  # ]:          0 :             else if (nChar >= 33)
     499                 :            :             {
     500         [ #  # ]:          0 :                 if (nChar <= 39)
     501                 :          0 :                     bResult = true;
     502         [ #  # ]:          0 :                 else if (nChar == 41)
     503                 :          0 :                     bResult = true;
     504                 :            :             }
     505                 :            :         }
     506                 :            :     }
     507                 :            : 
     508                 :          0 :     return bResult;
     509                 :            : }
     510                 :            : 
     511                 :          0 : WW8DocumentImpl::WW8DocumentImpl(const WW8DocumentImpl & rSrc,
     512                 :            :                                  const CpAndFc & rStart, const CpAndFc & rEnd)
     513 [ #  # ][ #  # ]:          0 : : bSubDocument(true), mfcPicLoc(0), mbPicIsData(false)
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     514                 :            : {
     515         [ #  # ]:          0 :     Assign(rSrc);
     516                 :            : 
     517                 :          0 :     mCpAndFcStart = rStart;
     518                 :          0 :     mCpAndFcEnd = rEnd;
     519                 :          0 : }
     520                 :            : 
     521                 :          0 : WW8DocumentImpl & WW8DocumentImpl::Assign(const WW8DocumentImpl & rSrc)
     522                 :            : {
     523                 :          0 :     mCpAndFcs = rSrc.mCpAndFcs;
     524                 :            : 
     525                 :          0 :     mpCHPFKPCache = rSrc.mpCHPFKPCache;
     526                 :          0 :     mpPAPFKPCache = rSrc.mpPAPFKPCache;
     527                 :            : 
     528                 :          0 :     mpStream = rSrc.mpStream;
     529                 :          0 :     mpTableStream = rSrc.mpTableStream;
     530                 :          0 :     mpDataStream = rSrc.mpDataStream;
     531                 :          0 :     mpDocStream = rSrc.mpDocStream;
     532                 :          0 :     mpCompObjStream = rSrc.mpCompObjStream;
     533                 :            : 
     534                 :          0 :     mpPieceTable = rSrc.mpPieceTable;
     535                 :            : 
     536                 :          0 :     mpBinTableCHPX = rSrc.mpBinTableCHPX;
     537                 :          0 :     mpBinTablePAPX = rSrc.mpBinTablePAPX;
     538                 :            : 
     539                 :          0 :     mpSEDs = rSrc.mpSEDs;
     540                 :            : 
     541                 :          0 :     mpFib = rSrc.mpFib;
     542                 :            : 
     543                 :          0 :     mpHeaderOffsets = rSrc.mpHeaderOffsets;
     544                 :          0 :     mpFootnoteHelper = rSrc.mpFootnoteHelper;
     545                 :          0 :     mpEndnoteHelper = rSrc.mpEndnoteHelper;
     546                 :          0 :     mpAnnotationHelper = rSrc.mpAnnotationHelper;
     547                 :          0 :     mpShapeHelper = rSrc.mpShapeHelper;
     548                 :          0 :     mpBreakHelper = rSrc.mpBreakHelper;
     549                 :            : 
     550                 :          0 :     mpBookmarkHelper = rSrc.mpBookmarkHelper;
     551                 :            : 
     552                 :          0 :     mpDffBlock = rSrc.mpDffBlock;
     553                 :          0 :     mpTextBoxStories = rSrc.mpTextBoxStories;
     554                 :            : 
     555                 :          0 :     mDocumentEndCpAndFc = rSrc.mDocumentEndCpAndFc;
     556                 :          0 :     mFootnoteEndCpAndFc = rSrc.mFootnoteEndCpAndFc;
     557                 :            : 
     558                 :          0 :     return *this;
     559                 :            : }
     560                 :            : 
     561                 :          0 : string WW8DocumentImpl::getType() const
     562                 :            : {
     563         [ #  # ]:          0 :     return "WW8DocumentImpl";
     564                 :            : }
     565                 :            : 
     566                 :          0 : void WW8DocumentImpl::parseBinTableCpAndFcs(WW8BinTable & rTable,
     567                 :            :                                             PropertyType eType_)
     568                 :            : {
     569         [ #  # ]:          0 :     for (sal_uInt32 i = 0; i < rTable.getEntryCount(); i++)
     570                 :            :     {
     571         [ #  # ]:          0 :         Fc aFcFromTable(rTable.getFc(i));
     572                 :            : 
     573 [ #  # ][ #  # ]:          0 :         if (aFcFromTable < mpPieceTable->getFirstFc())
                 [ #  # ]
     574         [ #  # ]:          0 :             aFcFromTable = mpPieceTable->getFirstFc();
     575                 :            : 
     576         [ #  # ]:          0 :         bool bComplex = mpPieceTable->isComplex(aFcFromTable);
     577                 :          0 :         aFcFromTable.setComplex(bComplex);
     578                 :            : 
     579                 :            :         try
     580                 :            :         {
     581         [ #  # ]:          0 :             Cp aCpFromTable(mpPieceTable->fc2cp(aFcFromTable));
     582         [ #  # ]:          0 :             CpAndFc aCpAndFcFromTable(aCpFromTable, aFcFromTable, eType_);
     583                 :            : 
     584         [ #  # ]:          0 :             mCpAndFcs.insert(aCpAndFcFromTable);
     585                 :            : 
     586         [ #  # ]:          0 :             WW8FKP::Pointer_t pFKP;
     587                 :            : 
     588      [ #  #  # ]:          0 :             switch (eType_)
     589                 :            :             {
     590                 :            :             case PROP_CHP:
     591                 :          0 :                 pFKP = getFKPCHPX(rTable.getPageNumber(i),
     592 [ #  # ][ #  # ]:          0 :                                   aCpAndFcFromTable.isComplex());
         [ #  # ][ #  # ]
     593                 :            : 
     594                 :          0 :                 break;
     595                 :            : 
     596                 :            :             case PROP_PAP:
     597                 :          0 :                 pFKP = getFKPPAPX(rTable.getPageNumber(i),
     598 [ #  # ][ #  # ]:          0 :                                   aCpAndFcFromTable.isComplex());
         [ #  # ][ #  # ]
     599                 :            : 
     600                 :          0 :                 break;
     601                 :            :             default:
     602                 :          0 :                 break;
     603                 :            :             }
     604                 :            : 
     605 [ #  # ][ #  # ]:          0 :             for (sal_uInt32 n = 0; n < pFKP->getEntryCount(); n++)
     606                 :            :             {
     607         [ #  # ]:          0 :                 Fc aFc = pFKP->getFc(n);
     608                 :            : 
     609 [ #  # ][ #  # ]:          0 :                 if (aFc < mpPieceTable->getFirstFc())
                 [ #  # ]
     610         [ #  # ]:          0 :                     aFc = mpPieceTable->getFirstFc();
     611                 :            : 
     612         [ #  # ]:          0 :                 bool bComplexFKP = mpPieceTable->isComplex(aFc);
     613                 :          0 :                 aFc.setComplex(bComplexFKP);
     614                 :            : 
     615                 :            :                 try
     616                 :            :                 {
     617         [ #  # ]:          0 :                     Cp aCp = mpPieceTable->fc2cp(aFc);
     618                 :            : 
     619         [ #  # ]:          0 :                     CpAndFc aCpAndFc(aCp, aFc, eType_);
     620                 :            : 
     621         [ #  # ]:          0 :                     mCpAndFcs.insert(aCpAndFc);
     622                 :            :                 }
     623   [ #  #  #  # ]:          0 :                 catch (const ExceptionNotFound &e)
     624                 :            :                 {
     625   [ #  #  #  # ]:          0 :                     clog << e.getText() << endl;
     626                 :            :                 }
     627         [ #  # ]:          0 :             }
     628                 :            :         }
     629   [ #  #  #  # ]:          0 :         catch (const ExceptionNotFound &e)
     630                 :            :         {
     631   [ #  #  #  # ]:          0 :             clog << e.getText() << endl;
     632                 :            :         }
     633                 :            :     }
     634                 :          0 : }
     635                 :            : 
     636                 :          0 : WW8Stream::Pointer_t WW8DocumentImpl::getSubStream
     637                 :            : (const OUString & sId) const
     638                 :            : {
     639                 :          0 :     return mpStream->getSubStream(sId);
     640                 :            : }
     641                 :            : 
     642                 :          0 : WW8Document::Pointer_t WW8DocumentImpl::getSubDocument(SubDocumentId /*nId*/)
     643                 :            : {
     644         [ #  # ]:          0 :     return WW8Document::Pointer_t(new WW8DocumentImpl(*this));
     645                 :            : }
     646                 :            : 
     647                 :            : WW8DocumentIterator::Pointer_t
     648                 :          0 : WW8DocumentImpl::getIterator(const CpAndFc & rCpAndFc)
     649                 :            : {
     650                 :            :     return WW8DocumentIterator::Pointer_t
     651         [ #  # ]:          0 :         (new WW8DocumentIteratorImpl(this, rCpAndFc));
     652                 :            : }
     653                 :            : 
     654                 :          0 : WW8DocumentIterator::Pointer_t WW8DocumentImpl::begin()
     655                 :            : {
     656                 :          0 :     return getIterator(getFirstCp());
     657                 :            : }
     658                 :            : 
     659                 :          0 : WW8DocumentIterator::Pointer_t WW8DocumentImpl::end()
     660                 :            : {
     661                 :          0 :     return getIterator(getLastCp());
     662                 :            : }
     663                 :            : 
     664                 :          0 : WW8Stream::Pointer_t WW8DocumentImpl::getDocStream() const
     665                 :            : {
     666                 :          0 :     return mpDocStream;
     667                 :            : }
     668                 :            : 
     669                 :          0 : WW8Stream::Pointer_t WW8DocumentImpl::getDataStream() const
     670                 :            : {
     671                 :          0 :     return mpDataStream;
     672                 :            : }
     673                 :            : 
     674                 :          0 : sal_uInt32 WW8DocumentImpl::getByteLength(const CpAndFc & rCpAndFc) const
     675                 :            : {
     676         [ #  # ]:          0 :     CpAndFc aEnd = getNextCp(rCpAndFc);
     677                 :            : 
     678                 :          0 :     sal_uInt32 nResult = 3;
     679                 :            : 
     680 [ #  # ][ #  # ]:          0 :     if (rCpAndFc < aEnd)
     681                 :          0 :         nResult = (aEnd - rCpAndFc) *
     682 [ #  # ][ #  # ]:          0 :             (mpPieceTable->isComplex(rCpAndFc.getCp()) ? 1 : 2);
     683                 :            : 
     684                 :          0 :     return nResult;
     685                 :            : }
     686                 :            : 
     687                 :            : WW8Stream::Sequence
     688                 :          0 : WW8DocumentImpl::getText(const CpAndFc & rStart)
     689                 :            : {
     690                 :          0 :     return mpDocStream->get(rStart.getFc().get(), getByteLength(rStart));
     691                 :            : }
     692                 :            : 
     693                 :          0 : const CpAndFc & WW8DocumentImpl::getFirstCp() const
     694                 :            : {
     695                 :          0 :     return mCpAndFcStart;
     696                 :            : }
     697                 :            : 
     698                 :          0 : const CpAndFc & WW8DocumentImpl::getLastCp() const
     699                 :            : {
     700                 :          0 :     return mCpAndFcEnd;
     701                 :            : }
     702                 :            : 
     703                 :          0 : CpAndFc WW8DocumentImpl::getDocumentEndCp() const
     704                 :            : {
     705                 :          0 :     return mDocumentEndCpAndFc;
     706                 :            : }
     707                 :            : 
     708                 :          0 : CpAndFc WW8DocumentImpl::getFootnodeEndCp() const
     709                 :            : {
     710                 :          0 :     return mFootnoteEndCpAndFc;
     711                 :            : }
     712                 :            : 
     713                 :          0 : CpAndFc WW8DocumentImpl::getHeaderEndCp() const
     714                 :            : {
     715                 :          0 :     return mHeaderEndCpAndFc;
     716                 :            : }
     717                 :            : 
     718                 :          0 : CpAndFc WW8DocumentImpl::getAnnotationEndCp() const
     719                 :            : {
     720                 :          0 :     return mAnnotationEndCpAndFc;
     721                 :            : }
     722                 :            : 
     723                 :          0 : CpAndFc WW8DocumentImpl::getEndnoteEndCp() const
     724                 :            : {
     725                 :          0 :     return mEndnoteEndCpAndFc;
     726                 :            : }
     727                 :            : 
     728                 :          0 : CpAndFc WW8DocumentImpl::getNextCp(const CpAndFc & rCpAndFc) const
     729                 :            : {
     730                 :          0 :     CpAndFc aResult = mCpAndFcEnd;
     731         [ #  # ]:          0 :     CpAndFcs::const_iterator aIt = mCpAndFcs.find(rCpAndFc);
     732                 :            : 
     733         [ #  # ]:          0 :     if (aIt != mCpAndFcs.end())
     734                 :            :     {
     735                 :          0 :         ++aIt;
     736                 :            : 
     737         [ #  # ]:          0 :         if (aIt != mCpAndFcs.end())
     738                 :          0 :             aResult = *aIt;
     739                 :            :     }
     740                 :            :     else
     741 [ #  # ][ #  # ]:          0 :         throw ExceptionNotFound("getNextCp: " + rCpAndFc.toString());
                 [ #  # ]
     742                 :            : 
     743                 :          0 :     return aResult;
     744                 :            : }
     745                 :            : 
     746                 :          0 : CpAndFc WW8DocumentImpl::getPrevCp(const CpAndFc & rCpAndFc) const
     747                 :            : {
     748                 :          0 :     CpAndFc aResult = mCpAndFcStart;
     749                 :            : 
     750         [ #  # ]:          0 :     CpAndFcs::const_iterator aIt = mCpAndFcs.find(CpAndFc(rCpAndFc));
     751                 :            : 
     752 [ #  # ][ #  # ]:          0 :     if (aIt != mCpAndFcs.end() && aIt != mCpAndFcs.begin())
         [ #  # ][ #  # ]
                 [ #  # ]
     753                 :            :     {
     754                 :          0 :         --aIt;
     755                 :            : 
     756                 :          0 :         aResult = *aIt;
     757                 :            :     }
     758                 :            :     else
     759 [ #  # ][ #  # ]:          0 :         throw ExceptionNotFound("getPrevCp: " + rCpAndFc.toString());
                 [ #  # ]
     760                 :            : 
     761                 :          0 :     return aResult;
     762                 :            : }
     763                 :            : 
     764                 :          0 : WW8FKP::Pointer_t WW8DocumentImpl::getFKP(const CpAndFc & rCpAndFc)
     765                 :            : {
     766                 :          0 :     WW8FKP::Pointer_t pResult;
     767                 :            : 
     768                 :          0 :     sal_uInt32 nPageNumber = 0;
     769                 :            : 
     770      [ #  #  # ]:          0 :     switch (rCpAndFc.getType())
     771                 :            :     {
     772                 :            :     case PROP_PAP:
     773                 :            :         {
     774                 :            :             nPageNumber =
     775         [ #  # ]:          0 :                 mpBinTablePAPX->getPageNumber(rCpAndFc.getFc());
     776                 :            : 
     777 [ #  # ][ #  # ]:          0 :             pResult = getFKPPAPX(nPageNumber, rCpAndFc.isComplex());
                 [ #  # ]
     778                 :            :         }
     779                 :          0 :         break;
     780                 :            :     case PROP_CHP:
     781                 :            :         {
     782                 :            :             nPageNumber =
     783         [ #  # ]:          0 :                 mpBinTableCHPX->getPageNumber(rCpAndFc.getFc());
     784                 :            : 
     785 [ #  # ][ #  # ]:          0 :             pResult = getFKPCHPX(nPageNumber, rCpAndFc.isComplex());
                 [ #  # ]
     786                 :            :         }
     787                 :          0 :         break;
     788                 :            :     default:
     789                 :          0 :         break;
     790                 :            :     }
     791                 :            : 
     792         [ #  # ]:          0 :     if (pResult.get() != NULL)
     793         [ #  # ]:          0 :         pResult->setDocument(this);
     794                 :            : 
     795                 :          0 :     return pResult;
     796                 :            : }
     797                 :            : 
     798                 :          0 : WW8FKP::Pointer_t WW8DocumentImpl::getFKPCHPX(sal_uInt32 nIndex,
     799                 :            :                                               bool bComplex)
     800                 :            : {
     801                 :          0 :     return mpCHPFKPCache->get(nIndex, bComplex);
     802                 :            : }
     803                 :            : 
     804                 :          0 : WW8FKP::Pointer_t WW8DocumentImpl::getFKPPAPX(sal_uInt32 nIndex,
     805                 :            :                                               bool bComplex)
     806                 :            : {
     807                 :          0 :     return mpPAPFKPCache->get(nIndex, bComplex);
     808                 :            : }
     809                 :            : 
     810                 :          0 : writerfilter::Reference<Properties>::Pointer_t WW8DocumentImpl::getProperties
     811                 :            : (const CpAndFc & rCpAndFc)
     812                 :            : {
     813                 :          0 :     writerfilter::Reference<Properties>::Pointer_t pResult;
     814                 :            : 
     815   [ #  #  #  #  :          0 :     switch (rCpAndFc.getType())
          #  #  #  #  #  
                      # ]
     816                 :            :     {
     817                 :            :     case PROP_CHP:
     818                 :            :     case PROP_PAP:
     819                 :            :         {
     820                 :            :             try
     821                 :            :             {
     822         [ #  # ]:          0 :                 WW8FKP::Pointer_t pFKP = getFKP(rCpAndFc);
     823                 :            : 
     824 [ #  # ][ #  # ]:          0 :                 pResult = pFKP->getProperties(rCpAndFc.getFc());
         [ #  # ][ #  # ]
                 [ #  # ]
     825                 :            :             }
     826         [ #  # ]:          0 :             catch (const ExceptionOutOfBounds &)
     827                 :            :             {
     828                 :            :             }
     829                 :            :         }
     830                 :            : 
     831                 :          0 :         break;
     832                 :            : 
     833                 :            :     case PROP_SEC:
     834                 :            :         {
     835                 :            :             pResult = writerfilter::Reference<Properties>::Pointer_t
     836 [ #  # ][ #  # ]:          0 :                 (getSED(rCpAndFc));
         [ #  # ][ #  # ]
     837                 :            :         }
     838                 :            : 
     839                 :          0 :         break;
     840                 :            : 
     841                 :            :     case PROP_FOOTNOTE:
     842                 :            :         {
     843                 :            :             pResult = writerfilter::Reference<Properties>::Pointer_t
     844 [ #  # ][ #  # ]:          0 :                 (mpFootnoteHelper->getRef(rCpAndFc));
         [ #  # ][ #  # ]
     845                 :            :         }
     846                 :          0 :         break;
     847                 :            : 
     848                 :            :     case PROP_ENDNOTE:
     849                 :            :         {
     850                 :            :             pResult = writerfilter::Reference<Properties>::Pointer_t
     851 [ #  # ][ #  # ]:          0 :                 (mpEndnoteHelper->getRef(rCpAndFc));
         [ #  # ][ #  # ]
     852                 :            :         }
     853                 :          0 :         break;
     854                 :            : 
     855                 :            :     case PROP_ANNOTATION:
     856                 :            :         {
     857                 :            :             pResult = writerfilter::Reference<Properties>::Pointer_t
     858 [ #  # ][ #  # ]:          0 :                 (mpAnnotationHelper->getRef(rCpAndFc));
         [ #  # ][ #  # ]
     859                 :            :         }
     860                 :          0 :         break;
     861                 :            : 
     862                 :            :     case PROP_BOOKMARKSTART:
     863                 :            :     case PROP_BOOKMARKEND:
     864                 :            :         {
     865 [ #  # ][ #  # ]:          0 :             pResult = getBookmark(rCpAndFc);
                 [ #  # ]
     866                 :            :         }
     867                 :            : 
     868                 :          0 :         break;
     869                 :            :     case PROP_FLD:
     870                 :            :         {
     871 [ #  # ][ #  # ]:          0 :             pResult = getField(rCpAndFc);
                 [ #  # ]
     872                 :            : 
     873 [ #  # ][ #  # ]:          0 :             mpFLD = mpFieldHelper->getWW8FLD(rCpAndFc);
                 [ #  # ]
     874                 :            :         }
     875                 :            : 
     876                 :          0 :         break;
     877                 :            :     case PROP_SHP:
     878                 :            :         {
     879 [ #  # ][ #  # ]:          0 :             pResult = getShape(rCpAndFc);
                 [ #  # ]
     880                 :            :         }
     881                 :          0 :         break;
     882                 :            :     case PROP_BRK:
     883                 :            :         {
     884 [ #  # ][ #  # ]:          0 :             pResult = getBreak(rCpAndFc);
                 [ #  # ]
     885                 :            :         }
     886                 :          0 :         break;
     887                 :            :     default:
     888                 :          0 :         break;
     889                 :            :     }
     890                 :            : 
     891                 :          0 :     return pResult;
     892                 :            : }
     893                 :            : 
     894                 :            : writerfilter::Reference<Stream>::Pointer_t
     895                 :          0 : WW8DocumentImpl::getSubDocument(const CpAndFc & rCpAndFc)
     896                 :            : {
     897                 :          0 :     writerfilter::Reference<Stream>::Pointer_t pResult;
     898                 :            : 
     899   [ #  #  #  # ]:          0 :     switch (rCpAndFc.getType())
     900                 :            :     {
     901                 :            :     case PROP_FOOTNOTE:
     902 [ #  # ][ #  # ]:          0 :         pResult = getFootnote(rCpAndFc);
                 [ #  # ]
     903                 :          0 :         break;
     904                 :            : 
     905                 :            :     case PROP_ENDNOTE:
     906 [ #  # ][ #  # ]:          0 :         pResult = getEndnote(rCpAndFc);
                 [ #  # ]
     907                 :          0 :         break;
     908                 :            : 
     909                 :            :     case PROP_ANNOTATION:
     910 [ #  # ][ #  # ]:          0 :         pResult = getAnnotation(rCpAndFc);
                 [ #  # ]
     911                 :          0 :         break;
     912                 :            : 
     913                 :            :     default:
     914                 :          0 :         break;
     915                 :            :     }
     916                 :            : 
     917                 :          0 :     return pResult;
     918                 :            : }
     919                 :            : 
     920                 :          0 : WW8SED * WW8DocumentImpl::getSED(const CpAndFc & rCpAndFc) const
     921                 :            : {
     922                 :          0 :     WW8SED * pResult = mpSEDs->getEntryByFc(rCpAndFc.getCp().get());
     923                 :            : 
     924                 :          0 :     pResult->setDoc(const_cast<const WW8DocumentImpl *>(this));
     925                 :            : 
     926                 :          0 :     return pResult;
     927                 :            : }
     928                 :            : 
     929                 :          0 : writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getListTplcs() const
     930                 :            : {
     931                 :          0 :     writerfilter::Reference<Table>::Pointer_t pResult;
     932                 :            : 
     933 [ #  # ][ #  # ]:          0 :     if (mpFibRgFcLcb2000.get() != NULL &&
         [ #  # ][ #  # ]
     934         [ #  # ]:          0 :         mpFibRgFcLcb2000->get_fcSttbRgtplc() != 0 &&
     935         [ #  # ]:          0 :         mpFibRgFcLcb2000->get_lcbSttbRgtplc() != 0)
     936                 :            :     {
     937                 :            :         WW8SttbRgtplc * pSttbRgtplc =
     938                 :          0 :         new WW8SttbRgtplc(*mpTableStream,
     939                 :          0 :                           mpFibRgFcLcb2000->get_fcSttbRgtplc(),
     940 [ #  # ][ #  # ]:          0 :                           mpFibRgFcLcb2000->get_lcbSttbRgtplc());
         [ #  # ][ #  # ]
     941                 :            : 
     942 [ #  # ][ #  # ]:          0 :         pResult = writerfilter::Reference<Table>::Pointer_t(pSttbRgtplc);
                 [ #  # ]
     943                 :            :     }
     944                 :            : 
     945                 :          0 :     return pResult;
     946                 :            : }
     947                 :            : 
     948                 :          0 : writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getListTable() const
     949                 :            : {
     950                 :          0 :     writerfilter::Reference<Table>::Pointer_t pResult;
     951                 :            : 
     952 [ #  # ][ #  # ]:          0 :     if (mpFib->get_fcPlcfLst() != 0 && mpFib->get_lcbPlcfLst() > 0)
                 [ #  # ]
     953                 :            :     {
     954                 :            :         try
     955                 :            :         {
     956                 :          0 :             WW8ListTable * pList = new WW8ListTable(*mpTableStream,
     957                 :          0 :                                                     mpFib->get_fcPlcfLst(),
     958                 :          0 :                                                     mpFib->get_fcPlfLfo() -
     959 [ #  # ][ #  # ]:          0 :                                                     mpFib->get_fcPlcfLst());
     960                 :            : 
     961                 :          0 :             pList->setPayloadOffset(mpFib->get_lcbPlcfLst());
     962         [ #  # ]:          0 :             pList->initPayload();
     963                 :            : 
     964 [ #  # ][ #  # ]:          0 :             pResult = writerfilter::Reference<Table>::Pointer_t(pList);
         [ #  # ][ #  # ]
     965                 :            :         }
     966         [ #  # ]:          0 :         catch (const ExceptionOutOfBounds &) {
     967                 :            :         }
     968                 :            :     }
     969                 :            : 
     970                 :          0 :     return pResult;
     971                 :            : }
     972                 :            : 
     973                 :          0 : writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getLFOTable() const
     974                 :            : {
     975                 :          0 :     writerfilter::Reference<Table>::Pointer_t pResult;
     976                 :            : 
     977 [ #  # ][ #  # ]:          0 :     if (mpFib->get_fcPlfLfo() != 0 && mpFib->get_lcbPlfLfo() > 0)
                 [ #  # ]
     978                 :            :     {
     979                 :            :         try
     980                 :            :         {
     981                 :          0 :             WW8LFOTable * pLFOs = new WW8LFOTable(*mpTableStream,
     982                 :          0 :                                                   mpFib->get_fcPlfLfo(),
     983 [ #  # ][ #  # ]:          0 :                                                   mpFib->get_lcbPlfLfo());
     984                 :            : 
     985                 :          0 :             pLFOs->setPayloadOffset(mpFib->get_lcbPlcfLst());
     986         [ #  # ]:          0 :             pLFOs->initPayload();
     987                 :            : 
     988 [ #  # ][ #  # ]:          0 :             pResult = writerfilter::Reference<Table>::Pointer_t(pLFOs);
                 [ #  # ]
     989                 :            :         }
     990   [ #  #  #  # ]:          0 :         catch (const Exception &e)
     991                 :            :         {
     992   [ #  #  #  # ]:          0 :             clog << e.getText() << endl;
     993                 :            :         }
     994                 :            :     }
     995                 :            : 
     996                 :          0 :     return pResult;
     997                 :            : }
     998                 :            : 
     999                 :          0 : writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getFontTable() const
    1000                 :            : {
    1001                 :          0 :     writerfilter::Reference<Table>::Pointer_t pResult;
    1002                 :            : 
    1003 [ #  # ][ #  # ]:          0 :     if (mpFib->get_fcSttbfffn() != 0 && mpFib->get_lcbSttbfffn() > 0)
                 [ #  # ]
    1004                 :            :     {
    1005                 :          0 :         WW8FontTable * pFonts = new WW8FontTable(*mpTableStream,
    1006                 :          0 :                                                  mpFib->get_fcSttbfffn(),
    1007 [ #  # ][ #  # ]:          0 :                                                  mpFib->get_lcbSttbfffn());
    1008                 :            : 
    1009         [ #  # ]:          0 :         pFonts->initPayload();
    1010                 :            : 
    1011 [ #  # ][ #  # ]:          0 :         pResult = writerfilter::Reference<Table>::Pointer_t(pFonts);
                 [ #  # ]
    1012                 :            :     }
    1013                 :            : 
    1014                 :          0 :     return pResult;
    1015                 :            : }
    1016                 :            : 
    1017                 :          0 : writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getStyleSheet() const
    1018                 :            : {
    1019                 :          0 :     writerfilter::Reference<Table>::Pointer_t pResult;
    1020                 :            : 
    1021         [ #  # ]:          0 :     if (mpFib->get_lcbStshf() > 0)
    1022                 :            :     {
    1023                 :          0 :         WW8StyleSheet * pStyles = new WW8StyleSheet(*mpTableStream,
    1024                 :          0 :                                                     mpFib->get_fcStshf(),
    1025 [ #  # ][ #  # ]:          0 :                                                     mpFib->get_lcbStshf());
    1026                 :            : 
    1027         [ #  # ]:          0 :         pStyles->initPayload();
    1028                 :            : 
    1029 [ #  # ][ #  # ]:          0 :         pResult = writerfilter::Reference<Table>::Pointer_t(pStyles);
                 [ #  # ]
    1030                 :            :     }
    1031                 :            : 
    1032                 :          0 :     return pResult;
    1033                 :            : }
    1034                 :            : 
    1035                 :          0 : writerfilter::Reference<Table>::Pointer_t WW8DocumentImpl::getAssocTable() const
    1036                 :            : {
    1037                 :          0 :     writerfilter::Reference<Table>::Pointer_t pResult;
    1038                 :            : 
    1039         [ #  # ]:          0 :     if (mpFib->get_lcbSttbfAssoc() > 0)
    1040                 :            :     {
    1041                 :            :         WW8Sttbf::Pointer_t pSttbfAssoc
    1042                 :          0 :             (new WW8Sttbf(*mpTableStream,
    1043                 :          0 :                           mpFib->get_fcSttbfAssoc(),
    1044 [ #  # ][ #  # ]:          0 :                           mpFib->get_lcbSttbfAssoc()));
                 [ #  # ]
    1045                 :            : 
    1046                 :            :         pResult = writerfilter::Reference<Table>::Pointer_t
    1047 [ #  # ][ #  # ]:          0 :             (new WW8SttbTableResource(pSttbfAssoc));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
    1048                 :            :     }
    1049                 :            : 
    1050                 :          0 :     return pResult;
    1051                 :            : }
    1052                 :            : 
    1053                 :          0 : sal_uInt32 WW8DocumentImpl::getHeaderCount() const
    1054                 :            : {
    1055                 :          0 :     sal_uInt32 nResult = 0;
    1056                 :          0 :     sal_uInt32 nLcbPlcfhdd = mpFib->get_lcbPlcfhdd();
    1057                 :            : 
    1058         [ #  # ]:          0 :     if (nLcbPlcfhdd > 4)
    1059                 :          0 :         nResult = (nLcbPlcfhdd / 4) - 1;
    1060                 :            : 
    1061                 :          0 :     return nResult;
    1062                 :            : }
    1063                 :            : 
    1064                 :          0 : CpAndFc WW8DocumentImpl::getHeaderCpAndFc(sal_uInt32 nPos)
    1065                 :            : {
    1066                 :          0 :     sal_uInt32 nCount = getHeaderCount();
    1067                 :            : 
    1068                 :            :     // There are getHeaderCount() + 1 entries in mpHeaderOffsets => greater
    1069         [ #  # ]:          0 :     if (nPos > nCount)
    1070 [ #  # ][ #  # ]:          0 :         throw ExceptionNotFound("getHeaderCpAndFc");
    1071                 :            : 
    1072         [ #  # ]:          0 :     if (nPos == nCount)
    1073                 :          0 :         return mHeaderEndCpAndFc;
    1074                 :            :     else
    1075                 :            :     {
    1076         [ #  # ]:          0 :         Cp aCp(getFootnodeEndCp().getCp() + mpHeaderOffsets->getU32(nPos * 4));
    1077         [ #  # ]:          0 :         Fc aFc(mpPieceTable->cp2fc(aCp));
    1078         [ #  # ]:          0 :         CpAndFc aCpAndFc(aCp, aFc, PROP_DOC);
    1079                 :            : 
    1080                 :          0 :         return aCpAndFc;
    1081                 :            :     }
    1082                 :            : 
    1083                 :            : }
    1084                 :            : 
    1085                 :          0 : writerfilter::Reference<Stream>::Pointer_t WW8DocumentImpl::getHeader(sal_uInt32 nPos)
    1086                 :            : {
    1087                 :            :     // There are getHeaderCount() headers => greater or equal
    1088 [ #  # ][ #  # ]:          0 :     if (nPos >= getHeaderCount())
    1089 [ #  # ][ #  # ]:          0 :         throw ExceptionNotFound("getHeader");
    1090                 :            : 
    1091         [ #  # ]:          0 :     writerfilter::Reference<Stream>::Pointer_t pResult;
    1092                 :            : 
    1093         [ #  # ]:          0 :     CpAndFc aCpAndFcStart(getHeaderCpAndFc(nPos));
    1094         [ #  # ]:          0 :     CpAndFc aCpAndFcEnd(getHeaderCpAndFc(nPos + 1));
    1095                 :            : 
    1096 [ #  # ][ #  # ]:          0 :     if (aCpAndFcStart < aCpAndFcEnd)
    1097                 :            :         pResult = writerfilter::Reference<Stream>::Pointer_t
    1098 [ #  # ][ #  # ]:          0 :             (new WW8DocumentImpl(*this, aCpAndFcStart, aCpAndFcEnd));
         [ #  # ][ #  # ]
                 [ #  # ]
    1099                 :            : 
    1100                 :          0 :     return pResult;
    1101                 :            : }
    1102                 :            : 
    1103                 :            : writerfilter::Reference<Stream>::Pointer_t
    1104                 :          0 : WW8DocumentImpl::getFootnote(const CpAndFc & rCpAndFc)
    1105                 :            : {
    1106                 :          0 :     writerfilter::Reference<Stream>::Pointer_t pResult;
    1107                 :            : 
    1108         [ #  # ]:          0 :     if (! bSubDocument)
    1109 [ #  # ][ #  # ]:          0 :         pResult = mpFootnoteHelper->get(rCpAndFc);
                 [ #  # ]
    1110                 :            : 
    1111                 :          0 :     return pResult;
    1112                 :            : }
    1113                 :            : 
    1114                 :            : writerfilter::Reference<Stream>::Pointer_t
    1115                 :          0 : WW8DocumentImpl::getEndnote(const CpAndFc & rCpAndFc)
    1116                 :            : {
    1117                 :          0 :     writerfilter::Reference<Stream>::Pointer_t pResult;
    1118                 :            : 
    1119         [ #  # ]:          0 :     if (! bSubDocument)
    1120 [ #  # ][ #  # ]:          0 :         pResult = mpEndnoteHelper->get(rCpAndFc);
                 [ #  # ]
    1121                 :            : 
    1122                 :          0 :     return pResult;
    1123                 :            : }
    1124                 :            : 
    1125                 :            : 
    1126                 :            : writerfilter::Reference<Stream>::Pointer_t
    1127                 :          0 : WW8DocumentImpl::getAnnotation(const CpAndFc & rCpAndFc)
    1128                 :            : {
    1129                 :          0 :     writerfilter::Reference<Stream>::Pointer_t pResult;
    1130                 :            : 
    1131         [ #  # ]:          0 :     if (! bSubDocument)
    1132 [ #  # ][ #  # ]:          0 :         pResult = mpAnnotationHelper->get(rCpAndFc);
                 [ #  # ]
    1133                 :            : 
    1134                 :          0 :     return pResult;
    1135                 :            : }
    1136                 :            : 
    1137                 :            : writerfilter::Reference<Properties>::Pointer_t
    1138                 :          0 : WW8DocumentImpl::getBookmark(const CpAndFc & rCpAndFc) const
    1139                 :            : {
    1140                 :          0 :     return mpBookmarkHelper->getBookmark(rCpAndFc);
    1141                 :            : }
    1142                 :            : 
    1143                 :            : writerfilter::Reference<Properties>::Pointer_t
    1144                 :          0 : WW8DocumentImpl::getShape(const CpAndFc & rCpAndFc) const
    1145                 :            : {
    1146                 :          0 :     return mpShapeHelper->getShape(rCpAndFc);
    1147                 :            : }
    1148                 :            : 
    1149                 :            : writerfilter::Reference<Properties>::Pointer_t
    1150                 :          0 : WW8DocumentImpl::getShape(sal_uInt32 nSpid)
    1151                 :            : {
    1152         [ #  # ]:          0 :     writerfilter::Reference<Properties>::Pointer_t pResult;
    1153         [ #  # ]:          0 :     DffRecord::Pointer_t pShape = mpDffBlock->getShape(nSpid);
    1154                 :            : 
    1155         [ #  # ]:          0 :     if (pShape.get() != NULL)
    1156                 :            :     {
    1157 [ #  # ][ #  # ]:          0 :         DffSpContainer * pTmp = new DffSpContainer(*pShape);
    1158         [ #  # ]:          0 :         pTmp->setDocument(this);
    1159                 :            : 
    1160 [ #  # ][ #  # ]:          0 :         pResult = writerfilter::Reference<Properties>::Pointer_t(pTmp);
                 [ #  # ]
    1161                 :            :     }
    1162                 :            : 
    1163         [ #  # ]:          0 :     return pResult;
    1164                 :            : }
    1165                 :            : 
    1166                 :            : writerfilter::Reference<Properties>::Pointer_t
    1167                 :          0 : WW8DocumentImpl::getBreak(const CpAndFc & rCpAndFc) const
    1168                 :            : {
    1169                 :          0 :     return mpBreakHelper->getBreak(rCpAndFc);
    1170                 :            : }
    1171                 :            : 
    1172                 :            : writerfilter::Reference<Properties>::Pointer_t
    1173                 :          0 : WW8DocumentImpl::getBlip(sal_uInt32 nBid)
    1174                 :            : {
    1175                 :          0 :     writerfilter::Reference<Properties>::Pointer_t pResult;
    1176                 :            : 
    1177         [ #  # ]:          0 :     if (mpDffBlock != NULL)
    1178                 :            :     {
    1179         [ #  # ]:          0 :         DffRecord::Pointer_t pDffRecord(mpDffBlock->getBlip(nBid));
    1180                 :            : 
    1181         [ #  # ]:          0 :         if (pDffRecord.get() != NULL)
    1182                 :            :         {
    1183 [ #  # ][ #  # ]:          0 :             DffBSE * pBlip = new DffBSE(*pDffRecord);
    1184                 :            : 
    1185         [ #  # ]:          0 :             if (pBlip != NULL)
    1186 [ #  # ][ #  # ]:          0 :             pResult = writerfilter::Reference<Properties>::Pointer_t(pBlip);
                 [ #  # ]
    1187         [ #  # ]:          0 :         }
    1188                 :            :     }
    1189                 :            : 
    1190                 :          0 :     return pResult;
    1191                 :            : }
    1192                 :            : 
    1193                 :            : writerfilter::Reference<Properties>::Pointer_t
    1194                 :          0 : WW8DocumentImpl::getField(const CpAndFc & rCpAndFc) const
    1195                 :            : {
    1196                 :          0 :     return mpFieldHelper->getField(rCpAndFc);
    1197                 :            : }
    1198                 :            : 
    1199                 :            : writerfilter::Reference<Properties>::Pointer_t
    1200                 :          0 : WW8DocumentImpl::getDocumentProperties() const
    1201                 :            : {
    1202                 :          0 :     writerfilter::Reference<Properties>::Pointer_t pResult;
    1203                 :            : 
    1204         [ #  # ]:          0 :     if (mpFib->get_lcbDop() > 0)
    1205                 :            :     {
    1206 [ #  # ][ #  # ]:          0 :         pResult.reset(new WW8DopBase(*mpTableStream, mpFib->get_fcDop(), mpFib->get_lcbDop()));
                 [ #  # ]
    1207                 :            :     }
    1208                 :            : 
    1209                 :          0 :     return pResult;
    1210                 :            : }
    1211                 :            : 
    1212                 :          0 : WW8FLD::Pointer_t WW8DocumentImpl::getCurrentFLD() const
    1213                 :            : {
    1214                 :          0 :     return mpFLD;
    1215                 :            : }
    1216                 :            : 
    1217                 :          0 : void WW8DocumentImpl::setPicLocation(sal_uInt32 fcPicLoc)
    1218                 :            : {
    1219                 :          0 :     mfcPicLoc = fcPicLoc;
    1220                 :          0 : }
    1221                 :            : 
    1222                 :          0 : bool WW8DocumentImpl::isPicData()
    1223                 :            : {
    1224                 :          0 :     return mbPicIsData;
    1225                 :            : }
    1226                 :            : 
    1227                 :          0 : void WW8DocumentImpl::setPicIsData(bool bPicIsData)
    1228                 :            : {
    1229                 :          0 :     mbPicIsData = bPicIsData;
    1230                 :          0 : }
    1231                 :            : 
    1232                 :            : writerfilter::Reference<Stream>::Pointer_t
    1233                 :          0 : WW8DocumentImpl::getTextboxText(sal_uInt32 nShpId) const
    1234                 :            : {
    1235                 :          0 :     writerfilter::Reference<Stream>::Pointer_t pResult;
    1236                 :            : 
    1237         [ #  # ]:          0 :     if (mpTextBoxStories.get() != NULL)
    1238                 :            :     {
    1239                 :          0 :         sal_uInt32 nCount = mpTextBoxStories->getEntryCount();
    1240                 :            : 
    1241                 :          0 :         sal_uInt32 n = 0;
    1242         [ #  # ]:          0 :         while (n < nCount)
    1243                 :            :         {
    1244         [ #  # ]:          0 :             WW8FTXBXS * pTextboxStory = mpTextBoxStories->getEntryPointer(n);
    1245                 :            : 
    1246 [ #  # ][ #  # ]:          0 :             if (pTextboxStory->get_lid() == nShpId)
    1247                 :          0 :                 break;
    1248                 :            : 
    1249                 :          0 :             ++n;
    1250                 :            :         }
    1251                 :            : 
    1252         [ #  # ]:          0 :         if (n < nCount)
    1253                 :            :         {
    1254         [ #  # ]:          0 :             Cp aCpStart(mpTextBoxStories->getFc(n));
    1255                 :          0 :             aCpStart += getEndnoteEndCp().getCp().get();
    1256                 :            :             CpAndFc aCpAndFcStart =
    1257         [ #  # ]:          0 :                 mpPieceTable->createCpAndFc(aCpStart, PROP_DOC);
    1258         [ #  # ]:          0 :             Cp aCpEnd(mpTextBoxStories->getFc(n + 1));
    1259                 :          0 :             aCpEnd += getEndnoteEndCp().getCp().get();
    1260         [ #  # ]:          0 :             CpAndFc aCpAndFcEnd = mpPieceTable->createCpAndFc(aCpEnd, PROP_DOC);
    1261                 :            : 
    1262                 :            :             pResult = writerfilter::Reference<Stream>::Pointer_t
    1263 [ #  # ][ #  # ]:          0 :                 (new WW8DocumentImpl(*this, aCpAndFcStart, aCpAndFcEnd));
         [ #  # ][ #  # ]
                 [ #  # ]
    1264                 :            :         }
    1265                 :            :     }
    1266                 :            : 
    1267                 :          0 :     return pResult;
    1268                 :            : }
    1269                 :            : 
    1270                 :          0 : Id lcl_headerQName(sal_uInt32 nIndex)
    1271                 :            : {
    1272                 :          0 :     Id qName = NS_rtf::LN_header;
    1273                 :            : 
    1274         [ #  # ]:          0 :     if (nIndex > 5)
    1275                 :            :     {
    1276   [ #  #  #  #  :          0 :         switch ((nIndex - 6) % 6)
                #  #  # ]
    1277                 :            :         {
    1278                 :            :         case 0:
    1279                 :          0 :             qName = NS_rtf::LN_headerl;
    1280                 :            : 
    1281                 :          0 :             break;
    1282                 :            :         case 1:
    1283                 :          0 :             qName = NS_rtf::LN_headerr;
    1284                 :            : 
    1285                 :          0 :             break;
    1286                 :            :         case 2:
    1287                 :          0 :             qName = NS_rtf::LN_footerl;
    1288                 :            : 
    1289                 :          0 :             break;
    1290                 :            :         case 3:
    1291                 :          0 :             qName = NS_rtf::LN_footerr;
    1292                 :            : 
    1293                 :          0 :             break;
    1294                 :            :         case 4:
    1295                 :          0 :             qName = NS_rtf::LN_headerf;
    1296                 :            : 
    1297                 :          0 :             break;
    1298                 :            :         case 5:
    1299                 :          0 :             qName = NS_rtf::LN_footerf;
    1300                 :            : 
    1301                 :          0 :             break;
    1302                 :            :         }
    1303                 :            :     }
    1304                 :            : 
    1305                 :          0 :     return qName;
    1306                 :            : }
    1307                 :            : 
    1308                 :          0 : Fc WW8DocumentImpl::cp2fc(const Cp & cp) const
    1309                 :            : {
    1310                 :          0 :     return mpPieceTable->cp2fc(cp);
    1311                 :            : }
    1312                 :            : 
    1313                 :          0 : CpAndFc WW8DocumentImpl::getCpAndFc(const Cp & cp, PropertyType type) const
    1314                 :            : {
    1315         [ #  # ]:          0 :     Fc aFc = cp2fc(cp);
    1316                 :            : 
    1317         [ #  # ]:          0 :     return CpAndFc(cp, aFc, type);
    1318                 :            : }
    1319                 :            : 
    1320                 :          0 : void WW8DocumentImpl::resolvePicture(Stream & rStream)
    1321                 :            : {
    1322         [ #  # ]:          0 :     WW8Stream::Pointer_t pStream = getDataStream();
    1323                 :            : 
    1324         [ #  # ]:          0 :     if (pStream.get() != NULL)
    1325                 :            :     {
    1326         [ #  # ]:          0 :         WW8StructBase aStruct(*pStream, mfcPicLoc, 4);
    1327         [ #  # ]:          0 :         sal_uInt32 nCount = aStruct.getU32(0);
    1328                 :            : 
    1329                 :            :         {
    1330 [ #  # ][ #  # ]:          0 :             WW8PICF * pPicf = new WW8PICF(*pStream, mfcPicLoc, nCount);
    1331         [ #  # ]:          0 :             pPicf->setDocument(this);
    1332                 :            : 
    1333         [ #  # ]:          0 :             writerfilter::Reference<Properties>::Pointer_t pProps(pPicf);
    1334                 :            : 
    1335 [ #  # ][ #  # ]:          0 :             rStream.props(pProps);
         [ #  # ][ #  # ]
    1336         [ #  # ]:          0 :         }
    1337         [ #  # ]:          0 :     }
    1338                 :          0 : }
    1339                 :            : 
    1340                 :          0 : void WW8DocumentImpl::resolveSpecialChar(sal_uInt32 nChar, Stream & rStream)
    1341                 :            : {
    1342         [ #  # ]:          0 :     switch (nChar)
    1343                 :            :     {
    1344                 :            :     case 0x1:
    1345                 :          0 :         resolvePicture(rStream);
    1346                 :          0 :         break;
    1347                 :            :     default:
    1348                 :          0 :         break;
    1349                 :            :     }
    1350                 :          0 : }
    1351                 :            : 
    1352                 :          0 : void WW8DocumentImpl::text(Stream & rStream, const sal_uInt8 * data, size_t len)
    1353                 :            : {
    1354                 :            : #ifdef DEBUG_ELEMENT
    1355                 :            :     OUString sText( (const sal_Char*) data, len, RTL_TEXTENCODING_MS_1252 );
    1356                 :            :     debug_logger->startElement("text");
    1357                 :            :     debug_logger->chars(OUStringToOString(sText, RTL_TEXTENCODING_ASCII_US).getStr());
    1358                 :            :     debug_logger->endElement();
    1359                 :            : #endif
    1360                 :          0 :     rStream.text(data, len);
    1361                 :          0 : }
    1362                 :            : 
    1363                 :          0 : void WW8DocumentImpl::utext(Stream & rStream, const sal_uInt8 * data, size_t len)
    1364                 :            : {
    1365                 :            : #ifdef DEBUG_ELEMENT
    1366                 :            :     debug_logger->startElement("utext");
    1367                 :            : 
    1368                 :            :     OUString sText;
    1369                 :            :     OUStringBuffer aBuffer = ::rtl:: OUStringBuffer(len);
    1370                 :            :     aBuffer.append( (const sal_Unicode *) data, len);
    1371                 :            :     sText = aBuffer.makeStringAndClear();
    1372                 :            : 
    1373                 :            :     debug_logger->chars(OUStringToOString(sText, RTL_TEXTENCODING_ASCII_US).getStr());
    1374                 :            :     debug_logger->endElement();
    1375                 :            : #endif
    1376                 :          0 :     rStream.utext(data, len);
    1377                 :          0 : }
    1378                 :            : 
    1379                 :            : 
    1380                 :          0 : void WW8DocumentImpl::resolveText(WW8DocumentIterator::Pointer_t pIt,
    1381                 :            :                                   Stream & rStream)
    1382                 :            : {
    1383         [ #  # ]:          0 :     WW8Stream::Sequence aSeq = pIt->getText();
    1384                 :            : 
    1385                 :          0 :     sal_uInt32 nCount = aSeq.getCount();
    1386         [ #  # ]:          0 :     bool bComplex = pIt->isComplex();
    1387                 :            : 
    1388                 :            :     /*
    1389                 :            :       Assumption: Special characters are always at the beginning or end of a
    1390                 :            :       run.
    1391                 :            :      */
    1392         [ #  # ]:          0 :     if (nCount > 0)
    1393                 :            :     {
    1394         [ #  # ]:          0 :         if (nCount == 1)
    1395                 :          0 :             bComplex = true;
    1396                 :            : 
    1397         [ #  # ]:          0 :         if (bComplex)
    1398                 :            :         {
    1399                 :          0 :             sal_uInt32 nStartIndex = 0;
    1400                 :          0 :             sal_uInt32 nEndIndex = nCount - 1;
    1401                 :            : 
    1402         [ #  # ]:          0 :             sal_uInt32 nCharFirst = aSeq[0];
    1403         [ #  # ]:          0 :             sal_uInt32 nCharLast = aSeq[nEndIndex];
    1404                 :            : 
    1405         [ #  # ]:          0 :             if (isSpecial(nCharFirst))
    1406                 :            :             {
    1407                 :          0 :                 nStartIndex += 1;
    1408         [ #  # ]:          0 :                 resolveSpecialChar(nCharFirst, rStream);
    1409 [ #  # ][ #  # ]:          0 :                 text(rStream, &aSeq[0], 1);
    1410                 :            :             }
    1411                 :            : 
    1412         [ #  # ]:          0 :             if (!isSpecial(nCharLast))
    1413                 :          0 :                 nEndIndex += 1;
    1414                 :            : 
    1415         [ #  # ]:          0 :             if (nStartIndex < nEndIndex)
    1416                 :            :             {
    1417                 :          0 :                 sal_uInt32 nChars = nEndIndex - nStartIndex;
    1418 [ #  # ][ #  # ]:          0 :                 text(rStream, &aSeq[nStartIndex], nChars);
    1419                 :            : 
    1420         [ #  # ]:          0 :                 if (isSpecial(nCharLast))
    1421                 :            :                 {
    1422         [ #  # ]:          0 :                     resolveSpecialChar(nCharLast, rStream);
    1423 [ #  # ][ #  # ]:          0 :                     text(rStream, &aSeq[nEndIndex], 1);
    1424                 :            :                 }
    1425                 :            :             }
    1426                 :            :         }
    1427                 :            :         else
    1428                 :            :         {
    1429                 :          0 :             sal_uInt32 nStartIndex = 0;
    1430                 :          0 :             sal_uInt32 nEndIndex = nCount - 2;
    1431                 :            : 
    1432 [ #  # ][ #  # ]:          0 :             sal_uInt32 nCharFirst = aSeq[0] + (aSeq[1] << 8);
    1433 [ #  # ][ #  # ]:          0 :             sal_uInt32 nCharLast = aSeq[nEndIndex] + (aSeq[nEndIndex + 1]);
    1434                 :            : 
    1435         [ #  # ]:          0 :             if (isSpecial(nCharFirst))
    1436                 :            :             {
    1437                 :          0 :                 nStartIndex += 2;
    1438         [ #  # ]:          0 :                 resolveSpecialChar(nCharFirst, rStream);
    1439 [ #  # ][ #  # ]:          0 :                 utext(rStream, &aSeq[0], 1);
    1440                 :            :             }
    1441                 :            : 
    1442         [ #  # ]:          0 :             if (!isSpecial(nCharLast))
    1443                 :          0 :                 nEndIndex += 2;
    1444                 :            : 
    1445         [ #  # ]:          0 :             if (nStartIndex < nEndIndex)
    1446                 :            :             {
    1447                 :          0 :                 sal_uInt32 nChars = (nEndIndex - nStartIndex) / 2;
    1448 [ #  # ][ #  # ]:          0 :                 utext(rStream, &aSeq[nStartIndex], nChars);
    1449                 :            : 
    1450         [ #  # ]:          0 :                 if (isSpecial(nCharLast))
    1451                 :            :                 {
    1452         [ #  # ]:          0 :                     resolveSpecialChar(nCharLast, rStream);
    1453 [ #  # ][ #  # ]:          0 :                     utext(rStream, &aSeq[nEndIndex], 1);
    1454                 :            :                 }
    1455                 :            :             }
    1456                 :            :         }
    1457         [ #  # ]:          0 :     }
    1458                 :          0 : }
    1459                 :            : 
    1460                 :          0 : void WW8DocumentImpl::startCharacterGroup(Stream & rStream)
    1461                 :            : {
    1462         [ #  # ]:          0 :     if (mbInCharacterGroup)
    1463                 :          0 :         endCharacterGroup(rStream);
    1464                 :            : 
    1465                 :            : #ifdef DEBUG_ELEMENT
    1466                 :            :     debug_logger->startElement("charactergroup");
    1467                 :            : #endif
    1468                 :            : 
    1469                 :          0 :     rStream.startCharacterGroup();
    1470                 :          0 :     mbInCharacterGroup = true;
    1471                 :          0 : }
    1472                 :            : 
    1473                 :          0 : void WW8DocumentImpl::endCharacterGroup(Stream & rStream)
    1474                 :            : {
    1475                 :            : #ifdef DEBUG_ELEMENT
    1476                 :            :     debug_logger->endElement();
    1477                 :            : #endif
    1478                 :            : 
    1479                 :          0 :     rStream.endCharacterGroup();
    1480                 :          0 :     mbInCharacterGroup = false;
    1481                 :          0 : }
    1482                 :            : 
    1483                 :          0 : void WW8DocumentImpl::startParagraphGroup(Stream & rStream)
    1484                 :            : {
    1485         [ #  # ]:          0 :     if (mbInParagraphGroup)
    1486                 :          0 :         endParagraphGroup(rStream);
    1487                 :            : 
    1488                 :            : #ifdef DEBUG_ELEMENT
    1489                 :            :     debug_logger->startElement("paragraphgroup");
    1490                 :            : #endif
    1491                 :            : 
    1492                 :          0 :     rStream.startParagraphGroup();
    1493                 :          0 :     mbInParagraphGroup = true;
    1494                 :          0 : }
    1495                 :            : 
    1496                 :          0 : void WW8DocumentImpl::endParagraphGroup(Stream & rStream)
    1497                 :            : {
    1498         [ #  # ]:          0 :     if (mbInCharacterGroup)
    1499                 :          0 :         endCharacterGroup(rStream);
    1500                 :            : 
    1501                 :            : #ifdef DEBUG_ELEMENT
    1502                 :            :     debug_logger->endElement();
    1503                 :            : #endif
    1504                 :          0 :     rStream.endParagraphGroup();
    1505                 :          0 :     mbInParagraphGroup = false;
    1506                 :          0 : }
    1507                 :            : 
    1508                 :          0 : void WW8DocumentImpl::startSectionGroup(Stream & rStream)
    1509                 :            : {
    1510         [ #  # ]:          0 :     if (mbInSection)
    1511                 :          0 :         endSectionGroup(rStream);
    1512                 :            : 
    1513                 :            : #ifdef DEBUG_ELEMENT
    1514                 :            :     debug_logger->startElement("sectiongroup");
    1515                 :            : #endif
    1516                 :            : 
    1517                 :          0 :     rStream.startSectionGroup();
    1518                 :          0 :     mbInSection = true;
    1519                 :          0 : }
    1520                 :            : 
    1521                 :          0 : void WW8DocumentImpl::endSectionGroup(Stream & rStream)
    1522                 :            : {
    1523         [ #  # ]:          0 :     if (mbInParagraphGroup)
    1524                 :          0 :         endParagraphGroup(rStream);
    1525                 :            : 
    1526                 :            : #ifdef DEBUG_ELEMENT
    1527                 :            :     debug_logger->endElement();
    1528                 :            : #endif
    1529                 :          0 :     rStream.endSectionGroup();
    1530                 :          0 :     mbInSection = false;
    1531                 :          0 : }
    1532                 :            : 
    1533                 :          0 : void WW8DocumentImpl::resolve(Stream & rStream)
    1534                 :            : {
    1535         [ #  # ]:          0 :     if (! bSubDocument)
    1536                 :            :     {
    1537 [ #  # ][ #  # ]:          0 :         output.addItem("<substream-names>");
    1538 [ #  # ][ #  # ]:          0 :         output.addItem(mpStream->getSubStreamNames());
    1539 [ #  # ][ #  # ]:          0 :         output.addItem("</substream-names>");
    1540                 :            : 
    1541         [ #  # ]:          0 :         if (mpDocStream.get() != NULL)
    1542                 :            :         {
    1543         [ #  # ]:          0 :             mpDocStream->dump(output);
    1544                 :            :         }
    1545                 :            : 
    1546         [ #  # ]:          0 :         if (mpSummaryInformationStream.get() != NULL)
    1547                 :            :         {
    1548         [ #  # ]:          0 :             mpSummaryInformationStream->dump(output);
    1549                 :            :         }
    1550                 :            : 
    1551                 :            :         writerfilter::Reference<Properties>::Pointer_t pFib
    1552 [ #  # ][ #  # ]:          0 :             (new WW8Fib(*mpFib));
                 [ #  # ]
    1553 [ #  # ][ #  # ]:          0 :         rStream.props(pFib);
                 [ #  # ]
    1554                 :            : 
    1555         [ #  # ]:          0 :         if (mpFibRgFcLcb2000.get() != NULL)
    1556                 :            :         {
    1557                 :            :             writerfilter::Reference<Properties>::Pointer_t pFibRgFcLcb2000
    1558 [ #  # ][ #  # ]:          0 :             (new WW8FibRgFcLcb2000(*mpFibRgFcLcb2000));
                 [ #  # ]
    1559 [ #  # ][ #  # ]:          0 :             rStream.props(pFibRgFcLcb2000);
         [ #  # ][ #  # ]
    1560                 :            :         }
    1561                 :            : 
    1562         [ #  # ]:          0 :         if (mpFib->get_lcbPlcftxbxBkd() > 0)
    1563                 :            :         {
    1564                 :          0 :             PLCF<WW8BKD> aPLCF(*mpTableStream,
    1565                 :          0 :                                mpFib->get_fcPlcftxbxBkd(),
    1566 [ #  # ][ #  # ]:          0 :                                mpFib->get_lcbPlcftxbxBkd());
    1567                 :            :         }
    1568                 :            : 
    1569         [ #  # ]:          0 :         if (mpDffBlock.get() != NULL)
    1570                 :            :         {
    1571 [ #  # ][ #  # ]:          0 :             DffBlock * pTmp = new DffBlock(*mpDffBlock);
    1572                 :            :             writerfilter::Reference<Properties>::Pointer_t pDffBlock =
    1573         [ #  # ]:          0 :                 writerfilter::Reference<Properties>::Pointer_t(pTmp);
    1574                 :            : 
    1575 [ #  # ][ #  # ]:          0 :             rStream.props(pDffBlock);
         [ #  # ][ #  # ]
    1576                 :            :         }
    1577                 :            : 
    1578                 :            :         {
    1579 [ #  # ][ #  # ]:          0 :             rStream.info("headers");
    1580         [ #  # ]:          0 :             sal_uInt32 nHeaderCount = getHeaderCount();
    1581         [ #  # ]:          0 :             for (sal_uInt32 n = 0; n < nHeaderCount; ++n)
    1582                 :            :             {
    1583 [ #  # ][ #  # ]:          0 :                 rStream.info(getHeaderCpAndFc(n).toString());
                 [ #  # ]
    1584                 :            :             }
    1585 [ #  # ][ #  # ]:          0 :             rStream.info("/headers");
    1586                 :            :         }
    1587                 :            : 
    1588         [ #  # ]:          0 :         writerfilter::Reference<Table>::Pointer_t pSttbRgtplc = getListTplcs();
    1589                 :            : 
    1590         [ #  # ]:          0 :         if (pSttbRgtplc.get() != NULL)
    1591 [ #  # ][ #  # ]:          0 :             rStream.table(NS_rtf::LN_SttbRgtplc, pSttbRgtplc);
                 [ #  # ]
    1592                 :            : 
    1593         [ #  # ]:          0 :         writerfilter::Reference<Table>::Pointer_t pFontTable = getFontTable();
    1594                 :            : 
    1595         [ #  # ]:          0 :         if (pFontTable.get() != NULL)
    1596 [ #  # ][ #  # ]:          0 :             rStream.table(NS_rtf::LN_FONTTABLE, pFontTable);
                 [ #  # ]
    1597                 :            : 
    1598                 :            :         try
    1599                 :            :         {
    1600         [ #  # ]:          0 :             writerfilter::Reference<Table>::Pointer_t pStyleSheet = getStyleSheet();
    1601                 :            : 
    1602         [ #  # ]:          0 :             if (pStyleSheet.get() != NULL)
    1603 [ #  # ][ #  # ]:          0 :                 rStream.table(NS_rtf::LN_STYLESHEET, pStyleSheet);
         [ #  # ][ #  # ]
    1604                 :            :         }
    1605   [ #  #  #  # ]:          0 :         catch (const Exception &e)
    1606                 :            :         {
    1607   [ #  #  #  # ]:          0 :             clog << e.getText() << endl;
    1608                 :            :         }
    1609                 :            : 
    1610         [ #  # ]:          0 :         writerfilter::Reference<Table>::Pointer_t pAssocTable = getAssocTable();
    1611                 :            : 
    1612         [ #  # ]:          0 :         if (pAssocTable.get() != NULL)
    1613 [ #  # ][ #  # ]:          0 :             rStream.table(NS_rtf::LN_SttbAssoc, pAssocTable);
                 [ #  # ]
    1614                 :            : 
    1615         [ #  # ]:          0 :         writerfilter::Reference<Table>::Pointer_t pListTable = getListTable();
    1616                 :            : 
    1617         [ #  # ]:          0 :         if (pListTable.get() != NULL)
    1618 [ #  # ][ #  # ]:          0 :             rStream.table(NS_rtf::LN_LISTTABLE, pListTable);
                 [ #  # ]
    1619                 :            : 
    1620         [ #  # ]:          0 :         writerfilter::Reference<Table>::Pointer_t pLFOTable = getLFOTable();
    1621                 :            : 
    1622         [ #  # ]:          0 :         if (pLFOTable.get() != NULL)
    1623 [ #  # ][ #  # ]:          0 :             rStream.table(NS_rtf::LN_LFOTABLE, pLFOTable);
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    1624                 :            :     }
    1625                 :            : 
    1626         [ #  # ]:          0 :     WW8DocumentIterator::Pointer_t pIt = begin();
    1627         [ #  # ]:          0 :     WW8DocumentIterator::Pointer_t pItEnd = end();
    1628                 :            : 
    1629                 :          0 :     mbInParagraphGroup = false;
    1630                 :          0 :     mbInCharacterGroup = false;
    1631                 :          0 :     mbInSection = false;
    1632                 :            : 
    1633                 :          0 :     sal_uInt32 nSectionIndex = 0;
    1634                 :            : 
    1635 [ #  # ][ #  # ]:          0 :     rStream.info(pIt->toString());
    1636 [ #  # ][ #  # ]:          0 :     rStream.info(pItEnd->toString());
    1637                 :            : 
    1638 [ #  # ][ #  # ]:          0 :     while (! pIt->equal(*pItEnd))
    1639                 :            :     {
    1640                 :            :         writerfilter::Reference<Properties>::Pointer_t
    1641         [ #  # ]:          0 :             pProperties(pIt->getProperties());
    1642                 :            : 
    1643 [ #  # ][ #  #  :          0 :         switch (pIt->getPropertyType())
             #  #  #  #  
                      # ]
    1644                 :            :         {
    1645                 :            :         case PROP_FOOTNOTE:
    1646                 :            :             {
    1647 [ #  # ][ #  # ]:          0 :                 rStream.info(pIt->toString());
    1648                 :            :                 writerfilter::Reference<Stream>::Pointer_t
    1649         [ #  # ]:          0 :                     pFootnote(pIt->getSubDocument());
    1650                 :            : 
    1651         [ #  # ]:          0 :                 if (pFootnote.get() != NULL)
    1652                 :            :                 {
    1653                 :            : #ifdef DEBUG_ELEMENT
    1654                 :            :                     debug_logger->startElement("substream");
    1655                 :            : #endif
    1656 [ #  # ][ #  # ]:          0 :                     rStream.substream(NS_rtf::LN_footnote, pFootnote);
                 [ #  # ]
    1657                 :            : #ifdef DEBUG_ELEMENT
    1658                 :            :                     debug_logger->endElement();
    1659                 :            : #endif
    1660         [ #  # ]:          0 :                 }
    1661                 :            :             }
    1662                 :          0 :             break;
    1663                 :            :         case PROP_ENDNOTE:
    1664                 :            :             {
    1665 [ #  # ][ #  # ]:          0 :                 rStream.info(pIt->toString());
    1666                 :            :                 writerfilter::Reference<Stream>::Pointer_t
    1667         [ #  # ]:          0 :                     pEndnote(pIt->getSubDocument());
    1668                 :            : 
    1669         [ #  # ]:          0 :                 if (pEndnote.get() != NULL)
    1670                 :            :                 {
    1671                 :            : #ifdef DEBUG_ELEMENT
    1672                 :            :                     debug_logger->startElement("substream");
    1673                 :            : #endif
    1674 [ #  # ][ #  # ]:          0 :                     rStream.substream(NS_rtf::LN_endnote, pEndnote);
                 [ #  # ]
    1675                 :            : #ifdef DEBUG_ELEMENT
    1676                 :            :                     debug_logger->endElement();
    1677                 :            : #endif
    1678         [ #  # ]:          0 :                 }
    1679                 :            :             }
    1680                 :          0 :             break;
    1681                 :            :         case PROP_ANNOTATION:
    1682                 :            :             {
    1683 [ #  # ][ #  # ]:          0 :                 rStream.info(pIt->toString());
    1684                 :            :                 writerfilter::Reference<Stream>::Pointer_t
    1685         [ #  # ]:          0 :                     pAnnotation(pIt->getSubDocument());
    1686                 :            : 
    1687         [ #  # ]:          0 :                 if (pAnnotation.get() != NULL)
    1688                 :            :                 {
    1689                 :            : #ifdef DEBUG_ELEMENT
    1690                 :            :                     debug_logger->startElement("substream");
    1691                 :            : #endif
    1692 [ #  # ][ #  # ]:          0 :                     rStream.substream(NS_rtf::LN_annotation, pAnnotation);
                 [ #  # ]
    1693                 :            : #ifdef DEBUG_ELEMENT
    1694                 :            :                     debug_logger->endElement();
    1695                 :            : #endif
    1696         [ #  # ]:          0 :                 }
    1697                 :            :             }
    1698                 :          0 :             break;
    1699                 :            :         case PROP_CHP:
    1700                 :            :             {
    1701         [ #  # ]:          0 :                 startCharacterGroup(rStream);
    1702                 :            :             }
    1703                 :            : 
    1704                 :          0 :             break;
    1705                 :            :         case PROP_PAP:
    1706                 :            :             {
    1707         [ #  # ]:          0 :                 startParagraphGroup(rStream);
    1708 [ #  # ][ #  # ]:          0 :                 rStream.info(pIt->toString());
    1709                 :            :             }
    1710                 :            : 
    1711                 :          0 :             break;
    1712                 :            :         case PROP_SEC:
    1713                 :            :             {
    1714         [ #  # ]:          0 :                 startSectionGroup(rStream);
    1715 [ #  # ][ #  # ]:          0 :                 rStream.info(pIt->toString());
    1716                 :            : 
    1717         [ #  # ]:          0 :                 if (nSectionIndex == 0)
    1718 [ #  # ][ #  # ]:          0 :                     rStream.props(getDocumentProperties());
                 [ #  # ]
    1719                 :            : 
    1720                 :          0 :                 sal_uInt32 nHeaderStartIndex = 6 + nSectionIndex * 6;
    1721                 :          0 :                 sal_uInt32 nHeaderEndIndex = nHeaderStartIndex + 6;
    1722                 :            : 
    1723 [ #  # ][ #  # ]:          0 :                 if (nHeaderStartIndex >= getHeaderCount())
    1724         [ #  # ]:          0 :                     nHeaderStartIndex = getHeaderCount();
    1725                 :            : 
    1726 [ #  # ][ #  # ]:          0 :                 if (nHeaderEndIndex >= getHeaderCount())
    1727         [ #  # ]:          0 :                     nHeaderEndIndex = getHeaderCount();
    1728                 :            : 
    1729         [ #  # ]:          0 :                 for (sal_uInt32 n = nHeaderStartIndex; n < nHeaderEndIndex; ++n)
    1730                 :            :                 {
    1731                 :            :                     writerfilter::Reference<Stream>::Pointer_t
    1732         [ #  # ]:          0 :                         pHeader(getHeader(n));
    1733                 :            : 
    1734                 :          0 :                     Id qName = lcl_headerQName(n);
    1735                 :            : 
    1736         [ #  # ]:          0 :                     if (pHeader.get() != NULL)
    1737 [ #  # ][ #  # ]:          0 :                         rStream.substream(qName, pHeader);
                 [ #  # ]
    1738         [ #  # ]:          0 :                 }
    1739                 :            : 
    1740                 :          0 :                 ++nSectionIndex;
    1741                 :            :             }
    1742                 :            : 
    1743                 :          0 :             break;
    1744                 :            :         default:
    1745 [ #  # ][ #  # ]:          0 :             rStream.info(pIt->toString());
    1746                 :            :         }
    1747                 :            : 
    1748         [ #  # ]:          0 :         if (pProperties.get() != NULL)
    1749                 :            :         {
    1750                 :            : #ifdef DEBUG_PROPERTIES
    1751                 :            :             debug_logger->propertySet(pProperties,
    1752                 :            :                     IdToString::Pointer_t(new WW8IdToString()));
    1753                 :            : #endif
    1754                 :            : 
    1755 [ #  # ][ #  # ]:          0 :             rStream.props(pProperties);
                 [ #  # ]
    1756                 :            :         }
    1757                 :            : 
    1758 [ #  # ][ #  # ]:          0 :         if (pIt->getPropertyType() == PROP_PAP)
    1759                 :            :         {
    1760         [ #  # ]:          0 :             startCharacterGroup(rStream);
    1761                 :            :         }
    1762                 :            : 
    1763 [ #  # ][ #  # ]:          0 :         resolveText(pIt, rStream);
                 [ #  # ]
    1764                 :            : 
    1765         [ #  # ]:          0 :         ++(*pIt);
    1766         [ #  # ]:          0 :     }
    1767                 :            : 
    1768         [ #  # ]:          0 :     if (mbInCharacterGroup)
    1769         [ #  # ]:          0 :         endCharacterGroup(rStream);
    1770                 :            : 
    1771         [ #  # ]:          0 :     if (mbInParagraphGroup)
    1772         [ #  # ]:          0 :         endParagraphGroup(rStream);
    1773                 :            : 
    1774         [ #  # ]:          0 :     if (mbInSection)
    1775 [ #  # ][ #  # ]:          0 :         endSectionGroup(rStream);
                 [ #  # ]
    1776                 :            : 
    1777                 :          0 : }
    1778                 :            : 
    1779                 :            : WW8Stream::Pointer_t
    1780                 :          0 : WW8DocumentFactory::createStream(uno::Reference<uno::XComponentContext> rContext,
    1781                 :            :                                  uno::Reference<io::XInputStream> rStream)
    1782                 :            : {
    1783 [ #  # ][ #  # ]:          0 :     return WW8Stream::Pointer_t(new WW8StreamImpl(rContext, rStream));
                 [ #  # ]
    1784                 :            : }
    1785                 :            : 
    1786                 :            : WW8Document *
    1787                 :          0 : WW8DocumentFactory::createDocument(WW8Stream::Pointer_t rpStream)
    1788                 :            : {
    1789 [ #  # ][ #  # ]:          0 :     return new WW8DocumentImpl(rpStream);
    1790                 :            : }
    1791                 :            : 
    1792                 :            : writerfilter::Reference<Properties>::Pointer_t
    1793                 :          0 : WW8SED::get_sepx()
    1794                 :            : {
    1795                 :          0 :     writerfilter::Reference<Properties>::Pointer_t pResult;
    1796                 :            : 
    1797 [ #  # ][ #  # ]:          0 :     if (get_fcSepx() != 0xffffffff)
    1798                 :            :     {
    1799 [ #  # ][ #  # ]:          0 :         WW8StructBase aTmp(*mpDoc->getDocStream(), get_fcSepx(), 2);
         [ #  # ][ #  # ]
    1800                 :            :         pResult = writerfilter::Reference<Properties>::Pointer_t
    1801                 :            :             (new WW8PropertySetImpl
    1802   [ #  #  #  # ]:          0 :              (*mpDoc->getDocStream(), get_fcSepx() + 2,
                 [ #  # ]
    1803 [ #  # ][ #  # ]:          0 :               (sal_uInt32) aTmp.getU16(0), false));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    1804                 :            :     }
    1805                 :            : 
    1806                 :          0 :     return pResult;
    1807                 :            : }
    1808                 :            : 
    1809                 :          0 : void WW8DocumentImpl::insertCpAndFc(const CpAndFc & rCpAndFc)
    1810                 :            : {
    1811                 :          0 :     mCpAndFcs.insert(rCpAndFc);
    1812                 :          0 : }
    1813                 :            : 
    1814                 :          0 : string propertyTypeToString(PropertyType nType)
    1815                 :            : {
    1816                 :          0 :     string result;
    1817                 :            : 
    1818   [ #  #  #  #  :          0 :     switch (nType)
          #  #  #  #  #  
                #  #  # ]
    1819                 :            :     {
    1820                 :            :     case PROP_SHP:
    1821         [ #  # ]:          0 :         result = "SHP";
    1822                 :            : 
    1823                 :          0 :         break;
    1824                 :            :     case PROP_FLD:
    1825         [ #  # ]:          0 :         result = "FLD";
    1826                 :            : 
    1827                 :          0 :         break;
    1828                 :            :     case PROP_BOOKMARKSTART:
    1829         [ #  # ]:          0 :         result = "BOOKMARKSTART";
    1830                 :            : 
    1831                 :          0 :         break;
    1832                 :            :     case PROP_BOOKMARKEND:
    1833         [ #  # ]:          0 :         result = "BOOKMARKEND";
    1834                 :            : 
    1835                 :          0 :         break;
    1836                 :            :     case PROP_ENDNOTE:
    1837         [ #  # ]:          0 :         result = "ENDNOTE";
    1838                 :            : 
    1839                 :          0 :         break;
    1840                 :            :     case PROP_FOOTNOTE:
    1841         [ #  # ]:          0 :         result = "FOOTNOTE";
    1842                 :            : 
    1843                 :          0 :         break;
    1844                 :            :     case PROP_ANNOTATION:
    1845         [ #  # ]:          0 :         result = "ANNOTATION";
    1846                 :            : 
    1847                 :          0 :         break;
    1848                 :            :     case PROP_DOC:
    1849         [ #  # ]:          0 :         result = "DOC";
    1850                 :            : 
    1851                 :          0 :         break;
    1852                 :            : 
    1853                 :            :     case PROP_SEC:
    1854         [ #  # ]:          0 :         result = "SEC";
    1855                 :            : 
    1856                 :          0 :         break;
    1857                 :            : 
    1858                 :            :     case PROP_PAP:
    1859         [ #  # ]:          0 :         result = "PAP";
    1860                 :            : 
    1861                 :          0 :         break;
    1862                 :            : 
    1863                 :            :     case PROP_CHP:
    1864         [ #  # ]:          0 :         result = "CHP";
    1865                 :            : 
    1866                 :          0 :         break;
    1867                 :            :     default:
    1868                 :          0 :         break;
    1869                 :            :     }
    1870                 :            : 
    1871                 :          0 :     return result;
    1872                 :            : }
    1873                 :            : 
    1874                 :          0 : string CpAndFc::toString() const
    1875                 :            : {
    1876                 :          0 :     string result;
    1877                 :            : 
    1878         [ #  # ]:          0 :     result += "(";
    1879 [ #  # ][ #  # ]:          0 :     result += getCp().toString();
    1880         [ #  # ]:          0 :     result += ", ";
    1881 [ #  # ][ #  # ]:          0 :     result += getFc().toString();
    1882         [ #  # ]:          0 :     result += ", ";
    1883                 :            : 
    1884 [ #  # ][ #  # ]:          0 :     result += propertyTypeToString(getType());
    1885                 :            : 
    1886         [ #  # ]:          0 :     result += ")";
    1887                 :            : 
    1888                 :          0 :     return result;
    1889                 :            : }
    1890                 :            : 
    1891                 :            : 
    1892                 :            : // Bookmark
    1893                 :            : 
    1894                 :          0 : Bookmark::Bookmark(writerfilter::Reference<Properties>::Pointer_t pBKF,
    1895                 :            :                    OUString & rName)
    1896         [ #  # ]:          0 : : mpBKF(pBKF), mName(rName)
    1897                 :            : {
    1898                 :          0 : }
    1899                 :            : 
    1900                 :          0 : void Bookmark::resolve(Properties & rHandler)
    1901                 :            : {
    1902         [ #  # ]:          0 :     mpBKF->resolve(rHandler);
    1903                 :            : 
    1904 [ #  # ][ #  # ]:          0 :     WW8Value::Pointer_t pValue = createValue(mName);
    1905 [ #  # ][ #  # ]:          0 :     rHandler.attribute(NS_rtf::LN_BOOKMARKNAME, *pValue);
    1906                 :          0 : }
    1907                 :            : 
    1908                 :          0 : string Bookmark::getType() const
    1909                 :            : {
    1910         [ #  # ]:          0 :     return "Bookmark";
    1911                 :            : }
    1912                 :            : 
    1913                 :            : // BookmarkHelper
    1914                 :            : 
    1915                 :          0 : CpAndFc BookmarkHelper::getStartCpAndFc(sal_uInt32 nPos)
    1916                 :            : {
    1917         [ #  # ]:          0 :     Cp aCp(mpStartCps->getFc(nPos));
    1918         [ #  # ]:          0 :     Fc aFc(mpPieceTable->cp2fc(aCp));
    1919         [ #  # ]:          0 :     CpAndFc aCpAndFc(aCp, aFc, PROP_BOOKMARKSTART);
    1920                 :            : 
    1921                 :          0 :     return aCpAndFc;
    1922                 :            : }
    1923                 :            : 
    1924                 :          0 : CpAndFc BookmarkHelper::getEndCpAndFc(sal_uInt32 nPos)
    1925                 :            : {
    1926         [ #  # ]:          0 :     Cp aCp(mpEndCps->getU32(nPos * 4));
    1927         [ #  # ]:          0 :     Fc aFc(mpPieceTable->cp2fc(aCp));
    1928         [ #  # ]:          0 :     CpAndFc aCpAndFc(aCp, aFc, PROP_BOOKMARKEND);
    1929                 :            : 
    1930                 :          0 :     return aCpAndFc;
    1931                 :            : }
    1932                 :            : 
    1933                 :          0 : OUString BookmarkHelper::getName(sal_uInt32 nPos)
    1934                 :            : {
    1935                 :          0 :     return mpNames->getEntry(nPos);
    1936                 :            : }
    1937                 :            : 
    1938                 :          0 : sal_uInt32 BookmarkHelper::getIndex(const CpAndFc & rCpAndFc)
    1939                 :            : {
    1940                 :          0 :     sal_uInt32 nResult = mpStartCps->getEntryCount();
    1941                 :            : 
    1942                 :          0 :     sal_uInt32 nCp = rCpAndFc.getCp().get();
    1943                 :            : 
    1944                 :            :     sal_uInt32 n;
    1945      [ #  #  # ]:          0 :     switch (rCpAndFc.getType())
    1946                 :            :     {
    1947                 :            :     case PROP_BOOKMARKSTART:
    1948                 :            :         {
    1949                 :          0 :             sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
    1950                 :            : 
    1951         [ #  # ]:          0 :             for (n = 0; n < nStartsCount; ++n)
    1952                 :            :             {
    1953         [ #  # ]:          0 :                 if (nCp == mpStartCps->getFc(n))
    1954                 :            :                 {
    1955                 :          0 :                     nResult = n;
    1956                 :            : 
    1957                 :          0 :                     break;
    1958                 :            :                 }
    1959                 :            :             }
    1960                 :            : 
    1961         [ #  # ]:          0 :             if (n == nStartsCount)
    1962 [ #  # ][ #  # ]:          0 :                 throw ExceptionNotFound("BookmarkHelper::getIndex");
    1963                 :            :         }
    1964                 :            : 
    1965                 :          0 :         break;
    1966                 :            : 
    1967                 :            :     case PROP_BOOKMARKEND:
    1968                 :            :         {
    1969                 :          0 :             sal_uInt32 nEndsCount = mpEndCps->getCount() / 4;
    1970                 :          0 :             sal_uInt32 nIndex = nEndsCount;
    1971                 :            : 
    1972         [ #  # ]:          0 :             for (n = 0; n < nEndsCount; ++n)
    1973                 :            :             {
    1974         [ #  # ]:          0 :                 if (nCp == mpEndCps->getU16(n * 4))
    1975                 :            :                 {
    1976                 :          0 :                     nIndex = n;
    1977                 :            : 
    1978                 :          0 :                     break;
    1979                 :            :                 }
    1980                 :            :             }
    1981                 :            : 
    1982         [ #  # ]:          0 :             if (n == nEndsCount)
    1983 [ #  # ][ #  # ]:          0 :                 throw ExceptionNotFound("BookmarkHelper::getIndex");
    1984                 :            : 
    1985                 :            :             {
    1986                 :            :                 {
    1987                 :          0 :                     sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
    1988         [ #  # ]:          0 :                     for (n = 0; n < nStartsCount; ++n)
    1989                 :            :                     {
    1990         [ #  # ]:          0 :                         WW8BKF::Pointer_t pBKF(mpStartCps->getEntry(n));
    1991                 :            : 
    1992   [ #  #  #  # ]:          0 :                         if (pBKF->get_ibkl() ==
    1993                 :          0 :                             sal::static_int_cast<sal_Int32>(nIndex))
    1994                 :            :                         {
    1995                 :          0 :                             nResult = n;
    1996                 :            : 
    1997                 :            :                             break;
    1998                 :            :                         }
    1999 [ #  # ][ #  # ]:          0 :                     }
    2000                 :            : 
    2001         [ #  # ]:          0 :                     if (n == nStartsCount)
    2002 [ #  # ][ #  # ]:          0 :                         throw ExceptionNotFound("BookmarkHelper::getIndex");
    2003                 :            :                 }
    2004                 :            :             }
    2005                 :            :         }
    2006                 :            : 
    2007                 :          0 :         break;
    2008                 :            :     default:
    2009                 :          0 :         break;
    2010                 :            :     }
    2011                 :            : 
    2012                 :          0 :     return nResult;
    2013                 :            : }
    2014                 :            : 
    2015                 :          0 : void BookmarkHelper::init()
    2016                 :            : {
    2017                 :            :     {
    2018                 :          0 :         sal_uInt32 nStartsCount = mpStartCps->getEntryCount();
    2019                 :            : 
    2020         [ #  # ]:          0 :         for (sal_uInt32 n = 0; n < nStartsCount; ++n)
    2021         [ #  # ]:          0 :             mpDoc->insertCpAndFc(getStartCpAndFc(n));
    2022                 :            :     }
    2023                 :            : 
    2024                 :            :     {
    2025                 :          0 :         sal_uInt32 nEndsCount = mpEndCps->getCount() / 4;
    2026                 :            : 
    2027         [ #  # ]:          0 :         for (sal_uInt32 n = 0; n < nEndsCount; ++n)
    2028         [ #  # ]:          0 :             mpDoc->insertCpAndFc(getEndCpAndFc(n));
    2029                 :            :     }
    2030                 :          0 : }
    2031                 :            : 
    2032                 :            : writerfilter::Reference<Properties>::Pointer_t
    2033                 :          0 : BookmarkHelper::getBKF(const CpAndFc & rCpAndFc)
    2034                 :            : {
    2035                 :          0 :     sal_uInt32 nIndex = getIndex(rCpAndFc);
    2036                 :            : 
    2037                 :            :     return writerfilter::Reference<Properties>::Pointer_t
    2038                 :          0 :         (mpStartCps->getEntryPointer(nIndex));
    2039                 :            : }
    2040                 :            : 
    2041                 :            : writerfilter::Reference<Properties>::Pointer_t
    2042                 :          0 : BookmarkHelper::getBookmark(const CpAndFc & rCpAndFc)
    2043                 :            : {
    2044                 :          0 :     writerfilter::Reference<Properties>::Pointer_t pResult;
    2045                 :            : 
    2046                 :            :     try
    2047                 :            :     {
    2048         [ #  # ]:          0 :         OUString aName = getName(rCpAndFc);
    2049                 :            : 
    2050                 :            :         pResult = writerfilter::Reference<Properties>::Pointer_t
    2051 [ #  # ][ #  # ]:          0 :             (new Bookmark(getBKF(rCpAndFc), aName));
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    2052                 :            :     }
    2053   [ #  #  #  # ]:          0 :     catch (const ExceptionNotFound &e)
    2054                 :            :     {
    2055   [ #  #  #  # ]:          0 :         clog << e.getText() << endl;
    2056                 :            :     }
    2057                 :            : 
    2058                 :          0 :     return pResult;
    2059                 :            : }
    2060                 :            : 
    2061                 :          0 : OUString BookmarkHelper::getName(const CpAndFc & rCpAndFc)
    2062                 :            : {
    2063                 :          0 :     OUString sResult;
    2064                 :            : 
    2065         [ #  # ]:          0 :     sal_uInt32 nIndex = getIndex(rCpAndFc);
    2066                 :            : 
    2067         [ #  # ]:          0 :     sResult = getName(nIndex);
    2068                 :            : 
    2069                 :          0 :     return sResult;
    2070                 :            : }
    2071                 :            : 
    2072                 :            : template <class T, class Helper>
    2073                 :            : struct ProcessPLCF2Map
    2074                 :            : {
    2075                 :          0 :     void process(typename PLCF<T>::Pointer_t pPlcf,
    2076                 :            :                  typename Helper::Map_t & rMap,
    2077                 :            :                  PropertyType type,
    2078                 :            :                  WW8DocumentImpl * pDoc)
    2079                 :            :     {
    2080 [ #  # ][ #  # ]:          0 :         if (pPlcf.get() != NULL)
                 [ #  # ]
    2081                 :            :         {
    2082                 :          0 :             sal_uInt32 nCount = pPlcf->getEntryCount();
    2083                 :            : 
    2084 [ #  # ][ #  # ]:          0 :             for (sal_uInt32 n = 0; n < nCount; n++)
                 [ #  # ]
    2085                 :            :             {
    2086 [ #  # ][ #  # ]:          0 :                 Cp aCp(pPlcf->getFc(n));
                 [ #  # ]
    2087   [ #  #  #  #  :          0 :                 CpAndFc aCpAndFc(pDoc->getCpAndFc(aCp, type));
                   #  # ]
    2088 [ #  # ][ #  # ]:          0 :                 typename T::Pointer_t pT = pPlcf->getEntry(n);
                 [ #  # ]
    2089                 :            : 
    2090 [ #  # ][ #  # ]:          0 :                 rMap[aCpAndFc] = pT;
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
                 [ #  # ]
    2091                 :            :             }
    2092                 :            :         }
    2093                 :          0 :     }
    2094                 :            : };
    2095                 :            : 
    2096                 :          0 : FieldHelper::FieldHelper(PLCF<WW8FLD>::Pointer_t pPlcffldMom,
    2097                 :            :                          WW8DocumentImpl * pDoc)
    2098         [ #  # ]:          0 : : mpDoc(pDoc)
    2099                 :            : {
    2100                 :            :     ProcessPLCF2Map<WW8FLD, FieldHelper> process;
    2101 [ #  # ][ #  # ]:          0 :     process.process(pPlcffldMom, mMap, PROP_FLD, pDoc);
                 [ #  # ]
    2102                 :          0 : }
    2103                 :            : 
    2104                 :          0 : void FieldHelper::init()
    2105                 :            : {
    2106                 :          0 :     Map_t::iterator aIt;
    2107                 :            : 
    2108 [ #  # ][ #  # ]:          0 :     for (aIt = mMap.begin(); aIt != mMap.end(); ++aIt)
    2109                 :            :     {
    2110 [ #  # ][ #  # ]:          0 :         mpDoc->insertCpAndFc(aIt->first);
    2111                 :            :     }
    2112                 :          0 : }
    2113                 :            : 
    2114                 :          0 : WW8FLD::Pointer_t FieldHelper::getWW8FLD(const CpAndFc & rCpAndFc)
    2115                 :            : {
    2116                 :          0 :     WW8FLD::Pointer_t pFld = mMap[rCpAndFc];
    2117                 :            : 
    2118                 :          0 :     return pFld;
    2119                 :            : }
    2120                 :            : 
    2121                 :            : writerfilter::Reference<Properties>::Pointer_t
    2122                 :          0 : FieldHelper::getField(const CpAndFc & rCpAndFc)
    2123                 :            : {
    2124         [ #  # ]:          0 :     WW8FLD::Pointer_t pFLD = getWW8FLD(rCpAndFc);
    2125                 :            : 
    2126                 :            :     return writerfilter::Reference<Properties>::Pointer_t
    2127 [ #  # ][ #  # ]:          0 :         (new WW8FLD(*pFLD));
         [ #  # ][ #  # ]
    2128                 :            : }
    2129                 :            : 
    2130                 :          0 : ShapeHelper::ShapeHelper(PLCF<WW8FSPA>::Pointer_t pPlcspaMom,
    2131                 :            :                          PLCF<WW8FSPA>::Pointer_t pPlcspaHdr,
    2132                 :            :                          WW8DocumentImpl * pDoc)
    2133         [ #  # ]:          0 : : mpDoc(pDoc)
    2134                 :            : {
    2135                 :            :     ProcessPLCF2Map<WW8FSPA, ShapeHelper> process;
    2136 [ #  # ][ #  # ]:          0 :     process.process(pPlcspaMom, mMap, PROP_SHP, pDoc);
                 [ #  # ]
    2137 [ #  # ][ #  # ]:          0 :     process.process(pPlcspaHdr, mMap, PROP_SHP, pDoc);
                 [ #  # ]
    2138                 :          0 : }
    2139                 :            : 
    2140                 :          0 : void ShapeHelper::init()
    2141                 :            : {
    2142                 :          0 :     Map_t::iterator aIt;
    2143                 :            : 
    2144 [ #  # ][ #  # ]:          0 :     for (aIt = mMap.begin(); aIt != mMap.end(); ++aIt)
    2145                 :            :     {
    2146 [ #  # ][ #  # ]:          0 :         mpDoc->insertCpAndFc(aIt->first);
    2147 [ #  # ][ #  # ]:          0 :         aIt->second->setDocument(mpDoc);
    2148                 :            :     }
    2149                 :          0 : }
    2150                 :            : 
    2151                 :            : writerfilter::Reference<Properties>::Pointer_t
    2152                 :          0 : ShapeHelper::getShape(const CpAndFc & rCpAndFc)
    2153                 :            : {
    2154 [ #  # ][ #  # ]:          0 :     WW8FSPA::Pointer_t pFSPA = mMap[rCpAndFc];
    2155                 :            : 
    2156                 :            :     return writerfilter::Reference<Properties>::Pointer_t
    2157 [ #  # ][ #  # ]:          0 :         (new WW8FSPA(*pFSPA));
         [ #  # ][ #  # ]
    2158                 :            : }
    2159                 :            : 
    2160                 :          0 : BreakHelper::BreakHelper(PLCF<WW8BKD>::Pointer_t pPlcfbkdMom,
    2161                 :            :                          WW8DocumentImpl * pDoc)
    2162         [ #  # ]:          0 : : mpDoc(pDoc)
    2163                 :            : {
    2164                 :            :     ProcessPLCF2Map<WW8BKD, BreakHelper> process;
    2165 [ #  # ][ #  # ]:          0 :     process.process(pPlcfbkdMom, mMap, PROP_BRK, pDoc);
                 [ #  # ]
    2166                 :          0 : }
    2167                 :            : 
    2168                 :          0 : void BreakHelper::init()
    2169                 :            : {
    2170                 :          0 :     Map_t::iterator aIt;
    2171                 :            : 
    2172 [ #  # ][ #  # ]:          0 :     for (aIt = mMap.begin(); aIt != mMap.end(); ++aIt)
    2173                 :            :     {
    2174 [ #  # ][ #  # ]:          0 :         mpDoc->insertCpAndFc(aIt->first);
    2175                 :            :     }
    2176                 :          0 : }
    2177                 :            : 
    2178                 :            : writerfilter::Reference<Properties>::Pointer_t
    2179                 :          0 : BreakHelper::getBreak(const CpAndFc & rCpAndFc)
    2180                 :            : {
    2181 [ #  # ][ #  # ]:          0 :     WW8BKD::Pointer_t pBKD = mMap[rCpAndFc];
    2182                 :            : 
    2183                 :            :     return writerfilter::Reference<Properties>::Pointer_t
    2184 [ #  # ][ #  # ]:          0 :         (new WW8BKD(*pBKD));
         [ #  # ][ #  # ]
    2185                 :            : }
    2186                 :            : 
    2187                 :            : 
    2188 [ +  - ][ +  - ]:         60 : }}
    2189                 :            : 
    2190                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10