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