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