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 "rtfattributeoutput.hxx"
25*b1cdbd2cSJim Jagielski #include "rtfexport.hxx"
26*b1cdbd2cSJim Jagielski #include "rtfsdrexport.hxx"
27*b1cdbd2cSJim Jagielski #include "writerwordglue.hxx"
28*b1cdbd2cSJim Jagielski #include "wrtww8.hxx"
29*b1cdbd2cSJim Jagielski #include "ww8par.hxx"
30*b1cdbd2cSJim Jagielski #include "fmtcntnt.hxx"
31*b1cdbd2cSJim Jagielski #include "fmtsrnd.hxx"
32*b1cdbd2cSJim Jagielski #include "fchrfmt.hxx"
33*b1cdbd2cSJim Jagielski #include "tgrditem.hxx"
34*b1cdbd2cSJim Jagielski #include "fmtruby.hxx"
35*b1cdbd2cSJim Jagielski #include "charfmt.hxx"
36*b1cdbd2cSJim Jagielski #include "breakit.hxx"
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include <i18npool/mslangid.hxx>
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski #include <hintids.hxx>
41*b1cdbd2cSJim Jagielski 
42*b1cdbd2cSJim Jagielski #include <svl/poolitem.hxx>
43*b1cdbd2cSJim Jagielski #include <svtools/rtfkeywd.hxx>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski #include <editeng/fontitem.hxx>
46*b1cdbd2cSJim Jagielski #include <editeng/tstpitem.hxx>
47*b1cdbd2cSJim Jagielski #include <editeng/adjitem.hxx>
48*b1cdbd2cSJim Jagielski #include <editeng/spltitem.hxx>
49*b1cdbd2cSJim Jagielski #include <editeng/widwitem.hxx>
50*b1cdbd2cSJim Jagielski #include <editeng/lspcitem.hxx>
51*b1cdbd2cSJim Jagielski #include <editeng/keepitem.hxx>
52*b1cdbd2cSJim Jagielski #include <editeng/shaditem.hxx>
53*b1cdbd2cSJim Jagielski #include <editeng/brshitem.hxx>
54*b1cdbd2cSJim Jagielski #include <editeng/postitem.hxx>
55*b1cdbd2cSJim Jagielski #include <editeng/wghtitem.hxx>
56*b1cdbd2cSJim Jagielski #include <editeng/kernitem.hxx>
57*b1cdbd2cSJim Jagielski #include <editeng/crsditem.hxx>
58*b1cdbd2cSJim Jagielski #include <editeng/cmapitem.hxx>
59*b1cdbd2cSJim Jagielski #include <editeng/wrlmitem.hxx>
60*b1cdbd2cSJim Jagielski #include <editeng/udlnitem.hxx>
61*b1cdbd2cSJim Jagielski #include <editeng/langitem.hxx>
62*b1cdbd2cSJim Jagielski #include <editeng/escpitem.hxx>
63*b1cdbd2cSJim Jagielski #include <editeng/fhgtitem.hxx>
64*b1cdbd2cSJim Jagielski #include <editeng/colritem.hxx>
65*b1cdbd2cSJim Jagielski #include <editeng/hyznitem.hxx>
66*b1cdbd2cSJim Jagielski #include <editeng/brkitem.hxx>
67*b1cdbd2cSJim Jagielski #include <editeng/lrspitem.hxx>
68*b1cdbd2cSJim Jagielski #include <editeng/ulspitem.hxx>
69*b1cdbd2cSJim Jagielski #include <editeng/boxitem.hxx>
70*b1cdbd2cSJim Jagielski #include <editeng/cntritem.hxx>
71*b1cdbd2cSJim Jagielski #include <editeng/shdditem.hxx>
72*b1cdbd2cSJim Jagielski #include <editeng/akrnitem.hxx>
73*b1cdbd2cSJim Jagielski #include <editeng/pbinitem.hxx>
74*b1cdbd2cSJim Jagielski #include <editeng/emphitem.hxx>
75*b1cdbd2cSJim Jagielski #include <editeng/twolinesitem.hxx>
76*b1cdbd2cSJim Jagielski #include <editeng/charscaleitem.hxx>
77*b1cdbd2cSJim Jagielski #include <editeng/charrotateitem.hxx>
78*b1cdbd2cSJim Jagielski #include <editeng/charreliefitem.hxx>
79*b1cdbd2cSJim Jagielski #include <editeng/paravertalignitem.hxx>
80*b1cdbd2cSJim Jagielski #include <editeng/pgrditem.hxx>
81*b1cdbd2cSJim Jagielski #include <editeng/frmdiritem.hxx>
82*b1cdbd2cSJim Jagielski #include <editeng/blnkitem.hxx>
83*b1cdbd2cSJim Jagielski #include <editeng/charhiddenitem.hxx>
84*b1cdbd2cSJim Jagielski #include <svx/svdmodel.hxx>
85*b1cdbd2cSJim Jagielski #include <svx/svdobj.hxx>
86*b1cdbd2cSJim Jagielski #include <svx/fmglob.hxx>
87*b1cdbd2cSJim Jagielski #include <svx/svdouno.hxx>
88*b1cdbd2cSJim Jagielski #include <filter/msfilter/msoleexp.hxx>
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski #include <docufld.hxx>
91*b1cdbd2cSJim Jagielski #include <flddropdown.hxx>
92*b1cdbd2cSJim Jagielski #include <format.hxx>
93*b1cdbd2cSJim Jagielski #include <fmtclds.hxx>
94*b1cdbd2cSJim Jagielski #include <fmtinfmt.hxx>
95*b1cdbd2cSJim Jagielski #include <fmtfld.hxx>
96*b1cdbd2cSJim Jagielski #include <fmtfsize.hxx>
97*b1cdbd2cSJim Jagielski #include <fmtftn.hxx>
98*b1cdbd2cSJim Jagielski #include <fmtrowsplt.hxx>
99*b1cdbd2cSJim Jagielski #include <fmtline.hxx>
100*b1cdbd2cSJim Jagielski #include <fmtanchr.hxx>
101*b1cdbd2cSJim Jagielski #include <frmfmt.hxx>
102*b1cdbd2cSJim Jagielski #include <frmatr.hxx>
103*b1cdbd2cSJim Jagielski #include <ftninfo.hxx>
104*b1cdbd2cSJim Jagielski #include <htmltbl.hxx>
105*b1cdbd2cSJim Jagielski #include <ndgrf.hxx>
106*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>
107*b1cdbd2cSJim Jagielski #include <node.hxx>
108*b1cdbd2cSJim Jagielski #include <pagedesc.hxx>
109*b1cdbd2cSJim Jagielski #include <paratr.hxx>
110*b1cdbd2cSJim Jagielski #include <swmodule.hxx>
111*b1cdbd2cSJim Jagielski #include <swtable.hxx>
112*b1cdbd2cSJim Jagielski #include <txtftn.hxx>
113*b1cdbd2cSJim Jagielski #include <txtinet.hxx>
114*b1cdbd2cSJim Jagielski #include <numrule.hxx>
115*b1cdbd2cSJim Jagielski #include <grfatr.hxx>
116*b1cdbd2cSJim Jagielski #include <ndole.hxx>
117*b1cdbd2cSJim Jagielski #include <lineinfo.hxx>
118*b1cdbd2cSJim Jagielski #include <rtf.hxx>
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski #include <rtl/strbuf.hxx>
121*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
122*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski #include <tools/color.hxx>
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski #include <vcl/cvtgrf.hxx>
127*b1cdbd2cSJim Jagielski 
128*b1cdbd2cSJim Jagielski #include <com/sun/star/i18n/ScriptType.hdl>
129*b1cdbd2cSJim Jagielski #include <com/sun/star/drawing/XShape.hpp>
130*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModel.hpp>
131*b1cdbd2cSJim Jagielski #include <com/sun/star/chart2/XChartDocument.hpp>
132*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
133*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNamed.hpp>
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski #include <osl/diagnose.h>
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski using rtl::OString;
138*b1cdbd2cSJim Jagielski using rtl::OStringBuffer;
139*b1cdbd2cSJim Jagielski using rtl::OUString;
140*b1cdbd2cSJim Jagielski using rtl::OUStringBuffer;
141*b1cdbd2cSJim Jagielski using rtl::OUStringToOString;
142*b1cdbd2cSJim Jagielski 
143*b1cdbd2cSJim Jagielski using namespace nsSwDocInfoSubType;
144*b1cdbd2cSJim Jagielski using namespace nsFieldFlags;
145*b1cdbd2cSJim Jagielski using namespace sw::util;
146*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski class MultiBufferEntry
151*b1cdbd2cSJim Jagielski {
152*b1cdbd2cSJim Jagielski private:
153*b1cdbd2cSJim Jagielski public:
154*b1cdbd2cSJim Jagielski     MultiBufferEntry();
155*b1cdbd2cSJim Jagielski     virtual ~MultiBufferEntry();
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski     virtual void writeAndClear(SvStream& rTarget) = 0;
158*b1cdbd2cSJim Jagielski };
159*b1cdbd2cSJim Jagielski 
MultiBufferEntry()160*b1cdbd2cSJim Jagielski MultiBufferEntry::MultiBufferEntry()
161*b1cdbd2cSJim Jagielski {
162*b1cdbd2cSJim Jagielski }
163*b1cdbd2cSJim Jagielski 
~MultiBufferEntry()164*b1cdbd2cSJim Jagielski MultiBufferEntry::~MultiBufferEntry()
165*b1cdbd2cSJim Jagielski {
166*b1cdbd2cSJim Jagielski }
167*b1cdbd2cSJim Jagielski 
168*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski class MultiBufferString : public MultiBufferEntry
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski private:
173*b1cdbd2cSJim Jagielski     rtl::OStringBuffer      maBuffer;
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski public:
176*b1cdbd2cSJim Jagielski     MultiBufferString(rtl::OStringBuffer& rBuffer);
177*b1cdbd2cSJim Jagielski     virtual ~MultiBufferString();
178*b1cdbd2cSJim Jagielski 
getBuffer()179*b1cdbd2cSJim Jagielski     rtl::OStringBuffer& getBuffer() { return maBuffer; }
180*b1cdbd2cSJim Jagielski     virtual void writeAndClear(SvStream& rTarget);
181*b1cdbd2cSJim Jagielski };
182*b1cdbd2cSJim Jagielski 
MultiBufferString(rtl::OStringBuffer & rBuffer)183*b1cdbd2cSJim Jagielski MultiBufferString::MultiBufferString(rtl::OStringBuffer& rBuffer)
184*b1cdbd2cSJim Jagielski :   MultiBufferEntry(),
185*b1cdbd2cSJim Jagielski     maBuffer(rBuffer)
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski }
188*b1cdbd2cSJim Jagielski 
~MultiBufferString()189*b1cdbd2cSJim Jagielski MultiBufferString::~MultiBufferString()
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski 
writeAndClear(SvStream & rTarget)193*b1cdbd2cSJim Jagielski void MultiBufferString::writeAndClear(SvStream& rTarget)
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski     rTarget << maBuffer.makeStringAndClear();
196*b1cdbd2cSJim Jagielski }
197*b1cdbd2cSJim Jagielski 
198*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski class MultiBufferHex : public MultiBufferEntry
201*b1cdbd2cSJim Jagielski {
202*b1cdbd2cSJim Jagielski private:
203*b1cdbd2cSJim Jagielski     sal_uInt8*              mpData;
204*b1cdbd2cSJim Jagielski     sal_uInt32              mnSize;
205*b1cdbd2cSJim Jagielski     sal_uInt32              mnLimit;
206*b1cdbd2cSJim Jagielski 
207*b1cdbd2cSJim Jagielski public:
208*b1cdbd2cSJim Jagielski     MultiBufferHex(
209*b1cdbd2cSJim Jagielski         const sal_uInt8* pData,
210*b1cdbd2cSJim Jagielski         sal_uInt32 nSize,
211*b1cdbd2cSJim Jagielski         sal_uInt32 nLimit = 64);
212*b1cdbd2cSJim Jagielski     virtual ~MultiBufferHex();
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski     virtual void writeAndClear(SvStream& rTarget);
215*b1cdbd2cSJim Jagielski };
216*b1cdbd2cSJim Jagielski 
MultiBufferHex(const sal_uInt8 * pData,sal_uInt32 nSize,sal_uInt32 nLimit)217*b1cdbd2cSJim Jagielski MultiBufferHex::MultiBufferHex(
218*b1cdbd2cSJim Jagielski     const sal_uInt8* pData,
219*b1cdbd2cSJim Jagielski     sal_uInt32 nSize,
220*b1cdbd2cSJim Jagielski     sal_uInt32 nLimit)
221*b1cdbd2cSJim Jagielski :   MultiBufferEntry(),
222*b1cdbd2cSJim Jagielski     mpData(0),
223*b1cdbd2cSJim Jagielski     mnSize(nSize),
224*b1cdbd2cSJim Jagielski     mnLimit(nLimit)
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     if(mnSize)
227*b1cdbd2cSJim Jagielski     {
228*b1cdbd2cSJim Jagielski         mpData = new sal_uInt8[mnSize];
229*b1cdbd2cSJim Jagielski         memcpy(mpData, pData, nSize);
230*b1cdbd2cSJim Jagielski     }
231*b1cdbd2cSJim Jagielski }
232*b1cdbd2cSJim Jagielski 
~MultiBufferHex()233*b1cdbd2cSJim Jagielski MultiBufferHex::~MultiBufferHex()
234*b1cdbd2cSJim Jagielski {
235*b1cdbd2cSJim Jagielski     if(mpData)
236*b1cdbd2cSJim Jagielski     {
237*b1cdbd2cSJim Jagielski         delete mpData;
238*b1cdbd2cSJim Jagielski     }
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
writeAndClear(SvStream & rTarget)241*b1cdbd2cSJim Jagielski void MultiBufferHex::writeAndClear(SvStream& rTarget)
242*b1cdbd2cSJim Jagielski {
243*b1cdbd2cSJim Jagielski     if(mpData)
244*b1cdbd2cSJim Jagielski     {
245*b1cdbd2cSJim Jagielski         static OString hexArray[16] = {
246*b1cdbd2cSJim Jagielski             OString('0'), OString('1'), OString('2'), OString('3'),
247*b1cdbd2cSJim Jagielski             OString('4'), OString('5'), OString('6'), OString('7'),
248*b1cdbd2cSJim Jagielski             OString('8'), OString('9'), OString('a'), OString('b'),
249*b1cdbd2cSJim Jagielski             OString('c'), OString('d'), OString('e'), OString('f') };
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski         for(sal_uInt32 a(0), nBreak(0); a < mnSize; a++, nBreak++)
252*b1cdbd2cSJim Jagielski         {
253*b1cdbd2cSJim Jagielski             const sal_uInt8 aData(mpData[a]);
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski             rTarget << hexArray[aData >> 4];
256*b1cdbd2cSJim Jagielski             rTarget << hexArray[aData & 0x0f];
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski             if(mnLimit == nBreak)
259*b1cdbd2cSJim Jagielski             {
260*b1cdbd2cSJim Jagielski                 static OString aNewLine = OString(RtfExport::sNewLine);
261*b1cdbd2cSJim Jagielski                 nBreak = 0;
262*b1cdbd2cSJim Jagielski                 rTarget << aNewLine;
263*b1cdbd2cSJim Jagielski             }
264*b1cdbd2cSJim Jagielski         }
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski         delete mpData;
267*b1cdbd2cSJim Jagielski         mpData = 0;
268*b1cdbd2cSJim Jagielski         mnSize = 0;
269*b1cdbd2cSJim Jagielski     }
270*b1cdbd2cSJim Jagielski }
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
273*b1cdbd2cSJim Jagielski 
clearContentVector()274*b1cdbd2cSJim Jagielski void MultiBuffer::clearContentVector()
275*b1cdbd2cSJim Jagielski {
276*b1cdbd2cSJim Jagielski     while(!maContent.empty())
277*b1cdbd2cSJim Jagielski     {
278*b1cdbd2cSJim Jagielski         delete maContent.back();
279*b1cdbd2cSJim Jagielski         maContent.pop_back();
280*b1cdbd2cSJim Jagielski     }
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski 
MultiBuffer()283*b1cdbd2cSJim Jagielski MultiBuffer::MultiBuffer()
284*b1cdbd2cSJim Jagielski :   maBuffer(),
285*b1cdbd2cSJim Jagielski     maContent()
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski 
~MultiBuffer()289*b1cdbd2cSJim Jagielski MultiBuffer::~MultiBuffer()
290*b1cdbd2cSJim Jagielski {
291*b1cdbd2cSJim Jagielski     clearContentVector();
292*b1cdbd2cSJim Jagielski }
293*b1cdbd2cSJim Jagielski 
empty() const294*b1cdbd2cSJim Jagielski bool MultiBuffer::empty() const
295*b1cdbd2cSJim Jagielski {
296*b1cdbd2cSJim Jagielski     return 0 == maBuffer.getLength() && maContent.empty();
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski 
writeAndClear(SvStream & rTarget)299*b1cdbd2cSJim Jagielski void MultiBuffer::writeAndClear(SvStream& rTarget)
300*b1cdbd2cSJim Jagielski {
301*b1cdbd2cSJim Jagielski     for(sal_uInt32 a(0); a < maContent.size(); a++)
302*b1cdbd2cSJim Jagielski     {
303*b1cdbd2cSJim Jagielski         maContent[a]->writeAndClear(rTarget);
304*b1cdbd2cSJim Jagielski     }
305*b1cdbd2cSJim Jagielski 
306*b1cdbd2cSJim Jagielski     clearContentVector();
307*b1cdbd2cSJim Jagielski     rTarget << maBuffer.makeStringAndClear();
308*b1cdbd2cSJim Jagielski }
309*b1cdbd2cSJim Jagielski 
appendAndClear(MultiBuffer & rSource)310*b1cdbd2cSJim Jagielski void MultiBuffer::appendAndClear(MultiBuffer& rSource)
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski     if(!rSource.maContent.empty())
313*b1cdbd2cSJim Jagielski     {
314*b1cdbd2cSJim Jagielski         if(maBuffer.getLength())
315*b1cdbd2cSJim Jagielski         {
316*b1cdbd2cSJim Jagielski             maContent.push_back(new MultiBufferString(maBuffer));
317*b1cdbd2cSJim Jagielski             maBuffer.setLength(0);
318*b1cdbd2cSJim Jagielski         }
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski         for(sal_uInt32 a(0); a < rSource.maContent.size(); a++)
321*b1cdbd2cSJim Jagielski         {
322*b1cdbd2cSJim Jagielski             maContent.push_back(rSource.maContent[a]);
323*b1cdbd2cSJim Jagielski         }
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski         rSource.maContent.clear();
326*b1cdbd2cSJim Jagielski     }
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski     maBuffer.append(rSource.maBuffer.getStr());
329*b1cdbd2cSJim Jagielski     rSource.maBuffer.setLength(0);
330*b1cdbd2cSJim Jagielski }
331*b1cdbd2cSJim Jagielski 
clear()332*b1cdbd2cSJim Jagielski void MultiBuffer::clear()
333*b1cdbd2cSJim Jagielski {
334*b1cdbd2cSJim Jagielski     clearContentVector();
335*b1cdbd2cSJim Jagielski     maBuffer.setLength(0);
336*b1cdbd2cSJim Jagielski }
337*b1cdbd2cSJim Jagielski 
appendHexData(const sal_uInt8 * pGraphicAry,sal_uInt32 nSize,sal_uInt32 nLimit)338*b1cdbd2cSJim Jagielski void MultiBuffer::appendHexData(const sal_uInt8 *pGraphicAry, sal_uInt32 nSize, sal_uInt32 nLimit)
339*b1cdbd2cSJim Jagielski {
340*b1cdbd2cSJim Jagielski     if(nSize)
341*b1cdbd2cSJim Jagielski     {
342*b1cdbd2cSJim Jagielski         if(maBuffer.getLength())
343*b1cdbd2cSJim Jagielski         {
344*b1cdbd2cSJim Jagielski             maContent.push_back(new MultiBufferString(maBuffer));
345*b1cdbd2cSJim Jagielski             maBuffer.setLength(0);
346*b1cdbd2cSJim Jagielski         }
347*b1cdbd2cSJim Jagielski 
348*b1cdbd2cSJim Jagielski         maContent.push_back(new MultiBufferHex(pGraphicAry, nSize, nLimit));
349*b1cdbd2cSJim Jagielski     }
350*b1cdbd2cSJim Jagielski }
351*b1cdbd2cSJim Jagielski 
352*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////////
353*b1cdbd2cSJim Jagielski 
OutTBLBorderLine(RtfExport & rExport,const SvxBorderLine * pLine,const sal_Char * pStr)354*b1cdbd2cSJim Jagielski static OString OutTBLBorderLine(RtfExport &rExport, const SvxBorderLine* pLine, const sal_Char* pStr)
355*b1cdbd2cSJim Jagielski {
356*b1cdbd2cSJim Jagielski     OStringBuffer aRet;
357*b1cdbd2cSJim Jagielski     aRet.append(pStr);
358*b1cdbd2cSJim Jagielski     if( pLine->GetInWidth() )
359*b1cdbd2cSJim Jagielski     {
360*b1cdbd2cSJim Jagielski         // double line
361*b1cdbd2cSJim Jagielski         aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRDB);
362*b1cdbd2cSJim Jagielski         switch( pLine->GetInWidth() )
363*b1cdbd2cSJim Jagielski         {
364*b1cdbd2cSJim Jagielski             case DEF_LINE_WIDTH_0:
365*b1cdbd2cSJim Jagielski                 aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRW "15");
366*b1cdbd2cSJim Jagielski                 break;
367*b1cdbd2cSJim Jagielski             case DEF_LINE_WIDTH_1:
368*b1cdbd2cSJim Jagielski                 aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRW "30");
369*b1cdbd2cSJim Jagielski                 break;
370*b1cdbd2cSJim Jagielski             case DEF_LINE_WIDTH_2:
371*b1cdbd2cSJim Jagielski             case DEF_LINE_WIDTH_3:
372*b1cdbd2cSJim Jagielski                 aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRW "45");
373*b1cdbd2cSJim Jagielski                 break;
374*b1cdbd2cSJim Jagielski         }
375*b1cdbd2cSJim Jagielski     }
376*b1cdbd2cSJim Jagielski     else
377*b1cdbd2cSJim Jagielski     {
378*b1cdbd2cSJim Jagielski         // single line
379*b1cdbd2cSJim Jagielski         if( DEF_LINE_WIDTH_1 >= pLine->GetOutWidth() )
380*b1cdbd2cSJim Jagielski             aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRS OOO_STRING_SVTOOLS_RTF_BRDRW).append((sal_Int32)pLine->GetOutWidth());
381*b1cdbd2cSJim Jagielski         else
382*b1cdbd2cSJim Jagielski             aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRTH OOO_STRING_SVTOOLS_RTF_BRDRW).append((sal_Int32)pLine->GetOutWidth() / 2);
383*b1cdbd2cSJim Jagielski     }
384*b1cdbd2cSJim Jagielski 
385*b1cdbd2cSJim Jagielski     aRet.append(OOO_STRING_SVTOOLS_RTF_BRDRCF);
386*b1cdbd2cSJim Jagielski     aRet.append((sal_Int32)rExport.GetColor(pLine->GetColor()));
387*b1cdbd2cSJim Jagielski     return aRet.makeStringAndClear();
388*b1cdbd2cSJim Jagielski }
389*b1cdbd2cSJim Jagielski 
OutBorderLine(RtfExport & rExport,const SvxBorderLine * pLine,const sal_Char * pStr,sal_uInt16 nDist)390*b1cdbd2cSJim Jagielski static OString OutBorderLine(RtfExport &rExport, const SvxBorderLine* pLine,
391*b1cdbd2cSJim Jagielski     const sal_Char* pStr, sal_uInt16 nDist)
392*b1cdbd2cSJim Jagielski {
393*b1cdbd2cSJim Jagielski     OStringBuffer aRet;
394*b1cdbd2cSJim Jagielski     aRet.append(OutTBLBorderLine(rExport, pLine, pStr));
395*b1cdbd2cSJim Jagielski     aRet.append(OOO_STRING_SVTOOLS_RTF_BRSP);
396*b1cdbd2cSJim Jagielski     aRet.append((sal_Int32)nDist);
397*b1cdbd2cSJim Jagielski     return aRet.makeStringAndClear();
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski 
OutBorderLine(RtfExport & rExport,const SvxBorderLine * pLine,const char * pStr)400*b1cdbd2cSJim Jagielski static OString OutBorderLine( RtfExport &rExport, const SvxBorderLine* pLine,
401*b1cdbd2cSJim Jagielski                             const char* pStr )
402*b1cdbd2cSJim Jagielski {
403*b1cdbd2cSJim Jagielski     OStringBuffer aRet;
404*b1cdbd2cSJim Jagielski     aRet.append(pStr);
405*b1cdbd2cSJim Jagielski     aRet.append(OOO_STRING_SVTOOLS_RTF_BRDLNCOL);
406*b1cdbd2cSJim Jagielski     aRet.append((sal_Int32)rExport.GetColor( pLine->GetColor() ) );
407*b1cdbd2cSJim Jagielski     aRet.append(OOO_STRING_SVTOOLS_RTF_BRDLNIN);
408*b1cdbd2cSJim Jagielski     aRet.append((sal_Int32)pLine->GetInWidth());
409*b1cdbd2cSJim Jagielski     aRet.append(OOO_STRING_SVTOOLS_RTF_BRDLNOUT);
410*b1cdbd2cSJim Jagielski     aRet.append((sal_Int32)pLine->GetOutWidth());
411*b1cdbd2cSJim Jagielski     aRet.append(OOO_STRING_SVTOOLS_RTF_BRDLNDIST);
412*b1cdbd2cSJim Jagielski     aRet.append((sal_Int32)pLine->GetDistance());
413*b1cdbd2cSJim Jagielski     return aRet.makeStringAndClear();
414*b1cdbd2cSJim Jagielski }
415*b1cdbd2cSJim Jagielski 
RTLAndCJKState(bool bIsRTL,sal_uInt16 nScript)416*b1cdbd2cSJim Jagielski void RtfAttributeOutput::RTLAndCJKState( bool bIsRTL, sal_uInt16 nScript )
417*b1cdbd2cSJim Jagielski {
418*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
419*b1cdbd2cSJim Jagielski     /*
420*b1cdbd2cSJim Jagielski        You would have thought that
421*b1cdbd2cSJim Jagielski        m_rExport.Strm() << (bIsRTL ? OOO_STRING_SVTOOLS_RTF_RTLCH : OOO_STRING_SVTOOLS_RTF_LTRCH); would be sufficent here ,
422*b1cdbd2cSJim Jagielski        but looks like word needs to see the other directional token to be
423*b1cdbd2cSJim Jagielski        satisified that all is kosher, otherwise it seems in ver 2003 to go and
424*b1cdbd2cSJim Jagielski        semi-randomlyly stick strike through about the place. Perhaps
425*b1cdbd2cSJim Jagielski        strikethrough is some ms developers "something is wrong signal" debugging
426*b1cdbd2cSJim Jagielski        code that we're triggering ?
427*b1cdbd2cSJim Jagielski        */
428*b1cdbd2cSJim Jagielski     if (bIsRTL) {
429*b1cdbd2cSJim Jagielski         m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_LTRCH);
430*b1cdbd2cSJim Jagielski         m_aStylesEnd.append(' ');
431*b1cdbd2cSJim Jagielski         m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_RTLCH);
432*b1cdbd2cSJim Jagielski     } else {
433*b1cdbd2cSJim Jagielski         m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_RTLCH);
434*b1cdbd2cSJim Jagielski         m_aStylesEnd.append(' ');
435*b1cdbd2cSJim Jagielski         m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_LTRCH);
436*b1cdbd2cSJim Jagielski     }
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski     switch (nScript) {
439*b1cdbd2cSJim Jagielski         case i18n::ScriptType::LATIN:
440*b1cdbd2cSJim Jagielski             m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_LOCH);
441*b1cdbd2cSJim Jagielski             break;
442*b1cdbd2cSJim Jagielski         case i18n::ScriptType::ASIAN:
443*b1cdbd2cSJim Jagielski             m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_DBCH);
444*b1cdbd2cSJim Jagielski             break;
445*b1cdbd2cSJim Jagielski         case i18n::ScriptType::COMPLEX:
446*b1cdbd2cSJim Jagielski             /* noop */
447*b1cdbd2cSJim Jagielski             break;
448*b1cdbd2cSJim Jagielski         default:
449*b1cdbd2cSJim Jagielski             /* should not happen? */
450*b1cdbd2cSJim Jagielski             break;
451*b1cdbd2cSJim Jagielski     }
452*b1cdbd2cSJim Jagielski }
453*b1cdbd2cSJim Jagielski 
StartParagraph(ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo)454*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartParagraph( ww8::WW8TableNodeInfo::Pointer_t pTextNodeInfo )
455*b1cdbd2cSJim Jagielski {
456*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
457*b1cdbd2cSJim Jagielski 
458*b1cdbd2cSJim Jagielski     // Output table/table row/table cell starts if needed
459*b1cdbd2cSJim Jagielski     if ( pTextNodeInfo.get() )
460*b1cdbd2cSJim Jagielski     {
461*b1cdbd2cSJim Jagielski         sal_uInt32 nRow = pTextNodeInfo->getRow();
462*b1cdbd2cSJim Jagielski         sal_uInt32 nCell = pTextNodeInfo->getCell();
463*b1cdbd2cSJim Jagielski 
464*b1cdbd2cSJim Jagielski         // New cell/row?
465*b1cdbd2cSJim Jagielski         if ( m_nTableDepth > 0 && !m_bTableCellOpen )
466*b1cdbd2cSJim Jagielski         {
467*b1cdbd2cSJim Jagielski             ww8::WW8TableNodeInfoInner::Pointer_t pDeepInner( pTextNodeInfo->getInnerForDepth( m_nTableDepth ) );
468*b1cdbd2cSJim Jagielski             OSL_ENSURE( pDeepInner, "TableNodeInfoInner not found");
469*b1cdbd2cSJim Jagielski             if ( pDeepInner && pDeepInner->getCell() == 0 )
470*b1cdbd2cSJim Jagielski                 StartTableRow( pDeepInner );
471*b1cdbd2cSJim Jagielski 
472*b1cdbd2cSJim Jagielski             StartTableCell( pDeepInner );
473*b1cdbd2cSJim Jagielski         }
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski         if ( nRow == 0 && nCell == 0 )
476*b1cdbd2cSJim Jagielski         {
477*b1cdbd2cSJim Jagielski             // Do we have to start the table?
478*b1cdbd2cSJim Jagielski             // [If we are at the rigth depth already, it means that we
479*b1cdbd2cSJim Jagielski             // continue the table cell]
480*b1cdbd2cSJim Jagielski             sal_uInt32 nCurrentDepth = pTextNodeInfo->getDepth();
481*b1cdbd2cSJim Jagielski 
482*b1cdbd2cSJim Jagielski             if ( nCurrentDepth > m_nTableDepth )
483*b1cdbd2cSJim Jagielski             {
484*b1cdbd2cSJim Jagielski                 // Start all the tables that begin here
485*b1cdbd2cSJim Jagielski                 for ( sal_uInt32 nDepth = m_nTableDepth + 1; nDepth <= pTextNodeInfo->getDepth(); ++nDepth )
486*b1cdbd2cSJim Jagielski                 {
487*b1cdbd2cSJim Jagielski                     ww8::WW8TableNodeInfoInner::Pointer_t pInner( pTextNodeInfo->getInnerForDepth( nDepth ) );
488*b1cdbd2cSJim Jagielski 
489*b1cdbd2cSJim Jagielski                     m_bLastTable = (nDepth == pTextNodeInfo->getDepth());
490*b1cdbd2cSJim Jagielski                     StartTable( pInner );
491*b1cdbd2cSJim Jagielski                     StartTableRow( pInner );
492*b1cdbd2cSJim Jagielski                     StartTableCell( pInner );
493*b1cdbd2cSJim Jagielski                 }
494*b1cdbd2cSJim Jagielski 
495*b1cdbd2cSJim Jagielski                 m_nTableDepth = nCurrentDepth;
496*b1cdbd2cSJim Jagielski             }
497*b1cdbd2cSJim Jagielski         }
498*b1cdbd2cSJim Jagielski     }
499*b1cdbd2cSJim Jagielski 
500*b1cdbd2cSJim Jagielski     OSL_ENSURE(m_aRun.empty(), "m_aRun is not empty");
501*b1cdbd2cSJim Jagielski }
502*b1cdbd2cSJim Jagielski 
EndParagraph(ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner)503*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndParagraph( ww8::WW8TableNodeInfoInner::Pointer_t pTextNodeInfoInner )
504*b1cdbd2cSJim Jagielski {
505*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
506*b1cdbd2cSJim Jagielski 
507*b1cdbd2cSJim Jagielski     FinishTableRowCell( pTextNodeInfoInner );
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski     MultiBuffer aParagraph;
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski     aParagraph.appendAndClear(m_aRun);
512*b1cdbd2cSJim Jagielski     aParagraph.getOStringBuffer().append(m_aAfterRuns.makeStringAndClear());
513*b1cdbd2cSJim Jagielski     if (m_bTblAfterCell)
514*b1cdbd2cSJim Jagielski         m_bTblAfterCell = false;
515*b1cdbd2cSJim Jagielski     else
516*b1cdbd2cSJim Jagielski     {
517*b1cdbd2cSJim Jagielski         aParagraph.getOStringBuffer().append(m_rExport.sNewLine);
518*b1cdbd2cSJim Jagielski         aParagraph.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_PAR);
519*b1cdbd2cSJim Jagielski         aParagraph.getOStringBuffer().append(' ');
520*b1cdbd2cSJim Jagielski     }
521*b1cdbd2cSJim Jagielski     if (m_nColBreakNeeded)
522*b1cdbd2cSJim Jagielski     {
523*b1cdbd2cSJim Jagielski         aParagraph.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_COLUMN);
524*b1cdbd2cSJim Jagielski         m_nColBreakNeeded = false;
525*b1cdbd2cSJim Jagielski     }
526*b1cdbd2cSJim Jagielski 
527*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionHeaders)
528*b1cdbd2cSJim Jagielski     {
529*b1cdbd2cSJim Jagielski         aParagraph.writeAndClear(m_rExport.Strm());
530*b1cdbd2cSJim Jagielski     }
531*b1cdbd2cSJim Jagielski     else
532*b1cdbd2cSJim Jagielski     {
533*b1cdbd2cSJim Jagielski         m_aSectionHeaders.appendAndClear(aParagraph);
534*b1cdbd2cSJim Jagielski     }
535*b1cdbd2cSJim Jagielski }
536*b1cdbd2cSJim Jagielski 
EmptyParagraph()537*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EmptyParagraph()
538*b1cdbd2cSJim Jagielski {
539*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
540*b1cdbd2cSJim Jagielski 
541*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_rExport.sNewLine << OOO_STRING_SVTOOLS_RTF_PAR << ' ';
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski 
StartParagraphProperties(const SwTxtNode & rNode)544*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartParagraphProperties( const SwTxtNode& rNode )
545*b1cdbd2cSJim Jagielski {
546*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
547*b1cdbd2cSJim Jagielski     OSL_ENSURE(m_aStyles.getLength() == 0, "m_aStyles is not empty");
548*b1cdbd2cSJim Jagielski 
549*b1cdbd2cSJim Jagielski     // output page/section breaks
550*b1cdbd2cSJim Jagielski     SwNodeIndex aNextIndex( rNode, 1 );
551*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_aSectionBreaks.makeStringAndClear();
552*b1cdbd2cSJim Jagielski     m_bBufferSectionBreaks = true;
553*b1cdbd2cSJim Jagielski 
554*b1cdbd2cSJim Jagielski     // output section headers / footers
555*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionHeaders)
556*b1cdbd2cSJim Jagielski     {
557*b1cdbd2cSJim Jagielski         m_aSectionHeaders.writeAndClear(m_rExport.Strm());
558*b1cdbd2cSJim Jagielski     }
559*b1cdbd2cSJim Jagielski 
560*b1cdbd2cSJim Jagielski     if ( aNextIndex.GetNode().IsTxtNode() )
561*b1cdbd2cSJim Jagielski     {
562*b1cdbd2cSJim Jagielski         const SwTxtNode* pTxtNode = static_cast< SwTxtNode* >( &aNextIndex.GetNode() );
563*b1cdbd2cSJim Jagielski         m_rExport.OutputSectionBreaks( pTxtNode->GetpSwAttrSet(), *pTxtNode );
564*b1cdbd2cSJim Jagielski     }
565*b1cdbd2cSJim Jagielski     else if ( aNextIndex.GetNode().IsTableNode() )
566*b1cdbd2cSJim Jagielski     {
567*b1cdbd2cSJim Jagielski         const SwTableNode* pTableNode = static_cast< SwTableNode* >( &aNextIndex.GetNode() );
568*b1cdbd2cSJim Jagielski         const SwFrmFmt *pFmt = pTableNode->GetTable().GetFrmFmt();
569*b1cdbd2cSJim Jagielski         m_rExport.OutputSectionBreaks( &(pFmt->GetAttrSet()), *pTableNode );
570*b1cdbd2cSJim Jagielski     }
571*b1cdbd2cSJim Jagielski     m_bBufferSectionBreaks = false;
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski     MultiBuffer aPar;
574*b1cdbd2cSJim Jagielski 
575*b1cdbd2cSJim Jagielski     if (!m_rExport.bRTFFlySyntax)
576*b1cdbd2cSJim Jagielski     {
577*b1cdbd2cSJim Jagielski         aPar.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_PARD);
578*b1cdbd2cSJim Jagielski         aPar.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_PLAIN);
579*b1cdbd2cSJim Jagielski         aPar.getOStringBuffer().append(' ');
580*b1cdbd2cSJim Jagielski     }
581*b1cdbd2cSJim Jagielski 
582*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionHeaders)
583*b1cdbd2cSJim Jagielski     {
584*b1cdbd2cSJim Jagielski         aPar.writeAndClear(m_rExport.Strm());
585*b1cdbd2cSJim Jagielski     }
586*b1cdbd2cSJim Jagielski     else
587*b1cdbd2cSJim Jagielski     {
588*b1cdbd2cSJim Jagielski         m_aSectionHeaders.appendAndClear(aPar);
589*b1cdbd2cSJim Jagielski     }
590*b1cdbd2cSJim Jagielski }
591*b1cdbd2cSJim Jagielski 
EndParagraphProperties()592*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndParagraphProperties()
593*b1cdbd2cSJim Jagielski {
594*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
595*b1cdbd2cSJim Jagielski     m_aStyles.append(m_aStylesEnd.makeStringAndClear());
596*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_aStyles.makeStringAndClear();
597*b1cdbd2cSJim Jagielski }
598*b1cdbd2cSJim Jagielski 
StartRun(const SwRedlineData * pRedlineData)599*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartRun( const SwRedlineData* pRedlineData )
600*b1cdbd2cSJim Jagielski {
601*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append('{');
604*b1cdbd2cSJim Jagielski 
605*b1cdbd2cSJim Jagielski     // if there is some redlining in the document, output it
606*b1cdbd2cSJim Jagielski     Redline( pRedlineData );
607*b1cdbd2cSJim Jagielski 
608*b1cdbd2cSJim Jagielski     OSL_ENSURE(m_aRunText.empty(), "m_aRunText is not empty");
609*b1cdbd2cSJim Jagielski }
610*b1cdbd2cSJim Jagielski 
EndRun()611*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndRun()
612*b1cdbd2cSJim Jagielski {
613*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
614*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append(m_rExport.sNewLine);
615*b1cdbd2cSJim Jagielski     m_aRun.appendAndClear(m_aRunText);
616*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append('}');
617*b1cdbd2cSJim Jagielski }
618*b1cdbd2cSJim Jagielski 
StartRunProperties()619*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartRunProperties()
620*b1cdbd2cSJim Jagielski {
621*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
622*b1cdbd2cSJim Jagielski     OSL_ENSURE(m_aStyles.getLength() == 0, "m_aStyles is not empty");
623*b1cdbd2cSJim Jagielski }
624*b1cdbd2cSJim Jagielski 
EndRunProperties(const SwRedlineData *)625*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndRunProperties( const SwRedlineData* /*pRedlineData*/ )
626*b1cdbd2cSJim Jagielski {
627*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
628*b1cdbd2cSJim Jagielski     m_aStyles.append(m_aStylesEnd.makeStringAndClear());
629*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append(m_aStyles.makeStringAndClear());
630*b1cdbd2cSJim Jagielski }
631*b1cdbd2cSJim Jagielski 
RunText(const String & rText,rtl_TextEncoding eCharSet)632*b1cdbd2cSJim Jagielski void RtfAttributeOutput::RunText( const String& rText, rtl_TextEncoding eCharSet )
633*b1cdbd2cSJim Jagielski {
634*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
635*b1cdbd2cSJim Jagielski     RawText( rText, 0, eCharSet );
636*b1cdbd2cSJim Jagielski }
637*b1cdbd2cSJim Jagielski 
RunText()638*b1cdbd2cSJim Jagielski rtl::OStringBuffer& RtfAttributeOutput::RunText()
639*b1cdbd2cSJim Jagielski {
640*b1cdbd2cSJim Jagielski     return m_aRunText.getOStringBuffer();
641*b1cdbd2cSJim Jagielski }
642*b1cdbd2cSJim Jagielski 
Styles()643*b1cdbd2cSJim Jagielski OStringBuffer& RtfAttributeOutput::Styles()
644*b1cdbd2cSJim Jagielski {
645*b1cdbd2cSJim Jagielski     return m_aStyles;
646*b1cdbd2cSJim Jagielski }
647*b1cdbd2cSJim Jagielski 
RawText(const String & rText,bool,rtl_TextEncoding eCharSet)648*b1cdbd2cSJim Jagielski void RtfAttributeOutput::RawText( const String& rText, bool /*bForceUnicode*/, rtl_TextEncoding eCharSet )
649*b1cdbd2cSJim Jagielski {
650*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
651*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(m_rExport.OutString(rText, eCharSet));
652*b1cdbd2cSJim Jagielski }
653*b1cdbd2cSJim Jagielski 
StartRuby(const SwTxtNode &,const SwFmtRuby &)654*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartRuby( const SwTxtNode& /*rNode*/, const SwFmtRuby& /*rRuby*/ )
655*b1cdbd2cSJim Jagielski {
656*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
657*b1cdbd2cSJim Jagielski }
658*b1cdbd2cSJim Jagielski 
EndRuby()659*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndRuby()
660*b1cdbd2cSJim Jagielski {
661*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
662*b1cdbd2cSJim Jagielski }
663*b1cdbd2cSJim Jagielski 
StartURL(const String & rUrl,const String & rTarget)664*b1cdbd2cSJim Jagielski bool RtfAttributeOutput::StartURL( const String& rUrl, const String& rTarget )
665*b1cdbd2cSJim Jagielski {
666*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
667*b1cdbd2cSJim Jagielski 
668*b1cdbd2cSJim Jagielski     m_aStyles.append('{');
669*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FIELD);
670*b1cdbd2cSJim Jagielski     m_aStyles.append('{');
671*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_IGNORE);
672*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FLDINST);
673*b1cdbd2cSJim Jagielski     m_aStyles.append(" HYPERLINK ");
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski     String sURL( rUrl );
676*b1cdbd2cSJim Jagielski     if( sURL.Len() )
677*b1cdbd2cSJim Jagielski     {
678*b1cdbd2cSJim Jagielski         m_aStyles.append("\"");
679*b1cdbd2cSJim Jagielski         m_aStyles.append(m_rExport.OutString( sURL, m_rExport.eCurrentEncoding));
680*b1cdbd2cSJim Jagielski         m_aStyles.append("\" ");
681*b1cdbd2cSJim Jagielski     }
682*b1cdbd2cSJim Jagielski 
683*b1cdbd2cSJim Jagielski     if( rTarget.Len() )
684*b1cdbd2cSJim Jagielski     {
685*b1cdbd2cSJim Jagielski         m_aStyles.append("\\\\t \"");
686*b1cdbd2cSJim Jagielski         m_aStyles.append(m_rExport.OutString( rTarget, m_rExport.eCurrentEncoding));
687*b1cdbd2cSJim Jagielski         m_aStyles.append("\" ");
688*b1cdbd2cSJim Jagielski     }
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski     m_aStyles.append("}");
691*b1cdbd2cSJim Jagielski     return true;
692*b1cdbd2cSJim Jagielski }
693*b1cdbd2cSJim Jagielski 
EndURL()694*b1cdbd2cSJim Jagielski bool RtfAttributeOutput::EndURL()
695*b1cdbd2cSJim Jagielski {
696*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski     // close the fldrslt group
699*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append('}');
700*b1cdbd2cSJim Jagielski     // close the field group
701*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append('}');
702*b1cdbd2cSJim Jagielski     return true;
703*b1cdbd2cSJim Jagielski }
704*b1cdbd2cSJim Jagielski 
FieldVanish(const String &,ww::eField)705*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FieldVanish( const String& /*rTxt*/, ww::eField /*eType*/ )
706*b1cdbd2cSJim Jagielski {
707*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski 
Redline(const SwRedlineData * pRedline)710*b1cdbd2cSJim Jagielski void RtfAttributeOutput::Redline( const SwRedlineData* pRedline )
711*b1cdbd2cSJim Jagielski {
712*b1cdbd2cSJim Jagielski     if (!pRedline)
713*b1cdbd2cSJim Jagielski         return;
714*b1cdbd2cSJim Jagielski 
715*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
716*b1cdbd2cSJim Jagielski 
717*b1cdbd2cSJim Jagielski     if (pRedline->GetType() == nsRedlineType_t::REDLINE_INSERT)
718*b1cdbd2cSJim Jagielski     {
719*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_REVISED);
720*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_REVAUTH);
721*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append((sal_Int32)m_rExport.GetRedline(SW_MOD()->GetRedlineAuthor(pRedline->GetAuthor())));
722*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_REVDTTM);
723*b1cdbd2cSJim Jagielski     }
724*b1cdbd2cSJim Jagielski     else if(pRedline->GetType() == nsRedlineType_t::REDLINE_DELETE)
725*b1cdbd2cSJim Jagielski     {
726*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_DELETED);
727*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_REVAUTHDEL);
728*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append((sal_Int32)m_rExport.GetRedline(SW_MOD()->GetRedlineAuthor(pRedline->GetAuthor())));
729*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_REVDTTMDEL);
730*b1cdbd2cSJim Jagielski     }
731*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append((sal_Int32)sw::ms::DateTime2DTTM(pRedline->GetTimeStamp()));
732*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append(' ');
733*b1cdbd2cSJim Jagielski }
734*b1cdbd2cSJim Jagielski 
FormatDrop(const SwTxtNode &,const SwFmtDrop &,sal_uInt16,ww8::WW8TableNodeInfo::Pointer_t,ww8::WW8TableNodeInfoInner::Pointer_t)735*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatDrop( const SwTxtNode& /*rNode*/, const SwFmtDrop& /*rSwFmtDrop*/, sal_uInt16 /*nStyle*/, ww8::WW8TableNodeInfo::Pointer_t /*pTextNodeInfo*/, ww8::WW8TableNodeInfoInner::Pointer_t /*pTextNodeInfoInner*/ )
736*b1cdbd2cSJim Jagielski {
737*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
738*b1cdbd2cSJim Jagielski }
739*b1cdbd2cSJim Jagielski 
ParagraphStyle(sal_uInt16 nStyle)740*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParagraphStyle( sal_uInt16 nStyle )
741*b1cdbd2cSJim Jagielski {
742*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
743*b1cdbd2cSJim Jagielski 
744*b1cdbd2cSJim Jagielski     OString *pStyle = m_rExport.GetStyle(nStyle);
745*b1cdbd2cSJim Jagielski     MultiBuffer aStyle;
746*b1cdbd2cSJim Jagielski 
747*b1cdbd2cSJim Jagielski     aStyle.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_S);
748*b1cdbd2cSJim Jagielski     aStyle.getOStringBuffer().append((sal_Int32)nStyle);
749*b1cdbd2cSJim Jagielski 
750*b1cdbd2cSJim Jagielski     if (pStyle)
751*b1cdbd2cSJim Jagielski     {
752*b1cdbd2cSJim Jagielski         aStyle.getOStringBuffer().append(pStyle->getStr());
753*b1cdbd2cSJim Jagielski     }
754*b1cdbd2cSJim Jagielski 
755*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionHeaders)
756*b1cdbd2cSJim Jagielski     {
757*b1cdbd2cSJim Jagielski         aStyle.writeAndClear(m_rExport.Strm());
758*b1cdbd2cSJim Jagielski     }
759*b1cdbd2cSJim Jagielski     else
760*b1cdbd2cSJim Jagielski     {
761*b1cdbd2cSJim Jagielski         m_aSectionHeaders.appendAndClear(aStyle);
762*b1cdbd2cSJim Jagielski     }
763*b1cdbd2cSJim Jagielski }
764*b1cdbd2cSJim Jagielski 
TableInfoCell(ww8::WW8TableNodeInfoInner::Pointer_t)765*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableInfoCell( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner*/ )
766*b1cdbd2cSJim Jagielski {
767*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_INTBL);
770*b1cdbd2cSJim Jagielski     if ( m_nTableDepth > 1 )
771*b1cdbd2cSJim Jagielski     {
772*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_ITAP);
773*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)m_nTableDepth);
774*b1cdbd2cSJim Jagielski     }
775*b1cdbd2cSJim Jagielski     m_bWroteCellInfo = true;
776*b1cdbd2cSJim Jagielski }
777*b1cdbd2cSJim Jagielski 
TableInfoRow(ww8::WW8TableNodeInfoInner::Pointer_t)778*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableInfoRow( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfo*/ )
779*b1cdbd2cSJim Jagielski {
780*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
781*b1cdbd2cSJim Jagielski 
782*b1cdbd2cSJim Jagielski     /* noop */
783*b1cdbd2cSJim Jagielski }
784*b1cdbd2cSJim Jagielski 
TableDefinition(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)785*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableDefinition( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
786*b1cdbd2cSJim Jagielski {
787*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
788*b1cdbd2cSJim Jagielski 
789*b1cdbd2cSJim Jagielski     if ( !m_pTableWrt )
790*b1cdbd2cSJim Jagielski         InitTableHelper( pTableTextNodeInfoInner );
791*b1cdbd2cSJim Jagielski 
792*b1cdbd2cSJim Jagielski     const SwTableBox *pTblBox = pTableTextNodeInfoInner->getTableBox( );
793*b1cdbd2cSJim Jagielski     SwFrmFmt *pFmt = pTblBox->GetFrmFmt( );
794*b1cdbd2cSJim Jagielski 
795*b1cdbd2cSJim Jagielski     m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_TROWD);
796*b1cdbd2cSJim Jagielski     TableOrientation( pTableTextNodeInfoInner );
797*b1cdbd2cSJim Jagielski     TableBidi( pTableTextNodeInfoInner );
798*b1cdbd2cSJim Jagielski     TableHeight( pTableTextNodeInfoInner );
799*b1cdbd2cSJim Jagielski     TableCanSplit( pTableTextNodeInfoInner );
800*b1cdbd2cSJim Jagielski 
801*b1cdbd2cSJim Jagielski     // Cell margins
802*b1cdbd2cSJim Jagielski     const SvxBoxItem& rBox = pFmt->GetBox( );
803*b1cdbd2cSJim Jagielski     static const sal_uInt16 aBorders[] =
804*b1cdbd2cSJim Jagielski     {
805*b1cdbd2cSJim Jagielski         BOX_LINE_TOP, BOX_LINE_LEFT, BOX_LINE_BOTTOM, BOX_LINE_RIGHT
806*b1cdbd2cSJim Jagielski     };
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski     static const char* aRowPadNames[] =
809*b1cdbd2cSJim Jagielski     {
810*b1cdbd2cSJim Jagielski         OOO_STRING_SVTOOLS_RTF_TRPADDT, OOO_STRING_SVTOOLS_RTF_TRPADDL, OOO_STRING_SVTOOLS_RTF_TRPADDB, OOO_STRING_SVTOOLS_RTF_TRPADDR
811*b1cdbd2cSJim Jagielski     };
812*b1cdbd2cSJim Jagielski 
813*b1cdbd2cSJim Jagielski     static const char* aRowPadUnits[] =
814*b1cdbd2cSJim Jagielski     {
815*b1cdbd2cSJim Jagielski         OOO_STRING_SVTOOLS_RTF_TRPADDFT, OOO_STRING_SVTOOLS_RTF_TRPADDFL, OOO_STRING_SVTOOLS_RTF_TRPADDFB, OOO_STRING_SVTOOLS_RTF_TRPADDFR
816*b1cdbd2cSJim Jagielski     };
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski     for (int i = 0; i < 4; ++i)
819*b1cdbd2cSJim Jagielski     {
820*b1cdbd2cSJim Jagielski         m_aRowDefs.append(aRowPadUnits[i]);
821*b1cdbd2cSJim Jagielski         m_aRowDefs.append((sal_Int32)3);
822*b1cdbd2cSJim Jagielski         m_aRowDefs.append(aRowPadNames[i]);
823*b1cdbd2cSJim Jagielski         m_aRowDefs.append((sal_Int32)rBox.GetDistance(aBorders[i]));
824*b1cdbd2cSJim Jagielski     }
825*b1cdbd2cSJim Jagielski 
826*b1cdbd2cSJim Jagielski     // The cell-dependent properties
827*b1cdbd2cSJim Jagielski     const SwWriteTableRows& aRows = m_pTableWrt->GetRows( );
828*b1cdbd2cSJim Jagielski     SwWriteTableRow *pRow = aRows[ pTableTextNodeInfoInner->getRow( ) ];
829*b1cdbd2cSJim Jagielski     SwTwips nSz = 0;
830*b1cdbd2cSJim Jagielski     Point aPt;
831*b1cdbd2cSJim Jagielski     SwRect aRect( pFmt->FindLayoutRect( false, &aPt ));
832*b1cdbd2cSJim Jagielski     SwTwips nPageSize = aRect.Width();
833*b1cdbd2cSJim Jagielski     SwTwips nTblSz = pFmt->GetFrmSize().GetWidth();
834*b1cdbd2cSJim Jagielski     for( sal_uInt16 i = 0; i < pRow->GetCells().Count(); i++ )
835*b1cdbd2cSJim Jagielski     {
836*b1cdbd2cSJim Jagielski         SwWriteTableCell *pCell = pRow->GetCells( )[ i ];
837*b1cdbd2cSJim Jagielski         const SwFrmFmt *pCellFmt = pCell->GetBox()->GetFrmFmt();
838*b1cdbd2cSJim Jagielski 
839*b1cdbd2cSJim Jagielski         pTableTextNodeInfoInner->setCell( i );
840*b1cdbd2cSJim Jagielski         TableCellProperties(pTableTextNodeInfoInner);
841*b1cdbd2cSJim Jagielski 
842*b1cdbd2cSJim Jagielski         // Right boundary: this can't be in TableCellProperties as the old
843*b1cdbd2cSJim Jagielski         // value of nSz is needed.
844*b1cdbd2cSJim Jagielski         nSz += pCellFmt->GetFrmSize().GetWidth();
845*b1cdbd2cSJim Jagielski         m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CELLX);
846*b1cdbd2cSJim Jagielski         SwTwips nCalc = nSz;
847*b1cdbd2cSJim Jagielski         nCalc *= nPageSize;
848*b1cdbd2cSJim Jagielski         nCalc /= nTblSz;
849*b1cdbd2cSJim Jagielski         m_aRowDefs.append( (sal_Int32)(pFmt->GetLRSpace().GetLeft() + nCalc) );
850*b1cdbd2cSJim Jagielski     }
851*b1cdbd2cSJim Jagielski }
852*b1cdbd2cSJim Jagielski 
TableDefaultBorders(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)853*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableDefaultBorders( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
854*b1cdbd2cSJim Jagielski {
855*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
856*b1cdbd2cSJim Jagielski 
857*b1cdbd2cSJim Jagielski     /*
858*b1cdbd2cSJim Jagielski      * The function name is a bit misleading: given that we write borders
859*b1cdbd2cSJim Jagielski      * before each row, we just have borders, not default ones. Additionally,
860*b1cdbd2cSJim Jagielski      * this function actually writes borders for a specific cell only and is
861*b1cdbd2cSJim Jagielski      * called for each cell.
862*b1cdbd2cSJim Jagielski      */
863*b1cdbd2cSJim Jagielski 
864*b1cdbd2cSJim Jagielski     const SwTableBox *pTblBox = pTableTextNodeInfoInner->getTableBox( );
865*b1cdbd2cSJim Jagielski     SwFrmFmt *pFmt = pTblBox->GetFrmFmt( );
866*b1cdbd2cSJim Jagielski     const SvxBoxItem& rDefault = pFmt->GetBox( );
867*b1cdbd2cSJim Jagielski     const SwWriteTableRows& aRows = m_pTableWrt->GetRows( );
868*b1cdbd2cSJim Jagielski     SwWriteTableRow *pRow = aRows[ pTableTextNodeInfoInner->getRow( ) ];
869*b1cdbd2cSJim Jagielski     SwWriteTableCell *pCell = pRow->GetCells( )[ pTableTextNodeInfoInner->getCell( ) ];
870*b1cdbd2cSJim Jagielski     const SwFrmFmt *pCellFmt = pCell->GetBox()->GetFrmFmt();
871*b1cdbd2cSJim Jagielski     const SfxPoolItem* pItem;
872*b1cdbd2cSJim Jagielski     if (SFX_ITEM_SET == pCellFmt->GetAttrSet().GetItemState(RES_BOX, sal_True, &pItem))
873*b1cdbd2cSJim Jagielski     {
874*b1cdbd2cSJim Jagielski         const SvxBoxItem& rBox = (SvxBoxItem&)*pItem;
875*b1cdbd2cSJim Jagielski         static const sal_uInt16 aBorders[] =
876*b1cdbd2cSJim Jagielski         {
877*b1cdbd2cSJim Jagielski             BOX_LINE_TOP, BOX_LINE_LEFT, BOX_LINE_BOTTOM, BOX_LINE_RIGHT
878*b1cdbd2cSJim Jagielski         };
879*b1cdbd2cSJim Jagielski         static const char* aBorderNames[] =
880*b1cdbd2cSJim Jagielski         {
881*b1cdbd2cSJim Jagielski             OOO_STRING_SVTOOLS_RTF_CLBRDRT, OOO_STRING_SVTOOLS_RTF_CLBRDRL, OOO_STRING_SVTOOLS_RTF_CLBRDRB, OOO_STRING_SVTOOLS_RTF_CLBRDRR
882*b1cdbd2cSJim Jagielski         };
883*b1cdbd2cSJim Jagielski         //Yes left and top are swapped with eachother for cell padding! Because
884*b1cdbd2cSJim Jagielski         //that's what the thunderingly annoying rtf export/import word xp does.
885*b1cdbd2cSJim Jagielski         static const char* aCellPadNames[] =
886*b1cdbd2cSJim Jagielski         {
887*b1cdbd2cSJim Jagielski             OOO_STRING_SVTOOLS_RTF_CLPADL, OOO_STRING_SVTOOLS_RTF_CLPADT, OOO_STRING_SVTOOLS_RTF_CLPADB, OOO_STRING_SVTOOLS_RTF_CLPADR
888*b1cdbd2cSJim Jagielski         };
889*b1cdbd2cSJim Jagielski         static const char* aCellPadUnits[] =
890*b1cdbd2cSJim Jagielski         {
891*b1cdbd2cSJim Jagielski             OOO_STRING_SVTOOLS_RTF_CLPADFL, OOO_STRING_SVTOOLS_RTF_CLPADFT, OOO_STRING_SVTOOLS_RTF_CLPADFB, OOO_STRING_SVTOOLS_RTF_CLPADFR
892*b1cdbd2cSJim Jagielski         };
893*b1cdbd2cSJim Jagielski         for (int i = 0; i < 4; ++i)
894*b1cdbd2cSJim Jagielski         {
895*b1cdbd2cSJim Jagielski             if (const SvxBorderLine* pLn = rBox.GetLine(aBorders[i]))
896*b1cdbd2cSJim Jagielski                 m_aRowDefs.append(OutTBLBorderLine(m_rExport, pLn, aBorderNames[i]));
897*b1cdbd2cSJim Jagielski             if (rDefault.GetDistance(aBorders[i]) !=
898*b1cdbd2cSJim Jagielski                     rBox.GetDistance(aBorders[i]))
899*b1cdbd2cSJim Jagielski             {
900*b1cdbd2cSJim Jagielski                 m_aRowDefs.append(aCellPadUnits[i]);
901*b1cdbd2cSJim Jagielski                 m_aRowDefs.append((sal_Int32)3);
902*b1cdbd2cSJim Jagielski                 m_aRowDefs.append(aCellPadNames[i]);
903*b1cdbd2cSJim Jagielski                 m_aRowDefs.append((sal_Int32)rBox.GetDistance(aBorders[i]));
904*b1cdbd2cSJim Jagielski             }
905*b1cdbd2cSJim Jagielski         }
906*b1cdbd2cSJim Jagielski     }
907*b1cdbd2cSJim Jagielski }
908*b1cdbd2cSJim Jagielski 
TableBackgrounds(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)909*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableBackgrounds( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
910*b1cdbd2cSJim Jagielski {
911*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
912*b1cdbd2cSJim Jagielski 
913*b1cdbd2cSJim Jagielski     const SwWriteTableRows& aRows = m_pTableWrt->GetRows( );
914*b1cdbd2cSJim Jagielski     SwWriteTableRow *pRow = aRows[ pTableTextNodeInfoInner->getRow( ) ];
915*b1cdbd2cSJim Jagielski     SwWriteTableCell *pCell = pRow->GetCells( )[ pTableTextNodeInfoInner->getCell( ) ];
916*b1cdbd2cSJim Jagielski     const SwFrmFmt *pCellFmt = pCell->GetBox()->GetFrmFmt();
917*b1cdbd2cSJim Jagielski     const SfxPoolItem* pItem;
918*b1cdbd2cSJim Jagielski     if( SFX_ITEM_SET == pCellFmt->GetAttrSet().GetItemState(
919*b1cdbd2cSJim Jagielski                 RES_BACKGROUND, sal_True, &pItem ))
920*b1cdbd2cSJim Jagielski     {
921*b1cdbd2cSJim Jagielski         const SvxBrushItem& rBack = (SvxBrushItem&)*pItem;
922*b1cdbd2cSJim Jagielski         if( !rBack.GetColor().GetTransparency() )
923*b1cdbd2cSJim Jagielski         {
924*b1cdbd2cSJim Jagielski             m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLCBPAT);
925*b1cdbd2cSJim Jagielski             m_aRowDefs.append((sal_Int32)m_rExport.GetColor(rBack.GetColor()));
926*b1cdbd2cSJim Jagielski         }
927*b1cdbd2cSJim Jagielski     }
928*b1cdbd2cSJim Jagielski }
929*b1cdbd2cSJim Jagielski 
TableHeight(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)930*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableHeight( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
931*b1cdbd2cSJim Jagielski {
932*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
933*b1cdbd2cSJim Jagielski 
934*b1cdbd2cSJim Jagielski     const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
935*b1cdbd2cSJim Jagielski     const SwTableLine * pTabLine = pTabBox->GetUpper();
936*b1cdbd2cSJim Jagielski     const SwFrmFmt * pLineFmt = pTabLine->GetFrmFmt();
937*b1cdbd2cSJim Jagielski     const SwFmtFrmSize& rLSz = pLineFmt->GetFrmSize();
938*b1cdbd2cSJim Jagielski 
939*b1cdbd2cSJim Jagielski     if ( ATT_VAR_SIZE != rLSz.GetHeightSizeType() && rLSz.GetHeight() )
940*b1cdbd2cSJim Jagielski     {
941*b1cdbd2cSJim Jagielski         sal_Int32 nHeight = 0;
942*b1cdbd2cSJim Jagielski 
943*b1cdbd2cSJim Jagielski         switch ( rLSz.GetHeightSizeType() )
944*b1cdbd2cSJim Jagielski         {
945*b1cdbd2cSJim Jagielski             case ATT_FIX_SIZE: nHeight = -rLSz.GetHeight(); break;
946*b1cdbd2cSJim Jagielski             case ATT_MIN_SIZE: nHeight = rLSz.GetHeight(); break;
947*b1cdbd2cSJim Jagielski             default:           break;
948*b1cdbd2cSJim Jagielski         }
949*b1cdbd2cSJim Jagielski 
950*b1cdbd2cSJim Jagielski         if ( nHeight )
951*b1cdbd2cSJim Jagielski         {
952*b1cdbd2cSJim Jagielski             m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_TRRH);
953*b1cdbd2cSJim Jagielski             m_aRowDefs.append(nHeight);
954*b1cdbd2cSJim Jagielski         }
955*b1cdbd2cSJim Jagielski     }
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski 
TableCanSplit(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)958*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableCanSplit( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
961*b1cdbd2cSJim Jagielski 
962*b1cdbd2cSJim Jagielski     const SwTableBox * pTabBox = pTableTextNodeInfoInner->getTableBox();
963*b1cdbd2cSJim Jagielski     const SwTableLine * pTabLine = pTabBox->GetUpper();
964*b1cdbd2cSJim Jagielski     const SwFrmFmt * pLineFmt = pTabLine->GetFrmFmt();
965*b1cdbd2cSJim Jagielski     const SwFmtRowSplit& rSplittable = pLineFmt->GetRowSplit( );
966*b1cdbd2cSJim Jagielski 
967*b1cdbd2cSJim Jagielski     // The rtf default is to allow a row to break
968*b1cdbd2cSJim Jagielski     if (rSplittable.GetValue() == 0)
969*b1cdbd2cSJim Jagielski         m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_TRKEEP);
970*b1cdbd2cSJim Jagielski }
971*b1cdbd2cSJim Jagielski 
TableBidi(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)972*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableBidi( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
973*b1cdbd2cSJim Jagielski {
974*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
975*b1cdbd2cSJim Jagielski 
976*b1cdbd2cSJim Jagielski     const SwTable * pTable = pTableTextNodeInfoInner->getTable();
977*b1cdbd2cSJim Jagielski     const SwFrmFmt * pFrmFmt = pTable->GetFrmFmt();
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski     if ( m_rExport.TrueFrameDirection( *pFrmFmt ) != FRMDIR_HORI_RIGHT_TOP )
980*b1cdbd2cSJim Jagielski         m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_LTRROW);
981*b1cdbd2cSJim Jagielski     else
982*b1cdbd2cSJim Jagielski         m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_RTLROW);
983*b1cdbd2cSJim Jagielski }
984*b1cdbd2cSJim Jagielski 
TableVerticalCell(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)985*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableVerticalCell( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
986*b1cdbd2cSJim Jagielski {
987*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
988*b1cdbd2cSJim Jagielski 
989*b1cdbd2cSJim Jagielski     const SwWriteTableRows& aRows = m_pTableWrt->GetRows( );
990*b1cdbd2cSJim Jagielski     SwWriteTableRow *pRow = aRows[ pTableTextNodeInfoInner->getRow( ) ];
991*b1cdbd2cSJim Jagielski     SwWriteTableCell *pCell = pRow->GetCells( )[ pTableTextNodeInfoInner->getCell( ) ];
992*b1cdbd2cSJim Jagielski     const SwFrmFmt *pCellFmt = pCell->GetBox()->GetFrmFmt();
993*b1cdbd2cSJim Jagielski     const SfxPoolItem* pItem;
994*b1cdbd2cSJim Jagielski 
995*b1cdbd2cSJim Jagielski     // vertical merges
996*b1cdbd2cSJim Jagielski     if (pCell->GetRowSpan() > 1)
997*b1cdbd2cSJim Jagielski         m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLVMGF);
998*b1cdbd2cSJim Jagielski     else if (pCell->GetRowSpan() == 0)
999*b1cdbd2cSJim Jagielski         m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLVMRG);
1000*b1cdbd2cSJim Jagielski 
1001*b1cdbd2cSJim Jagielski     // vertical alignment
1002*b1cdbd2cSJim Jagielski     if( SFX_ITEM_SET == pCellFmt->GetAttrSet().GetItemState(
1003*b1cdbd2cSJim Jagielski                 RES_VERT_ORIENT, sal_True, &pItem ) )
1004*b1cdbd2cSJim Jagielski         switch( ((SwFmtVertOrient*)pItem)->GetVertOrient() )
1005*b1cdbd2cSJim Jagielski         {
1006*b1cdbd2cSJim Jagielski             case text::VertOrientation::CENTER: m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLVERTALC); break;
1007*b1cdbd2cSJim Jagielski             case text::VertOrientation::BOTTOM: m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLVERTALB); break;
1008*b1cdbd2cSJim Jagielski             default:                            m_aRowDefs.append(OOO_STRING_SVTOOLS_RTF_CLVERTALT); break;
1009*b1cdbd2cSJim Jagielski         }
1010*b1cdbd2cSJim Jagielski }
1011*b1cdbd2cSJim Jagielski 
TableNodeInfo(ww8::WW8TableNodeInfo::Pointer_t)1012*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableNodeInfo( ww8::WW8TableNodeInfo::Pointer_t /*pNodeInfo*/ )
1013*b1cdbd2cSJim Jagielski {
1014*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1015*b1cdbd2cSJim Jagielski 
1016*b1cdbd2cSJim Jagielski     /* noop */
1017*b1cdbd2cSJim Jagielski }
1018*b1cdbd2cSJim Jagielski 
TableNodeInfoInner(ww8::WW8TableNodeInfoInner::Pointer_t pNodeInfoInner)1019*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableNodeInfoInner( ww8::WW8TableNodeInfoInner::Pointer_t pNodeInfoInner )
1020*b1cdbd2cSJim Jagielski {
1021*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1022*b1cdbd2cSJim Jagielski 
1023*b1cdbd2cSJim Jagielski     // This is called when the nested table ends in a cell, and there's no
1024*b1cdbd2cSJim Jagielski     // paragraph benhind that; so we must check for the ends of cell, rows,
1025*b1cdbd2cSJim Jagielski     // and tables
1026*b1cdbd2cSJim Jagielski     // ['true' to write an empty paragraph, MS Word insists on that]
1027*b1cdbd2cSJim Jagielski     FinishTableRowCell( pNodeInfoInner, true );
1028*b1cdbd2cSJim Jagielski }
1029*b1cdbd2cSJim Jagielski 
TableOrientation(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)1030*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableOrientation( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
1031*b1cdbd2cSJim Jagielski {
1032*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1033*b1cdbd2cSJim Jagielski 
1034*b1cdbd2cSJim Jagielski     const SwTable *pTable = pTableTextNodeInfoInner->getTable();
1035*b1cdbd2cSJim Jagielski     SwFrmFmt *pFmt = pTable->GetFrmFmt( );
1036*b1cdbd2cSJim Jagielski 
1037*b1cdbd2cSJim Jagielski     OStringBuffer aTblAdjust( OOO_STRING_SVTOOLS_RTF_TRQL );
1038*b1cdbd2cSJim Jagielski     switch (pFmt->GetHoriOrient().GetHoriOrient())
1039*b1cdbd2cSJim Jagielski     {
1040*b1cdbd2cSJim Jagielski         case text::HoriOrientation::CENTER:
1041*b1cdbd2cSJim Jagielski             aTblAdjust.setLength(0);
1042*b1cdbd2cSJim Jagielski             aTblAdjust.append(OOO_STRING_SVTOOLS_RTF_TRQC);
1043*b1cdbd2cSJim Jagielski             break;
1044*b1cdbd2cSJim Jagielski         case text::HoriOrientation::RIGHT:
1045*b1cdbd2cSJim Jagielski             aTblAdjust.setLength(0);
1046*b1cdbd2cSJim Jagielski             aTblAdjust.append(OOO_STRING_SVTOOLS_RTF_TRQR);
1047*b1cdbd2cSJim Jagielski             break;
1048*b1cdbd2cSJim Jagielski         case text::HoriOrientation::NONE:
1049*b1cdbd2cSJim Jagielski         case text::HoriOrientation::LEFT_AND_WIDTH:
1050*b1cdbd2cSJim Jagielski             aTblAdjust.append(OOO_STRING_SVTOOLS_RTF_TRLEFT);
1051*b1cdbd2cSJim Jagielski             aTblAdjust.append((sal_Int32)pFmt->GetLRSpace().GetLeft());
1052*b1cdbd2cSJim Jagielski             break;
1053*b1cdbd2cSJim Jagielski         default:
1054*b1cdbd2cSJim Jagielski             break;
1055*b1cdbd2cSJim Jagielski     }
1056*b1cdbd2cSJim Jagielski 
1057*b1cdbd2cSJim Jagielski     m_aRowDefs.append(aTblAdjust.makeStringAndClear());
1058*b1cdbd2cSJim Jagielski }
1059*b1cdbd2cSJim Jagielski 
TableSpacing(ww8::WW8TableNodeInfoInner::Pointer_t)1060*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableSpacing( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner*/ )
1061*b1cdbd2cSJim Jagielski {
1062*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
1063*b1cdbd2cSJim Jagielski }
1064*b1cdbd2cSJim Jagielski 
TableRowEnd(sal_uInt32)1065*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableRowEnd( sal_uInt32 /*nDepth*/ )
1066*b1cdbd2cSJim Jagielski {
1067*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1068*b1cdbd2cSJim Jagielski 
1069*b1cdbd2cSJim Jagielski     /* noop, see EndTableRow() */
1070*b1cdbd2cSJim Jagielski }
1071*b1cdbd2cSJim Jagielski 
1072*b1cdbd2cSJim Jagielski /*
1073*b1cdbd2cSJim Jagielski  * Our private table methods.
1074*b1cdbd2cSJim Jagielski  */
1075*b1cdbd2cSJim Jagielski 
InitTableHelper(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)1076*b1cdbd2cSJim Jagielski void RtfAttributeOutput::InitTableHelper( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
1077*b1cdbd2cSJim Jagielski {
1078*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski     sal_uInt32 nPageSize = 0;
1081*b1cdbd2cSJim Jagielski     bool bRelBoxSize = false;
1082*b1cdbd2cSJim Jagielski 
1083*b1cdbd2cSJim Jagielski     // Create the SwWriteTable instance to use col spans
1084*b1cdbd2cSJim Jagielski     GetTablePageSize( pTableTextNodeInfoInner.get(), nPageSize, bRelBoxSize );
1085*b1cdbd2cSJim Jagielski 
1086*b1cdbd2cSJim Jagielski     const SwTable* pTable = pTableTextNodeInfoInner->getTable( );
1087*b1cdbd2cSJim Jagielski     const SwFrmFmt *pFmt = pTable->GetFrmFmt( );
1088*b1cdbd2cSJim Jagielski     SwTwips nTblSz = pFmt->GetFrmSize( ).GetWidth( );
1089*b1cdbd2cSJim Jagielski 
1090*b1cdbd2cSJim Jagielski     const SwHTMLTableLayout *pLayout = pTable->GetHTMLTableLayout();
1091*b1cdbd2cSJim Jagielski     if( pLayout && pLayout->IsExportable() )
1092*b1cdbd2cSJim Jagielski         m_pTableWrt = new SwWriteTable( pLayout );
1093*b1cdbd2cSJim Jagielski     else
1094*b1cdbd2cSJim Jagielski         m_pTableWrt = new SwWriteTable( pTable->GetTabLines(), (sal_uInt16)nPageSize,
1095*b1cdbd2cSJim Jagielski                 (sal_uInt16)nTblSz, false);
1096*b1cdbd2cSJim Jagielski }
1097*b1cdbd2cSJim Jagielski 
StartTable(ww8::WW8TableNodeInfoInner::Pointer_t)1098*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartTable( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner*/ )
1099*b1cdbd2cSJim Jagielski {
1100*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1101*b1cdbd2cSJim Jagielski 
1102*b1cdbd2cSJim Jagielski     // To trigger calling InitTableHelper()
1103*b1cdbd2cSJim Jagielski     delete m_pTableWrt, m_pTableWrt = NULL;
1104*b1cdbd2cSJim Jagielski }
1105*b1cdbd2cSJim Jagielski 
StartTableRow(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)1106*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartTableRow( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
1107*b1cdbd2cSJim Jagielski {
1108*b1cdbd2cSJim Jagielski     sal_uInt32 nCurrentDepth = pTableTextNodeInfoInner->getDepth();
1109*b1cdbd2cSJim Jagielski     OSL_TRACE("%s, (depth is %d)", OSL_THIS_FUNC, (int)nCurrentDepth);
1110*b1cdbd2cSJim Jagielski 
1111*b1cdbd2cSJim Jagielski     TableDefinition(pTableTextNodeInfoInner);
1112*b1cdbd2cSJim Jagielski 
1113*b1cdbd2cSJim Jagielski     if (!m_bLastTable)
1114*b1cdbd2cSJim Jagielski         m_aTables.push_back(m_aRowDefs.makeStringAndClear());
1115*b1cdbd2cSJim Jagielski 
1116*b1cdbd2cSJim Jagielski     // We'll write the table definition for nested tables later
1117*b1cdbd2cSJim Jagielski     if ( nCurrentDepth > 1 )
1118*b1cdbd2cSJim Jagielski         return;
1119*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_aRowDefs.makeStringAndClear();
1120*b1cdbd2cSJim Jagielski }
1121*b1cdbd2cSJim Jagielski 
StartTableCell(ww8::WW8TableNodeInfoInner::Pointer_t)1122*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartTableCell( ww8::WW8TableNodeInfoInner::Pointer_t /*pTableTextNodeInfoInner*/ )
1123*b1cdbd2cSJim Jagielski {
1124*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1125*b1cdbd2cSJim Jagielski 
1126*b1cdbd2cSJim Jagielski     m_bTableCellOpen = true;
1127*b1cdbd2cSJim Jagielski }
1128*b1cdbd2cSJim Jagielski 
TableCellProperties(ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner)1129*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TableCellProperties( ww8::WW8TableNodeInfoInner::Pointer_t pTableTextNodeInfoInner )
1130*b1cdbd2cSJim Jagielski {
1131*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1132*b1cdbd2cSJim Jagielski 
1133*b1cdbd2cSJim Jagielski     TableDefaultBorders(pTableTextNodeInfoInner);
1134*b1cdbd2cSJim Jagielski     TableBackgrounds(pTableTextNodeInfoInner);
1135*b1cdbd2cSJim Jagielski     TableVerticalCell(pTableTextNodeInfoInner);
1136*b1cdbd2cSJim Jagielski }
1137*b1cdbd2cSJim Jagielski 
EndTableCell()1138*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndTableCell( )
1139*b1cdbd2cSJim Jagielski {
1140*b1cdbd2cSJim Jagielski     OSL_TRACE("%s, (depth is %d)", OSL_THIS_FUNC, (int)m_nTableDepth);
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski     if (!m_bWroteCellInfo)
1143*b1cdbd2cSJim Jagielski     {
1144*b1cdbd2cSJim Jagielski         m_aAfterRuns.append(OOO_STRING_SVTOOLS_RTF_INTBL);
1145*b1cdbd2cSJim Jagielski         m_aAfterRuns.append(OOO_STRING_SVTOOLS_RTF_ITAP);
1146*b1cdbd2cSJim Jagielski         m_aAfterRuns.append((sal_Int32)m_nTableDepth);
1147*b1cdbd2cSJim Jagielski     }
1148*b1cdbd2cSJim Jagielski     if ( m_nTableDepth > 1 )
1149*b1cdbd2cSJim Jagielski         m_aAfterRuns.append(OOO_STRING_SVTOOLS_RTF_NESTCELL);
1150*b1cdbd2cSJim Jagielski     else
1151*b1cdbd2cSJim Jagielski         m_aAfterRuns.append(OOO_STRING_SVTOOLS_RTF_CELL);
1152*b1cdbd2cSJim Jagielski 
1153*b1cdbd2cSJim Jagielski     m_bTableCellOpen = false;
1154*b1cdbd2cSJim Jagielski     m_bTblAfterCell = true;
1155*b1cdbd2cSJim Jagielski     m_bWroteCellInfo = false;
1156*b1cdbd2cSJim Jagielski }
1157*b1cdbd2cSJim Jagielski 
EndTableRow()1158*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndTableRow( )
1159*b1cdbd2cSJim Jagielski {
1160*b1cdbd2cSJim Jagielski     OSL_TRACE("%s, (depth is %d)", OSL_THIS_FUNC, (int)m_nTableDepth);
1161*b1cdbd2cSJim Jagielski 
1162*b1cdbd2cSJim Jagielski     if ( m_nTableDepth > 1 )
1163*b1cdbd2cSJim Jagielski     {
1164*b1cdbd2cSJim Jagielski         m_aAfterRuns.append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_NESTTABLEPROPRS);
1165*b1cdbd2cSJim Jagielski         if (m_aRowDefs.getLength() > 0)
1166*b1cdbd2cSJim Jagielski             m_aAfterRuns.append(m_aRowDefs.makeStringAndClear());
1167*b1cdbd2cSJim Jagielski         else if (m_aTables.size() > 0)
1168*b1cdbd2cSJim Jagielski         {
1169*b1cdbd2cSJim Jagielski             m_aAfterRuns.append(m_aTables.back());
1170*b1cdbd2cSJim Jagielski             m_aTables.pop_back();
1171*b1cdbd2cSJim Jagielski         }
1172*b1cdbd2cSJim Jagielski         m_aAfterRuns.append(OOO_STRING_SVTOOLS_RTF_NESTROW "}" "{" OOO_STRING_SVTOOLS_RTF_NONESTTABLES OOO_STRING_SVTOOLS_RTF_PAR "}");
1173*b1cdbd2cSJim Jagielski     }
1174*b1cdbd2cSJim Jagielski     else
1175*b1cdbd2cSJim Jagielski     {
1176*b1cdbd2cSJim Jagielski         if (m_aTables.size() > 0)
1177*b1cdbd2cSJim Jagielski         {
1178*b1cdbd2cSJim Jagielski             m_aAfterRuns.append(m_aTables.back());
1179*b1cdbd2cSJim Jagielski             m_aTables.pop_back();
1180*b1cdbd2cSJim Jagielski         }
1181*b1cdbd2cSJim Jagielski         m_aAfterRuns.append(OOO_STRING_SVTOOLS_RTF_ROW);
1182*b1cdbd2cSJim Jagielski     }
1183*b1cdbd2cSJim Jagielski }
1184*b1cdbd2cSJim Jagielski 
EndTable()1185*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndTable()
1186*b1cdbd2cSJim Jagielski {
1187*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1188*b1cdbd2cSJim Jagielski 
1189*b1cdbd2cSJim Jagielski     if ( m_nTableDepth > 0 ) {
1190*b1cdbd2cSJim Jagielski         m_nTableDepth--;
1191*b1cdbd2cSJim Jagielski         delete m_pTableWrt, m_pTableWrt = NULL;
1192*b1cdbd2cSJim Jagielski     }
1193*b1cdbd2cSJim Jagielski 
1194*b1cdbd2cSJim Jagielski     // We closed the table; if it is a nested table, the cell that contains it
1195*b1cdbd2cSJim Jagielski     // still continues
1196*b1cdbd2cSJim Jagielski     m_bTableCellOpen = true;
1197*b1cdbd2cSJim Jagielski 
1198*b1cdbd2cSJim Jagielski     // Cleans the table helper
1199*b1cdbd2cSJim Jagielski     delete m_pTableWrt, m_pTableWrt = NULL;
1200*b1cdbd2cSJim Jagielski }
1201*b1cdbd2cSJim Jagielski 
FinishTableRowCell(ww8::WW8TableNodeInfoInner::Pointer_t pInner,bool)1202*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FinishTableRowCell( ww8::WW8TableNodeInfoInner::Pointer_t pInner, bool /*bForceEmptyParagraph*/ )
1203*b1cdbd2cSJim Jagielski {
1204*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1205*b1cdbd2cSJim Jagielski 
1206*b1cdbd2cSJim Jagielski     if ( pInner.get() )
1207*b1cdbd2cSJim Jagielski     {
1208*b1cdbd2cSJim Jagielski         // Where are we in the table
1209*b1cdbd2cSJim Jagielski         sal_uInt32 nRow = pInner->getRow( );
1210*b1cdbd2cSJim Jagielski 
1211*b1cdbd2cSJim Jagielski         const SwTable *pTable = pInner->getTable( );
1212*b1cdbd2cSJim Jagielski         const SwTableLines& rLines = pTable->GetTabLines( );
1213*b1cdbd2cSJim Jagielski         sal_uInt16 nLinesCount = rLines.Count( );
1214*b1cdbd2cSJim Jagielski 
1215*b1cdbd2cSJim Jagielski         if ( pInner->isEndOfCell() )
1216*b1cdbd2cSJim Jagielski             EndTableCell();
1217*b1cdbd2cSJim Jagielski 
1218*b1cdbd2cSJim Jagielski         // This is a line end
1219*b1cdbd2cSJim Jagielski         if ( pInner->isEndOfLine() )
1220*b1cdbd2cSJim Jagielski             EndTableRow();
1221*b1cdbd2cSJim Jagielski 
1222*b1cdbd2cSJim Jagielski         // This is the end of the table
1223*b1cdbd2cSJim Jagielski         if ( pInner->isEndOfLine( ) && ( nRow + 1 ) == nLinesCount )
1224*b1cdbd2cSJim Jagielski             EndTable();
1225*b1cdbd2cSJim Jagielski     }
1226*b1cdbd2cSJim Jagielski }
1227*b1cdbd2cSJim Jagielski 
StartStyles()1228*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartStyles()
1229*b1cdbd2cSJim Jagielski {
1230*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1231*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_rExport.sNewLine << '{' << OOO_STRING_SVTOOLS_RTF_COLORTBL;
1232*b1cdbd2cSJim Jagielski     m_rExport.OutColorTable();
1233*b1cdbd2cSJim Jagielski     OSL_ENSURE(m_aStylesheet.getLength() == 0, "m_aStylesheet is not empty");
1234*b1cdbd2cSJim Jagielski     m_aStylesheet.append(m_rExport.sNewLine);
1235*b1cdbd2cSJim Jagielski     m_aStylesheet.append('{');
1236*b1cdbd2cSJim Jagielski     m_aStylesheet.append(OOO_STRING_SVTOOLS_RTF_STYLESHEET);
1237*b1cdbd2cSJim Jagielski }
1238*b1cdbd2cSJim Jagielski 
EndStyles(sal_uInt16)1239*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndStyles( sal_uInt16 /*nNumberOfStyles*/ )
1240*b1cdbd2cSJim Jagielski {
1241*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1242*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '}';
1243*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_aStylesheet.makeStringAndClear();
1244*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '}';
1245*b1cdbd2cSJim Jagielski }
1246*b1cdbd2cSJim Jagielski 
DefaultStyle(sal_uInt16)1247*b1cdbd2cSJim Jagielski void RtfAttributeOutput::DefaultStyle( sal_uInt16 /*nStyle*/ )
1248*b1cdbd2cSJim Jagielski {
1249*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1250*b1cdbd2cSJim Jagielski 
1251*b1cdbd2cSJim Jagielski     /* noop, the default style is always 0 in RTF */
1252*b1cdbd2cSJim Jagielski }
1253*b1cdbd2cSJim Jagielski 
StartStyle(const String & rName,bool bPapFmt,sal_uInt16 nBase,sal_uInt16 nNext,sal_uInt16,sal_uInt16 nId)1254*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartStyle( const String& rName, bool bPapFmt,
1255*b1cdbd2cSJim Jagielski         sal_uInt16 nBase, sal_uInt16 nNext, sal_uInt16 /*nWwId*/, sal_uInt16 nId )
1256*b1cdbd2cSJim Jagielski {
1257*b1cdbd2cSJim Jagielski     OSL_TRACE("%s, rName = '%s'", OSL_THIS_FUNC,
1258*b1cdbd2cSJim Jagielski             OUStringToOString( OUString( rName ), m_rExport.eCurrentEncoding ).getStr());
1259*b1cdbd2cSJim Jagielski 
1260*b1cdbd2cSJim Jagielski     m_aStylesheet.append('{');
1261*b1cdbd2cSJim Jagielski     if (bPapFmt)
1262*b1cdbd2cSJim Jagielski         m_aStylesheet.append(OOO_STRING_SVTOOLS_RTF_S);
1263*b1cdbd2cSJim Jagielski     else
1264*b1cdbd2cSJim Jagielski         m_aStylesheet.append( OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_CS);
1265*b1cdbd2cSJim Jagielski     m_aStylesheet.append( (sal_Int32)nId );
1266*b1cdbd2cSJim Jagielski 
1267*b1cdbd2cSJim Jagielski     if ( nBase != 0x0FFF )
1268*b1cdbd2cSJim Jagielski     {
1269*b1cdbd2cSJim Jagielski         m_aStylesheet.append(OOO_STRING_SVTOOLS_RTF_SBASEDON);
1270*b1cdbd2cSJim Jagielski         m_aStylesheet.append((sal_Int32)nBase);
1271*b1cdbd2cSJim Jagielski     }
1272*b1cdbd2cSJim Jagielski 
1273*b1cdbd2cSJim Jagielski     m_aStylesheet.append(OOO_STRING_SVTOOLS_RTF_SNEXT);
1274*b1cdbd2cSJim Jagielski     m_aStylesheet.append((sal_Int32)nNext);
1275*b1cdbd2cSJim Jagielski 
1276*b1cdbd2cSJim Jagielski     m_rStyleName = rName;
1277*b1cdbd2cSJim Jagielski     m_nStyleId = nId;
1278*b1cdbd2cSJim Jagielski }
1279*b1cdbd2cSJim Jagielski 
EndStyle()1280*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndStyle()
1281*b1cdbd2cSJim Jagielski {
1282*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1283*b1cdbd2cSJim Jagielski     m_aStyles.append(m_aStylesEnd.makeStringAndClear());
1284*b1cdbd2cSJim Jagielski     OString aStyles = m_aStyles.makeStringAndClear();
1285*b1cdbd2cSJim Jagielski     m_rExport.InsStyle(m_nStyleId, aStyles);
1286*b1cdbd2cSJim Jagielski     m_aStylesheet.append(aStyles);
1287*b1cdbd2cSJim Jagielski     m_aStylesheet.append(' ');
1288*b1cdbd2cSJim Jagielski     m_aStylesheet.append(OUStringToOString( OUString( m_rStyleName ), m_rExport.eCurrentEncoding ));
1289*b1cdbd2cSJim Jagielski     m_aStylesheet.append(";}");
1290*b1cdbd2cSJim Jagielski     m_aStylesheet.append(m_rExport.sNewLine);
1291*b1cdbd2cSJim Jagielski }
1292*b1cdbd2cSJim Jagielski 
StartStyleProperties(bool,sal_uInt16)1293*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartStyleProperties( bool /*bParProp*/, sal_uInt16 /*nStyle*/ )
1294*b1cdbd2cSJim Jagielski {
1295*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1296*b1cdbd2cSJim Jagielski     /* noop */
1297*b1cdbd2cSJim Jagielski }
1298*b1cdbd2cSJim Jagielski 
EndStyleProperties(bool)1299*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndStyleProperties( bool /*bParProp*/ )
1300*b1cdbd2cSJim Jagielski {
1301*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1302*b1cdbd2cSJim Jagielski     /* noop */
1303*b1cdbd2cSJim Jagielski }
1304*b1cdbd2cSJim Jagielski 
OutlineNumbering(sal_uInt8 nLvl,const SwNumFmt &,const SwFmt &)1305*b1cdbd2cSJim Jagielski void RtfAttributeOutput::OutlineNumbering( sal_uInt8 nLvl, const SwNumFmt& /*rNFmt*/, const SwFmt& /*rFmt*/ )
1306*b1cdbd2cSJim Jagielski {
1307*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1308*b1cdbd2cSJim Jagielski 
1309*b1cdbd2cSJim Jagielski     if ( nLvl >= WW8ListManager::nMaxLevel )
1310*b1cdbd2cSJim Jagielski         nLvl = WW8ListManager::nMaxLevel - 1;
1311*b1cdbd2cSJim Jagielski 
1312*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_ILVL);
1313*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)nLvl);
1314*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_OUTLINELEVEL);
1315*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)nLvl);
1316*b1cdbd2cSJim Jagielski }
1317*b1cdbd2cSJim Jagielski 
PageBreakBefore(bool bBreak)1318*b1cdbd2cSJim Jagielski void RtfAttributeOutput::PageBreakBefore( bool bBreak )
1319*b1cdbd2cSJim Jagielski {
1320*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1321*b1cdbd2cSJim Jagielski 
1322*b1cdbd2cSJim Jagielski     if (bBreak)
1323*b1cdbd2cSJim Jagielski     {
1324*b1cdbd2cSJim Jagielski         m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_PAGEBB;
1325*b1cdbd2cSJim Jagielski     }
1326*b1cdbd2cSJim Jagielski }
1327*b1cdbd2cSJim Jagielski 
SectionBreak(sal_uInt8 nC,const WW8_SepInfo * pSectionInfo)1328*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionBreak( sal_uInt8 nC, const WW8_SepInfo* pSectionInfo )
1329*b1cdbd2cSJim Jagielski {
1330*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1331*b1cdbd2cSJim Jagielski 
1332*b1cdbd2cSJim Jagielski     switch (nC)
1333*b1cdbd2cSJim Jagielski     {
1334*b1cdbd2cSJim Jagielski         case msword::ColumnBreak:
1335*b1cdbd2cSJim Jagielski             m_nColBreakNeeded = true;
1336*b1cdbd2cSJim Jagielski             break;
1337*b1cdbd2cSJim Jagielski         case msword::PageBreak:
1338*b1cdbd2cSJim Jagielski             if ( pSectionInfo )
1339*b1cdbd2cSJim Jagielski                 m_rExport.SectionProperties( *pSectionInfo );
1340*b1cdbd2cSJim Jagielski             break;
1341*b1cdbd2cSJim Jagielski     }
1342*b1cdbd2cSJim Jagielski }
1343*b1cdbd2cSJim Jagielski 
StartSection()1344*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartSection()
1345*b1cdbd2cSJim Jagielski {
1346*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1347*b1cdbd2cSJim Jagielski 
1348*b1cdbd2cSJim Jagielski     m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_SECT OOO_STRING_SVTOOLS_RTF_SECTD);
1349*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionBreaks)
1350*b1cdbd2cSJim Jagielski         m_rExport.Strm() << m_aSectionBreaks.makeStringAndClear();
1351*b1cdbd2cSJim Jagielski }
1352*b1cdbd2cSJim Jagielski 
EndSection()1353*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndSection()
1354*b1cdbd2cSJim Jagielski {
1355*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1356*b1cdbd2cSJim Jagielski 
1357*b1cdbd2cSJim Jagielski     /*
1358*b1cdbd2cSJim Jagielski      * noop, \sect must go to StartSection or Word won't notice multiple
1359*b1cdbd2cSJim Jagielski      * columns...
1360*b1cdbd2cSJim Jagielski      */
1361*b1cdbd2cSJim Jagielski }
1362*b1cdbd2cSJim Jagielski 
SectionFormProtection(bool bProtected)1363*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionFormProtection( bool bProtected )
1364*b1cdbd2cSJim Jagielski {
1365*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1366*b1cdbd2cSJim Jagielski 
1367*b1cdbd2cSJim Jagielski     m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_SECTUNLOCKED);
1368*b1cdbd2cSJim Jagielski     m_aSectionBreaks.append((sal_Int32)!bProtected);
1369*b1cdbd2cSJim Jagielski }
1370*b1cdbd2cSJim Jagielski 
SectionLineNumbering(sal_uLong,const SwLineNumberInfo & rLnNumInfo)1371*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionLineNumbering( sal_uLong /*nRestartNo*/, const SwLineNumberInfo& rLnNumInfo )
1372*b1cdbd2cSJim Jagielski {
1373*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1374*b1cdbd2cSJim Jagielski 
1375*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LINEMOD;
1376*b1cdbd2cSJim Jagielski     m_rExport.OutLong(rLnNumInfo.GetCountBy());
1377*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LINEX;
1378*b1cdbd2cSJim Jagielski     m_rExport.OutLong(rLnNumInfo.GetPosFromLeft());
1379*b1cdbd2cSJim Jagielski     if (!rLnNumInfo.IsRestartEachPage())
1380*b1cdbd2cSJim Jagielski         m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LINECONT;
1381*b1cdbd2cSJim Jagielski }
1382*b1cdbd2cSJim Jagielski 
SectionTitlePage()1383*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionTitlePage()
1384*b1cdbd2cSJim Jagielski {
1385*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1386*b1cdbd2cSJim Jagielski 
1387*b1cdbd2cSJim Jagielski     /*
1388*b1cdbd2cSJim Jagielski      * noop, handled in RtfExport::WriteHeaderFooter()
1389*b1cdbd2cSJim Jagielski      */
1390*b1cdbd2cSJim Jagielski }
1391*b1cdbd2cSJim Jagielski 
SectionPageBorders(const SwFrmFmt * pFmt,const SwFrmFmt *)1392*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionPageBorders( const SwFrmFmt* pFmt, const SwFrmFmt* /*pFirstPageFmt*/ )
1393*b1cdbd2cSJim Jagielski {
1394*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1395*b1cdbd2cSJim Jagielski 
1396*b1cdbd2cSJim Jagielski     const SvxBoxItem& rBox = pFmt->GetBox();
1397*b1cdbd2cSJim Jagielski     const SvxBorderLine *pLine = rBox.GetTop();
1398*b1cdbd2cSJim Jagielski     if(pLine)
1399*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OutBorderLine( m_rExport, pLine,
1400*b1cdbd2cSJim Jagielski                     OOO_STRING_SVTOOLS_RTF_PGBRDRT,
1401*b1cdbd2cSJim Jagielski                     rBox.GetDistance(BOX_LINE_TOP) ));
1402*b1cdbd2cSJim Jagielski     pLine = rBox.GetBottom();
1403*b1cdbd2cSJim Jagielski     if(pLine)
1404*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OutBorderLine( m_rExport, pLine,
1405*b1cdbd2cSJim Jagielski                     OOO_STRING_SVTOOLS_RTF_PGBRDRB,
1406*b1cdbd2cSJim Jagielski                     rBox.GetDistance(BOX_LINE_BOTTOM) ));
1407*b1cdbd2cSJim Jagielski     pLine = rBox.GetLeft();
1408*b1cdbd2cSJim Jagielski     if(pLine)
1409*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OutBorderLine( m_rExport, pLine,
1410*b1cdbd2cSJim Jagielski                     OOO_STRING_SVTOOLS_RTF_PGBRDRL,
1411*b1cdbd2cSJim Jagielski                     rBox.GetDistance(BOX_LINE_LEFT) ));
1412*b1cdbd2cSJim Jagielski     pLine = rBox.GetRight();
1413*b1cdbd2cSJim Jagielski     if(pLine)
1414*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OutBorderLine( m_rExport, pLine,
1415*b1cdbd2cSJim Jagielski                     OOO_STRING_SVTOOLS_RTF_PGBRDRR,
1416*b1cdbd2cSJim Jagielski                     rBox.GetDistance(BOX_LINE_RIGHT) ));
1417*b1cdbd2cSJim Jagielski }
1418*b1cdbd2cSJim Jagielski 
SectionBiDi(bool bBiDi)1419*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionBiDi( bool bBiDi )
1420*b1cdbd2cSJim Jagielski {
1421*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1422*b1cdbd2cSJim Jagielski 
1423*b1cdbd2cSJim Jagielski     m_rExport.Strm() << (bBiDi ? OOO_STRING_SVTOOLS_RTF_RTLSECT : OOO_STRING_SVTOOLS_RTF_LTRSECT);
1424*b1cdbd2cSJim Jagielski }
1425*b1cdbd2cSJim Jagielski 
SectionPageNumbering(sal_uInt16 nNumType,sal_uInt16 nPageRestartNumber)1426*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionPageNumbering( sal_uInt16 nNumType, sal_uInt16 nPageRestartNumber )
1427*b1cdbd2cSJim Jagielski {
1428*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1429*b1cdbd2cSJim Jagielski 
1430*b1cdbd2cSJim Jagielski     if (nPageRestartNumber > 0)
1431*b1cdbd2cSJim Jagielski     {
1432*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_PGNSTARTS);
1433*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append((sal_Int32)nPageRestartNumber);
1434*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_PGNRESTART);
1435*b1cdbd2cSJim Jagielski     }
1436*b1cdbd2cSJim Jagielski 
1437*b1cdbd2cSJim Jagielski     const char* pStr = 0;
1438*b1cdbd2cSJim Jagielski     switch ( nNumType )
1439*b1cdbd2cSJim Jagielski     {
1440*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_UPPER_LETTER:
1441*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_UPPER_LETTER_N:  pStr = OOO_STRING_SVTOOLS_RTF_PGNUCLTR; break;
1442*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_LOWER_LETTER:
1443*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_LOWER_LETTER_N:  pStr = OOO_STRING_SVTOOLS_RTF_PGNLCLTR; break;
1444*b1cdbd2cSJim Jagielski         case SVX_NUM_ROMAN_UPPER:           pStr = OOO_STRING_SVTOOLS_RTF_PGNUCRM;  break;
1445*b1cdbd2cSJim Jagielski         case SVX_NUM_ROMAN_LOWER:           pStr = OOO_STRING_SVTOOLS_RTF_PGNLCRM;  break;
1446*b1cdbd2cSJim Jagielski 
1447*b1cdbd2cSJim Jagielski         case SVX_NUM_ARABIC:                pStr = OOO_STRING_SVTOOLS_RTF_PGNDEC;     break;
1448*b1cdbd2cSJim Jagielski     }
1449*b1cdbd2cSJim Jagielski     if (pStr)
1450*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(pStr);
1451*b1cdbd2cSJim Jagielski }
1452*b1cdbd2cSJim Jagielski 
SectionType(sal_uInt8 nBreakCode)1453*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SectionType( sal_uInt8 nBreakCode )
1454*b1cdbd2cSJim Jagielski {
1455*b1cdbd2cSJim Jagielski     OSL_TRACE("%s, nBreakCode = %d", OSL_THIS_FUNC, nBreakCode);
1456*b1cdbd2cSJim Jagielski 
1457*b1cdbd2cSJim Jagielski     /*
1458*b1cdbd2cSJim Jagielski      * break code:   0 No break, 1 New column
1459*b1cdbd2cSJim Jagielski      * 2 New page, 3 Even page, 4 Odd page
1460*b1cdbd2cSJim Jagielski      */
1461*b1cdbd2cSJim Jagielski     const char* sType = NULL;
1462*b1cdbd2cSJim Jagielski     switch ( nBreakCode )
1463*b1cdbd2cSJim Jagielski     {
1464*b1cdbd2cSJim Jagielski         case 1:  sType = OOO_STRING_SVTOOLS_RTF_SBKCOL; break;
1465*b1cdbd2cSJim Jagielski         case 2:  sType = OOO_STRING_SVTOOLS_RTF_SBKPAGE; break;
1466*b1cdbd2cSJim Jagielski         case 3:  sType = OOO_STRING_SVTOOLS_RTF_SBKEVEN; break;
1467*b1cdbd2cSJim Jagielski         case 4:  sType = OOO_STRING_SVTOOLS_RTF_SBKODD; break;
1468*b1cdbd2cSJim Jagielski         default: sType = OOO_STRING_SVTOOLS_RTF_SBKNONE; break;
1469*b1cdbd2cSJim Jagielski     }
1470*b1cdbd2cSJim Jagielski     m_aSectionBreaks.append(sType);
1471*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionBreaks)
1472*b1cdbd2cSJim Jagielski         m_rExport.Strm() << m_aSectionBreaks.makeStringAndClear();
1473*b1cdbd2cSJim Jagielski }
1474*b1cdbd2cSJim Jagielski 
NumberingDefinition(sal_uInt16 nId,const SwNumRule &)1475*b1cdbd2cSJim Jagielski void RtfAttributeOutput::NumberingDefinition( sal_uInt16 nId, const SwNumRule &/*rRule*/ )
1476*b1cdbd2cSJim Jagielski {
1477*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1478*b1cdbd2cSJim Jagielski 
1479*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '{' << OOO_STRING_SVTOOLS_RTF_LISTOVERRIDE;
1480*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LISTID;
1481*b1cdbd2cSJim Jagielski     m_rExport.OutULong(nId);
1482*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LISTOVERRIDECOUNT << '0';
1483*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LS;
1484*b1cdbd2cSJim Jagielski     m_rExport.OutULong(nId) << '}';
1485*b1cdbd2cSJim Jagielski }
1486*b1cdbd2cSJim Jagielski 
StartAbstractNumbering(sal_uInt16 nId)1487*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartAbstractNumbering( sal_uInt16 nId )
1488*b1cdbd2cSJim Jagielski {
1489*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1490*b1cdbd2cSJim Jagielski 
1491*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '{' << OOO_STRING_SVTOOLS_RTF_LIST << OOO_STRING_SVTOOLS_RTF_LISTTEMPLATEID;
1492*b1cdbd2cSJim Jagielski     m_rExport.OutULong( nId );
1493*b1cdbd2cSJim Jagielski     m_nListId = nId;
1494*b1cdbd2cSJim Jagielski }
1495*b1cdbd2cSJim Jagielski 
EndAbstractNumbering()1496*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndAbstractNumbering()
1497*b1cdbd2cSJim Jagielski {
1498*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1499*b1cdbd2cSJim Jagielski 
1500*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LISTID;
1501*b1cdbd2cSJim Jagielski     m_rExport.OutULong( m_nListId ) << '}' << m_rExport.sNewLine;
1502*b1cdbd2cSJim Jagielski }
1503*b1cdbd2cSJim Jagielski 
NumberingLevel(sal_uInt8 nLevel,sal_uInt16 nStart,sal_uInt16 nNumberingType,SvxAdjust eAdjust,const sal_uInt8 * pNumLvlPos,sal_uInt8,const wwFont * pFont,const SfxItemSet * pOutSet,sal_Int16 nIndentAt,sal_Int16 nFirstLineIndex,sal_Int16,const String & rNumberingString,const SvxBrushItem *)1504*b1cdbd2cSJim Jagielski void RtfAttributeOutput::NumberingLevel( sal_uInt8 nLevel,
1505*b1cdbd2cSJim Jagielski         sal_uInt16 nStart,
1506*b1cdbd2cSJim Jagielski         sal_uInt16 nNumberingType,
1507*b1cdbd2cSJim Jagielski         SvxAdjust eAdjust,
1508*b1cdbd2cSJim Jagielski         const sal_uInt8 * pNumLvlPos,
1509*b1cdbd2cSJim Jagielski         sal_uInt8 /*nFollow*/,
1510*b1cdbd2cSJim Jagielski         const wwFont * pFont,
1511*b1cdbd2cSJim Jagielski         const SfxItemSet * pOutSet,
1512*b1cdbd2cSJim Jagielski         sal_Int16 nIndentAt,
1513*b1cdbd2cSJim Jagielski         sal_Int16 nFirstLineIndex,
1514*b1cdbd2cSJim Jagielski         sal_Int16 /*nListTabPos*/,
1515*b1cdbd2cSJim Jagielski         const String &rNumberingString,
1516*b1cdbd2cSJim Jagielski         const SvxBrushItem* /* pBrush */)
1517*b1cdbd2cSJim Jagielski {
1518*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1519*b1cdbd2cSJim Jagielski 
1520*b1cdbd2cSJim Jagielski     m_rExport.Strm() << m_rExport.sNewLine;
1521*b1cdbd2cSJim Jagielski     if( nLevel > 8 ) // RTF knows only 9 levels
1522*b1cdbd2cSJim Jagielski         m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_IGNORE << OOO_STRING_SVTOOLS_RTF_SOUTLVL;
1523*b1cdbd2cSJim Jagielski 
1524*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '{' << OOO_STRING_SVTOOLS_RTF_LISTLEVEL;
1525*b1cdbd2cSJim Jagielski 
1526*b1cdbd2cSJim Jagielski     sal_uInt16 nVal = 0;
1527*b1cdbd2cSJim Jagielski     switch( nNumberingType )
1528*b1cdbd2cSJim Jagielski     {
1529*b1cdbd2cSJim Jagielski         case SVX_NUM_ROMAN_UPPER:                   nVal = 1;       break;
1530*b1cdbd2cSJim Jagielski         case SVX_NUM_ROMAN_LOWER:                   nVal = 2;       break;
1531*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_UPPER_LETTER:
1532*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_UPPER_LETTER_N:  nVal = 3;       break;
1533*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_LOWER_LETTER:
1534*b1cdbd2cSJim Jagielski         case SVX_NUM_CHARS_LOWER_LETTER_N:  nVal = 4;       break;
1535*b1cdbd2cSJim Jagielski 
1536*b1cdbd2cSJim Jagielski         case SVX_NUM_BITMAP:
1537*b1cdbd2cSJim Jagielski         case SVX_NUM_CHAR_SPECIAL:                  nVal = 23;      break;
1538*b1cdbd2cSJim Jagielski     }
1539*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LEVELNFC;
1540*b1cdbd2cSJim Jagielski     m_rExport.OutULong( nVal );
1541*b1cdbd2cSJim Jagielski 
1542*b1cdbd2cSJim Jagielski     switch( eAdjust )
1543*b1cdbd2cSJim Jagielski     {
1544*b1cdbd2cSJim Jagielski         case SVX_ADJUST_CENTER:             nVal = 1;       break;
1545*b1cdbd2cSJim Jagielski         case SVX_ADJUST_RIGHT:              nVal = 2;       break;
1546*b1cdbd2cSJim Jagielski         default:                            nVal = 0;       break;
1547*b1cdbd2cSJim Jagielski     }
1548*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LEVELJC;
1549*b1cdbd2cSJim Jagielski     m_rExport.OutULong( nVal );
1550*b1cdbd2cSJim Jagielski 
1551*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LEVELSTARTAT;
1552*b1cdbd2cSJim Jagielski     m_rExport.OutULong( nStart );
1553*b1cdbd2cSJim Jagielski 
1554*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_LEVELFOLLOW << "0";
1555*b1cdbd2cSJim Jagielski 
1556*b1cdbd2cSJim Jagielski     // leveltext group
1557*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '{' << OOO_STRING_SVTOOLS_RTF_LEVELTEXT << ' ';
1558*b1cdbd2cSJim Jagielski 
1559*b1cdbd2cSJim Jagielski     if( SVX_NUM_CHAR_SPECIAL == nNumberingType ||
1560*b1cdbd2cSJim Jagielski             SVX_NUM_BITMAP == nNumberingType )
1561*b1cdbd2cSJim Jagielski     {
1562*b1cdbd2cSJim Jagielski         m_rExport.Strm() << "\\'01";
1563*b1cdbd2cSJim Jagielski         sal_Unicode cChar = rNumberingString.GetChar(0);
1564*b1cdbd2cSJim Jagielski         m_rExport.Strm() << "\\u";
1565*b1cdbd2cSJim Jagielski         m_rExport.OutULong(cChar);
1566*b1cdbd2cSJim Jagielski         m_rExport.Strm() << " ?";
1567*b1cdbd2cSJim Jagielski     }
1568*b1cdbd2cSJim Jagielski     else
1569*b1cdbd2cSJim Jagielski     {
1570*b1cdbd2cSJim Jagielski         m_rExport.Strm() << "\\'" << m_rExport.OutHex( rNumberingString.Len(), 2 );
1571*b1cdbd2cSJim Jagielski         m_rExport.Strm() << m_rExport.OutString( rNumberingString, m_rExport.eDefaultEncoding );
1572*b1cdbd2cSJim Jagielski     }
1573*b1cdbd2cSJim Jagielski 
1574*b1cdbd2cSJim Jagielski     m_rExport.Strm() << ";}";
1575*b1cdbd2cSJim Jagielski 
1576*b1cdbd2cSJim Jagielski     // write the levelnumbers
1577*b1cdbd2cSJim Jagielski     m_rExport.Strm() << "{" << OOO_STRING_SVTOOLS_RTF_LEVELNUMBERS;
1578*b1cdbd2cSJim Jagielski     for( sal_uInt8 i = 0; i <= nLevel && pNumLvlPos[ i ]; ++i )
1579*b1cdbd2cSJim Jagielski     {
1580*b1cdbd2cSJim Jagielski         m_rExport.Strm() << "\\'" << m_rExport.OutHex(pNumLvlPos[ i ], 2).getStr();
1581*b1cdbd2cSJim Jagielski     }
1582*b1cdbd2cSJim Jagielski     m_rExport.Strm() << ";}";
1583*b1cdbd2cSJim Jagielski 
1584*b1cdbd2cSJim Jagielski     if( pOutSet )
1585*b1cdbd2cSJim Jagielski     {
1586*b1cdbd2cSJim Jagielski         if (pFont)
1587*b1cdbd2cSJim Jagielski         {
1588*b1cdbd2cSJim Jagielski             m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_F;
1589*b1cdbd2cSJim Jagielski             m_rExport.OutULong(m_rExport.maFontHelper.GetId(*pFont));
1590*b1cdbd2cSJim Jagielski         }
1591*b1cdbd2cSJim Jagielski         m_rExport.OutputItemSet( *pOutSet, false, true, i18n::ScriptType::LATIN, m_rExport.mbExportModeRTF );
1592*b1cdbd2cSJim Jagielski         m_rExport.Strm() << m_aStyles.makeStringAndClear();
1593*b1cdbd2cSJim Jagielski     }
1594*b1cdbd2cSJim Jagielski 
1595*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_FI;
1596*b1cdbd2cSJim Jagielski     m_rExport.OutLong( nFirstLineIndex ) << OOO_STRING_SVTOOLS_RTF_LI;
1597*b1cdbd2cSJim Jagielski     m_rExport.OutLong( nIndentAt );
1598*b1cdbd2cSJim Jagielski 
1599*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '}';
1600*b1cdbd2cSJim Jagielski     if( nLevel > 8 )
1601*b1cdbd2cSJim Jagielski         m_rExport.Strm() << '}';
1602*b1cdbd2cSJim Jagielski }
1603*b1cdbd2cSJim Jagielski 
WriteField_Impl(const SwField * pFld,ww::eField,const String & rFldCmd,sal_uInt8)1604*b1cdbd2cSJim Jagielski void RtfAttributeOutput::WriteField_Impl( const SwField* pFld, ww::eField /*eType*/, const String& rFldCmd, sal_uInt8 /*nMode*/ )
1605*b1cdbd2cSJim Jagielski {
1606*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1607*b1cdbd2cSJim Jagielski 
1608*b1cdbd2cSJim Jagielski     // NEEDSWORK this has beeen tested only with page numbers
1609*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_FIELD);
1610*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FLDINST " ");
1611*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(m_rExport.OutString(rFldCmd, m_rExport.eCurrentEncoding));
1612*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("}{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " ");
1613*b1cdbd2cSJim Jagielski     if (pFld)
1614*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(m_rExport.OutString(pFld->ExpandField(true), m_rExport.eDefaultEncoding));
1615*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("}}");
1616*b1cdbd2cSJim Jagielski }
1617*b1cdbd2cSJim Jagielski 
WriteBookmarks_Impl(std::vector<rtl::OUString> & rStarts,std::vector<rtl::OUString> & rEnds)1618*b1cdbd2cSJim Jagielski void RtfAttributeOutput::WriteBookmarks_Impl( std::vector< rtl::OUString >& rStarts, std::vector< rtl::OUString >& rEnds )
1619*b1cdbd2cSJim Jagielski {
1620*b1cdbd2cSJim Jagielski     for ( std::vector< OUString >::const_iterator it = rStarts.begin(), end = rStarts.end(); it < end; ++it )
1621*b1cdbd2cSJim Jagielski     {
1622*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BKMKSTART " ");
1623*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(m_rExport.OutString(*it, m_rExport.eCurrentEncoding));
1624*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append('}');
1625*b1cdbd2cSJim Jagielski     }
1626*b1cdbd2cSJim Jagielski     rStarts.clear();
1627*b1cdbd2cSJim Jagielski 
1628*b1cdbd2cSJim Jagielski     for ( std::vector< OUString >::const_iterator it = rEnds.begin(), end = rEnds.end(); it < end; ++it )
1629*b1cdbd2cSJim Jagielski     {
1630*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_BKMKEND " ");
1631*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(m_rExport.OutString(*it, m_rExport.eCurrentEncoding));
1632*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append('}');
1633*b1cdbd2cSJim Jagielski     }
1634*b1cdbd2cSJim Jagielski     rEnds.clear();
1635*b1cdbd2cSJim Jagielski }
1636*b1cdbd2cSJim Jagielski 
WriteHeaderFooter_Impl(const SwFrmFmt & rFmt,bool bHeader,const sal_Char * pStr)1637*b1cdbd2cSJim Jagielski void RtfAttributeOutput::WriteHeaderFooter_Impl( const SwFrmFmt& rFmt, bool bHeader, const sal_Char* pStr )
1638*b1cdbd2cSJim Jagielski {
1639*b1cdbd2cSJim Jagielski     OStringBuffer aSectionBreaks = m_aSectionBreaks;
1640*b1cdbd2cSJim Jagielski     m_aSectionBreaks.setLength(0);
1641*b1cdbd2cSJim Jagielski 
1642*b1cdbd2cSJim Jagielski     MultiBuffer aTemp;
1643*b1cdbd2cSJim Jagielski     aTemp.appendAndClear(m_aRun);
1644*b1cdbd2cSJim Jagielski 
1645*b1cdbd2cSJim Jagielski     m_aSectionHeaders.getOStringBuffer().append(bHeader ? OOO_STRING_SVTOOLS_RTF_HEADERY : OOO_STRING_SVTOOLS_RTF_FOOTERY);
1646*b1cdbd2cSJim Jagielski     m_aSectionHeaders.getOStringBuffer().append((sal_Int32)m_rExport.pAktPageDesc->GetMaster().GetULSpace().GetUpper());
1647*b1cdbd2cSJim Jagielski     m_aSectionHeaders.getOStringBuffer().append('{');
1648*b1cdbd2cSJim Jagielski     m_aSectionHeaders.getOStringBuffer().append(pStr);
1649*b1cdbd2cSJim Jagielski     m_bBufferSectionHeaders = true;
1650*b1cdbd2cSJim Jagielski     m_rExport.WriteHeaderFooterText(rFmt, bHeader);
1651*b1cdbd2cSJim Jagielski     m_bBufferSectionHeaders = false;
1652*b1cdbd2cSJim Jagielski     m_aSectionHeaders.getOStringBuffer().append('}');
1653*b1cdbd2cSJim Jagielski     m_aSectionBreaks = aSectionBreaks;
1654*b1cdbd2cSJim Jagielski 
1655*b1cdbd2cSJim Jagielski     m_aRun.clear();
1656*b1cdbd2cSJim Jagielski     m_aRun.appendAndClear(aTemp);
1657*b1cdbd2cSJim Jagielski }
1658*b1cdbd2cSJim Jagielski 
OutputFlyFrame_Impl(const sw::Frame & rFrame,const Point &)1659*b1cdbd2cSJim Jagielski void RtfAttributeOutput::OutputFlyFrame_Impl( const sw::Frame& rFrame, const Point& /*rNdTopLeft*/ )
1660*b1cdbd2cSJim Jagielski {
1661*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1662*b1cdbd2cSJim Jagielski 
1663*b1cdbd2cSJim Jagielski     const SwNode *pNode = rFrame.GetContent();
1664*b1cdbd2cSJim Jagielski     const SwGrfNode *pGrfNode = pNode ? pNode->GetGrfNode() : 0;
1665*b1cdbd2cSJim Jagielski 
1666*b1cdbd2cSJim Jagielski     switch ( rFrame.GetWriterType() )
1667*b1cdbd2cSJim Jagielski     {
1668*b1cdbd2cSJim Jagielski         case sw::Frame::eTxtBox:
1669*b1cdbd2cSJim Jagielski             OSL_ENSURE(m_aRunText.empty(), "m_aRunText is not empty");
1670*b1cdbd2cSJim Jagielski             m_rExport.mpParentFrame = &rFrame;
1671*b1cdbd2cSJim Jagielski             m_rExport.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = true;
1672*b1cdbd2cSJim Jagielski             m_rExport.OutputFormat( rFrame.GetFrmFmt(), false, false, true );
1673*b1cdbd2cSJim Jagielski             m_aRunText.writeAndClear(m_rExport.Strm());
1674*b1cdbd2cSJim Jagielski             m_rExport.Strm() << m_aStyles.makeStringAndClear();
1675*b1cdbd2cSJim Jagielski             m_rExport.bOutFlyFrmAttrs = m_rExport.bRTFFlySyntax = false;
1676*b1cdbd2cSJim Jagielski             m_rExport.Strm() << "{" OOO_STRING_SVTOOLS_RTF_IGNORE;
1677*b1cdbd2cSJim Jagielski             m_rExport.OutputFormat( rFrame.GetFrmFmt(), false, false, true );
1678*b1cdbd2cSJim Jagielski             m_aRunText.writeAndClear(m_rExport.Strm());
1679*b1cdbd2cSJim Jagielski             m_rExport.Strm() << m_aStyles.makeStringAndClear();
1680*b1cdbd2cSJim Jagielski             m_rExport.Strm() << '}';
1681*b1cdbd2cSJim Jagielski 
1682*b1cdbd2cSJim Jagielski             {
1683*b1cdbd2cSJim Jagielski                 /*
1684*b1cdbd2cSJim Jagielski                  * Save m_aRun as we should not loose the opening brace.
1685*b1cdbd2cSJim Jagielski                  * OTOH, just drop the contents of m_aRunText in case something
1686*b1cdbd2cSJim Jagielski                  * would be there, causing a problem later.
1687*b1cdbd2cSJim Jagielski                  */
1688*b1cdbd2cSJim Jagielski                 MultiBuffer aTemp;
1689*b1cdbd2cSJim Jagielski                 aTemp.appendAndClear(m_aRun);
1690*b1cdbd2cSJim Jagielski 
1691*b1cdbd2cSJim Jagielski                 m_rExport.bRTFFlySyntax = true;
1692*b1cdbd2cSJim Jagielski 
1693*b1cdbd2cSJim Jagielski                 const SwFrmFmt& rFrmFmt = rFrame.GetFrmFmt( );
1694*b1cdbd2cSJim Jagielski                 const SwNodeIndex* pNodeIndex = rFrmFmt.GetCntnt().GetCntntIdx();
1695*b1cdbd2cSJim Jagielski                 sal_uLong nStt = pNodeIndex ? pNodeIndex->GetIndex()+1                  : 0;
1696*b1cdbd2cSJim Jagielski                 sal_uLong nEnd = pNodeIndex ? pNodeIndex->GetNode().EndOfSectionIndex() : 0;
1697*b1cdbd2cSJim Jagielski                 m_rExport.SaveData( nStt, nEnd );
1698*b1cdbd2cSJim Jagielski                 m_rExport.mpParentFrame = &rFrame;
1699*b1cdbd2cSJim Jagielski                 m_rExport.WriteText( );
1700*b1cdbd2cSJim Jagielski                 m_rExport.RestoreData();
1701*b1cdbd2cSJim Jagielski                 m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_PARD;
1702*b1cdbd2cSJim Jagielski                 m_rExport.bRTFFlySyntax = false;
1703*b1cdbd2cSJim Jagielski 
1704*b1cdbd2cSJim Jagielski                 m_aRun.appendAndClear(aTemp);
1705*b1cdbd2cSJim Jagielski                 m_aRunText.clear();
1706*b1cdbd2cSJim Jagielski             }
1707*b1cdbd2cSJim Jagielski 
1708*b1cdbd2cSJim Jagielski             m_rExport.mpParentFrame = NULL;
1709*b1cdbd2cSJim Jagielski             m_rExport.Strm() << RtfExport::sNewLine;
1710*b1cdbd2cSJim Jagielski             break;
1711*b1cdbd2cSJim Jagielski         case sw::Frame::eGraphic:
1712*b1cdbd2cSJim Jagielski             if (!rFrame.IsInline())
1713*b1cdbd2cSJim Jagielski             {
1714*b1cdbd2cSJim Jagielski                 m_rExport.mpParentFrame = &rFrame;
1715*b1cdbd2cSJim Jagielski                 m_rExport.bRTFFlySyntax = true;
1716*b1cdbd2cSJim Jagielski                 m_rExport.OutputFormat( rFrame.GetFrmFmt(), false, false, true );
1717*b1cdbd2cSJim Jagielski                 m_rExport.bRTFFlySyntax = false;
1718*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE);
1719*b1cdbd2cSJim Jagielski                 m_rExport.OutputFormat( rFrame.GetFrmFmt(), false, false, true );
1720*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append('}');
1721*b1cdbd2cSJim Jagielski                 m_rExport.mpParentFrame = NULL;
1722*b1cdbd2cSJim Jagielski             }
1723*b1cdbd2cSJim Jagielski 
1724*b1cdbd2cSJim Jagielski             if ( pGrfNode )
1725*b1cdbd2cSJim Jagielski                 FlyFrameGraphic( dynamic_cast<const SwFlyFrmFmt*>( &rFrame.GetFrmFmt() ), *pGrfNode, rFrame.GetLayoutSize() );
1726*b1cdbd2cSJim Jagielski             break;
1727*b1cdbd2cSJim Jagielski         case sw::Frame::eDrawing:
1728*b1cdbd2cSJim Jagielski             {
1729*b1cdbd2cSJim Jagielski                 const SdrObject* pSdrObj = rFrame.GetFrmFmt().FindRealSdrObject();
1730*b1cdbd2cSJim Jagielski                 if ( pSdrObj )
1731*b1cdbd2cSJim Jagielski                 {
1732*b1cdbd2cSJim Jagielski                     bool bSwapInPage = false;
1733*b1cdbd2cSJim Jagielski                     if ( !pSdrObj->GetPage() )
1734*b1cdbd2cSJim Jagielski                     {
1735*b1cdbd2cSJim Jagielski                         if ( SdrModel* pModel = m_rExport.pDoc->GetDrawModel() )
1736*b1cdbd2cSJim Jagielski                         {
1737*b1cdbd2cSJim Jagielski                             if ( SdrPage *pPage = pModel->GetPage( 0 ) )
1738*b1cdbd2cSJim Jagielski                             {
1739*b1cdbd2cSJim Jagielski                                 bSwapInPage = true;
1740*b1cdbd2cSJim Jagielski                                 const_cast< SdrObject* >( pSdrObj )->SetPage( pPage );
1741*b1cdbd2cSJim Jagielski                             }
1742*b1cdbd2cSJim Jagielski                         }
1743*b1cdbd2cSJim Jagielski                     }
1744*b1cdbd2cSJim Jagielski 
1745*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_FIELD "{");
1746*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_IGNORE);
1747*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLDINST);
1748*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append(" SHAPE ");
1749*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append("}" "{" OOO_STRING_SVTOOLS_RTF_FLDRSLT);
1750*b1cdbd2cSJim Jagielski 
1751*b1cdbd2cSJim Jagielski                     m_rExport.SdrExporter().AddSdrObject( *pSdrObj );
1752*b1cdbd2cSJim Jagielski 
1753*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append('}');
1754*b1cdbd2cSJim Jagielski                     m_aRunText.getOStringBuffer().append('}');
1755*b1cdbd2cSJim Jagielski 
1756*b1cdbd2cSJim Jagielski                     if ( bSwapInPage )
1757*b1cdbd2cSJim Jagielski                         const_cast< SdrObject* >( pSdrObj )->SetPage( 0 );
1758*b1cdbd2cSJim Jagielski                 }
1759*b1cdbd2cSJim Jagielski             }
1760*b1cdbd2cSJim Jagielski             break;
1761*b1cdbd2cSJim Jagielski         case sw::Frame::eFormControl:
1762*b1cdbd2cSJim Jagielski             {
1763*b1cdbd2cSJim Jagielski                 const SwFrmFmt &rFrmFmt = rFrame.GetFrmFmt();
1764*b1cdbd2cSJim Jagielski                 const SdrObject *pObject = rFrmFmt.FindRealSdrObject();
1765*b1cdbd2cSJim Jagielski 
1766*b1cdbd2cSJim Jagielski                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_FIELD);
1767*b1cdbd2cSJim Jagielski                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FLDINST);
1768*b1cdbd2cSJim Jagielski 
1769*b1cdbd2cSJim Jagielski                 if (pObject && pObject->GetObjInventor() == FmFormInventor)
1770*b1cdbd2cSJim Jagielski                 {
1771*b1cdbd2cSJim Jagielski                     if (SdrUnoObj *pFormObj = PTR_CAST(SdrUnoObj,pObject))
1772*b1cdbd2cSJim Jagielski                     {
1773*b1cdbd2cSJim Jagielski                         uno::Reference< awt::XControlModel > xControlModel =
1774*b1cdbd2cSJim Jagielski                             pFormObj->GetUnoControlModel();
1775*b1cdbd2cSJim Jagielski                         uno::Reference< lang::XServiceInfo > xInfo(xControlModel, uno::UNO_QUERY);
1776*b1cdbd2cSJim Jagielski                         uno::Reference<beans::XPropertySet> xPropSet(xControlModel, uno::UNO_QUERY);
1777*b1cdbd2cSJim Jagielski                         uno::Reference<beans::XPropertySetInfo> xPropSetInfo = xPropSet->getPropertySetInfo();
1778*b1cdbd2cSJim Jagielski                         OUString sName;
1779*b1cdbd2cSJim Jagielski                         if (xInfo->supportsService(C2U("com.sun.star.form.component.CheckBox")))
1780*b1cdbd2cSJim Jagielski                         {
1781*b1cdbd2cSJim Jagielski 
1782*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OUStringToOString(OUString(FieldString(ww::eFORMCHECKBOX)), m_rExport.eCurrentEncoding));
1783*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FORMFIELD "{");
1784*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFTYPE "1"); // 1 = checkbox
1785*b1cdbd2cSJim Jagielski                             // checkbox size in half points, this seems to be always 20, see WW8Export::DoCheckBox()
1786*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFHPS "20");
1787*b1cdbd2cSJim Jagielski 
1788*b1cdbd2cSJim Jagielski                             OUString aStr;
1789*b1cdbd2cSJim Jagielski                             sName = C2U("Name");
1790*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1791*b1cdbd2cSJim Jagielski                             {
1792*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aStr;
1793*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFNAME " ");
1794*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aStr, m_rExport.eCurrentEncoding));
1795*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1796*b1cdbd2cSJim Jagielski                             }
1797*b1cdbd2cSJim Jagielski 
1798*b1cdbd2cSJim Jagielski                             sName = C2U("HelpText");
1799*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1800*b1cdbd2cSJim Jagielski                             {
1801*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aStr;
1802*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFOWNHELP);
1803*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFHELPTEXT " ");
1804*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aStr, m_rExport.eCurrentEncoding));
1805*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1806*b1cdbd2cSJim Jagielski                             }
1807*b1cdbd2cSJim Jagielski 
1808*b1cdbd2cSJim Jagielski                             sName = C2U("HelpF1Text");
1809*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1810*b1cdbd2cSJim Jagielski                             {
1811*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aStr;
1812*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFOWNSTAT);
1813*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFSTATTEXT " ");
1814*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aStr, m_rExport.eCurrentEncoding));
1815*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1816*b1cdbd2cSJim Jagielski                             }
1817*b1cdbd2cSJim Jagielski 
1818*b1cdbd2cSJim Jagielski                             sal_Int16 nTemp = 0;
1819*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("DefaultState")) >>= nTemp;
1820*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFDEFRES);
1821*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append((sal_Int32)nTemp);
1822*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("State")) >>= nTemp;
1823*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFRES);
1824*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append((sal_Int32)nTemp);
1825*b1cdbd2cSJim Jagielski 
1826*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("}}");
1827*b1cdbd2cSJim Jagielski 
1828*b1cdbd2cSJim Jagielski                             // field result is empty, ffres already contains the form result
1829*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("}{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " ");
1830*b1cdbd2cSJim Jagielski                         }
1831*b1cdbd2cSJim Jagielski                         else if (xInfo->supportsService(C2U("com.sun.star.form.component.TextField")))
1832*b1cdbd2cSJim Jagielski                         {
1833*b1cdbd2cSJim Jagielski                             OStringBuffer aBuf;
1834*b1cdbd2cSJim Jagielski                             OString aStr;
1835*b1cdbd2cSJim Jagielski                             OUString aTmp;
1836*b1cdbd2cSJim Jagielski                             const sal_Char* pStr;
1837*b1cdbd2cSJim Jagielski 
1838*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OUStringToOString(OUString(FieldString(ww::eFORMTEXT)), m_rExport.eCurrentEncoding));
1839*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_DATAFIELD " ");
1840*b1cdbd2cSJim Jagielski                             for (int i = 0; i < 8; i++) aBuf.append((sal_Char)0x00);
1841*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("Name")) >>= aTmp;
1842*b1cdbd2cSJim Jagielski                             aStr = OUStringToOString(aTmp, m_rExport.eCurrentEncoding);
1843*b1cdbd2cSJim Jagielski                             aBuf.append((sal_Char)aStr.getLength());
1844*b1cdbd2cSJim Jagielski                             aBuf.append(aStr);
1845*b1cdbd2cSJim Jagielski                             aBuf.append((sal_Char)0x00);
1846*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("DefaultText")) >>= aTmp;
1847*b1cdbd2cSJim Jagielski                             aStr = OUStringToOString(aTmp, m_rExport.eCurrentEncoding);
1848*b1cdbd2cSJim Jagielski                             aBuf.append((sal_Char)aStr.getLength());
1849*b1cdbd2cSJim Jagielski                             aBuf.append(aStr);
1850*b1cdbd2cSJim Jagielski                             for (int i = 0; i < 11; i++) aBuf.append((sal_Char)0x00);
1851*b1cdbd2cSJim Jagielski                             aStr = aBuf.makeStringAndClear();
1852*b1cdbd2cSJim Jagielski                             pStr = aStr.getStr();
1853*b1cdbd2cSJim Jagielski                             for (int i = 0; i < aStr.getLength(); i++, pStr++)
1854*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(m_rExport.OutHex(*pStr, 2));
1855*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append('}');
1856*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("}{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " ");
1857*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("Text")) >>= aTmp;
1858*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OUStringToOString(aTmp, m_rExport.eCurrentEncoding));
1859*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append('}');
1860*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FORMFIELD "{");
1861*b1cdbd2cSJim Jagielski                             sName = C2U("HelpText");
1862*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1863*b1cdbd2cSJim Jagielski                             {
1864*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aTmp;
1865*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFOWNHELP);
1866*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFHELPTEXT " ");
1867*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aTmp, m_rExport.eCurrentEncoding));
1868*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1869*b1cdbd2cSJim Jagielski                             }
1870*b1cdbd2cSJim Jagielski 
1871*b1cdbd2cSJim Jagielski                             sName = C2U("HelpF1Text");
1872*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1873*b1cdbd2cSJim Jagielski                             {
1874*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aTmp;
1875*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFOWNSTAT);
1876*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFSTATTEXT " ");
1877*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aTmp, m_rExport.eCurrentEncoding));
1878*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1879*b1cdbd2cSJim Jagielski                             }
1880*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("}");
1881*b1cdbd2cSJim Jagielski                         }
1882*b1cdbd2cSJim Jagielski                         else if (xInfo->supportsService(C2U("com.sun.star.form.component.ListBox")))
1883*b1cdbd2cSJim Jagielski                         {
1884*b1cdbd2cSJim Jagielski                             OUString aStr;
1885*b1cdbd2cSJim Jagielski                             uno::Sequence<sal_Int16> aIntSeq;
1886*b1cdbd2cSJim Jagielski                             uno::Sequence<OUString> aStrSeq;
1887*b1cdbd2cSJim Jagielski 
1888*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OUStringToOString(OUString(FieldString(ww::eFORMDROPDOWN)), m_rExport.eCurrentEncoding));
1889*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FORMFIELD "{");
1890*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFTYPE "2"); // 2 = list
1891*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFHASLISTBOX);
1892*b1cdbd2cSJim Jagielski 
1893*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("DefaultSelection")) >>= aIntSeq;
1894*b1cdbd2cSJim Jagielski                             if( aIntSeq.getLength() )
1895*b1cdbd2cSJim Jagielski                             {
1896*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFDEFRES);
1897*b1cdbd2cSJim Jagielski                                 // a dropdown list can have only one 'selected item by default'
1898*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append((sal_Int32)aIntSeq[0]);
1899*b1cdbd2cSJim Jagielski                             }
1900*b1cdbd2cSJim Jagielski 
1901*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("SelectedItems")) >>= aIntSeq;
1902*b1cdbd2cSJim Jagielski                             if( aIntSeq.getLength() )
1903*b1cdbd2cSJim Jagielski                             {
1904*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFRES);
1905*b1cdbd2cSJim Jagielski                                 // a dropdown list can have only one 'currently selected item'
1906*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append((sal_Int32)aIntSeq[0]);
1907*b1cdbd2cSJim Jagielski                             }
1908*b1cdbd2cSJim Jagielski 
1909*b1cdbd2cSJim Jagielski                             sName = C2U("Name");
1910*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1911*b1cdbd2cSJim Jagielski                             {
1912*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aStr;
1913*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFNAME " ");
1914*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aStr, m_rExport.eCurrentEncoding));
1915*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1916*b1cdbd2cSJim Jagielski                             }
1917*b1cdbd2cSJim Jagielski 
1918*b1cdbd2cSJim Jagielski                             sName = C2U("HelpText");
1919*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1920*b1cdbd2cSJim Jagielski                             {
1921*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aStr;
1922*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFOWNHELP);
1923*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFHELPTEXT " ");
1924*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aStr, m_rExport.eCurrentEncoding));
1925*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1926*b1cdbd2cSJim Jagielski                             }
1927*b1cdbd2cSJim Jagielski 
1928*b1cdbd2cSJim Jagielski                             sName = C2U("HelpF1Text");
1929*b1cdbd2cSJim Jagielski                             if (xPropSetInfo->hasPropertyByName(sName))
1930*b1cdbd2cSJim Jagielski                             {
1931*b1cdbd2cSJim Jagielski                                 xPropSet->getPropertyValue(sName) >>= aStr;
1932*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FFOWNSTAT);
1933*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFSTATTEXT " ");
1934*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append(OUStringToOString(aStr, m_rExport.eCurrentEncoding));
1935*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append('}');
1936*b1cdbd2cSJim Jagielski                             }
1937*b1cdbd2cSJim Jagielski 
1938*b1cdbd2cSJim Jagielski 
1939*b1cdbd2cSJim Jagielski                             xPropSet->getPropertyValue(C2U("StringItemList")) >>= aStrSeq;
1940*b1cdbd2cSJim Jagielski                             sal_uInt32 nListItems = aStrSeq.getLength();
1941*b1cdbd2cSJim Jagielski                             for (sal_uInt32 i = 0; i < nListItems; i++)
1942*b1cdbd2cSJim Jagielski                                 m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FFL " ")
1943*b1cdbd2cSJim Jagielski                                     .append(OUStringToOString(aStrSeq[i], m_rExport.eCurrentEncoding)).append('}');
1944*b1cdbd2cSJim Jagielski 
1945*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("}}");
1946*b1cdbd2cSJim Jagielski 
1947*b1cdbd2cSJim Jagielski                             // field result is empty, ffres already contains the form result
1948*b1cdbd2cSJim Jagielski                             m_aRun.getOStringBuffer().append("}{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " ");
1949*b1cdbd2cSJim Jagielski                         }
1950*b1cdbd2cSJim Jagielski                         else
1951*b1cdbd2cSJim Jagielski                             OSL_TRACE("%s unhandled form control: '%s'", OSL_THIS_FUNC,
1952*b1cdbd2cSJim Jagielski                                     OUStringToOString(xInfo->getImplementationName(), m_rExport.eCurrentEncoding).getStr());
1953*b1cdbd2cSJim Jagielski                         m_aRun.getOStringBuffer().append('}');
1954*b1cdbd2cSJim Jagielski                     }
1955*b1cdbd2cSJim Jagielski                 }
1956*b1cdbd2cSJim Jagielski 
1957*b1cdbd2cSJim Jagielski                 m_aRun.getOStringBuffer().append('}');
1958*b1cdbd2cSJim Jagielski             }
1959*b1cdbd2cSJim Jagielski             break;
1960*b1cdbd2cSJim Jagielski         case sw::Frame::eOle:
1961*b1cdbd2cSJim Jagielski             {
1962*b1cdbd2cSJim Jagielski                 const SwFrmFmt &rFrmFmt = rFrame.GetFrmFmt();
1963*b1cdbd2cSJim Jagielski                 const SdrObject *pSdrObj = rFrmFmt.FindRealSdrObject();
1964*b1cdbd2cSJim Jagielski                 if ( pSdrObj )
1965*b1cdbd2cSJim Jagielski                 {
1966*b1cdbd2cSJim Jagielski                     SwNodeIndex aIdx(*rFrmFmt.GetCntnt().GetCntntIdx(), 1);
1967*b1cdbd2cSJim Jagielski                     SwOLENode& rOLENd = *aIdx.GetNode().GetOLENode();
1968*b1cdbd2cSJim Jagielski                     FlyFrameOLE(dynamic_cast<const SwFlyFrmFmt*>( &rFrmFmt ), rOLENd, rFrame.GetLayoutSize());
1969*b1cdbd2cSJim Jagielski                 }
1970*b1cdbd2cSJim Jagielski             }
1971*b1cdbd2cSJim Jagielski             break;
1972*b1cdbd2cSJim Jagielski         default:
1973*b1cdbd2cSJim Jagielski             OSL_TRACE("%s: unknown type (%d)", OSL_THIS_FUNC, rFrame.GetWriterType());
1974*b1cdbd2cSJim Jagielski             break;
1975*b1cdbd2cSJim Jagielski     }
1976*b1cdbd2cSJim Jagielski }
1977*b1cdbd2cSJim Jagielski 
CharCaseMap(const SvxCaseMapItem & rCaseMap)1978*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharCaseMap( const SvxCaseMapItem& rCaseMap )
1979*b1cdbd2cSJim Jagielski {
1980*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
1981*b1cdbd2cSJim Jagielski 
1982*b1cdbd2cSJim Jagielski     switch ( rCaseMap.GetValue() )
1983*b1cdbd2cSJim Jagielski     {
1984*b1cdbd2cSJim Jagielski         case SVX_CASEMAP_KAPITAELCHEN:
1985*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SCAPS);
1986*b1cdbd2cSJim Jagielski             break;
1987*b1cdbd2cSJim Jagielski         case SVX_CASEMAP_VERSALIEN:
1988*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CAPS);
1989*b1cdbd2cSJim Jagielski             break;
1990*b1cdbd2cSJim Jagielski         default: // Something that rtf does not support
1991*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SCAPS);
1992*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)0);
1993*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CAPS);
1994*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)0);
1995*b1cdbd2cSJim Jagielski             break;
1996*b1cdbd2cSJim Jagielski     }
1997*b1cdbd2cSJim Jagielski }
1998*b1cdbd2cSJim Jagielski 
CharColor(const SvxColorItem & rColor)1999*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharColor( const SvxColorItem& rColor )
2000*b1cdbd2cSJim Jagielski {
2001*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2002*b1cdbd2cSJim Jagielski 
2003*b1cdbd2cSJim Jagielski     const Color aColor( rColor.GetValue() );
2004*b1cdbd2cSJim Jagielski 
2005*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CF);
2006*b1cdbd2cSJim Jagielski     m_aStyles.append( (sal_Int32)m_rExport.GetColor( aColor ));
2007*b1cdbd2cSJim Jagielski }
2008*b1cdbd2cSJim Jagielski 
CharContour(const SvxContourItem & rContour)2009*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharContour( const SvxContourItem& rContour )
2010*b1cdbd2cSJim Jagielski {
2011*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2012*b1cdbd2cSJim Jagielski 
2013*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_OUTL);
2014*b1cdbd2cSJim Jagielski     if ( !rContour.GetValue() )
2015*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2016*b1cdbd2cSJim Jagielski }
2017*b1cdbd2cSJim Jagielski 
CharCrossedOut(const SvxCrossedOutItem & rCrossedOut)2018*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharCrossedOut( const SvxCrossedOutItem& rCrossedOut )
2019*b1cdbd2cSJim Jagielski {
2020*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2021*b1cdbd2cSJim Jagielski 
2022*b1cdbd2cSJim Jagielski     switch ( rCrossedOut.GetStrikeout() )
2023*b1cdbd2cSJim Jagielski     {
2024*b1cdbd2cSJim Jagielski         case STRIKEOUT_NONE:
2025*b1cdbd2cSJim Jagielski             if (!m_bStrikeDouble)
2026*b1cdbd2cSJim Jagielski                 m_aStyles.append(OOO_STRING_SVTOOLS_RTF_STRIKE);
2027*b1cdbd2cSJim Jagielski             else
2028*b1cdbd2cSJim Jagielski                 m_aStyles.append(OOO_STRING_SVTOOLS_RTF_STRIKED);
2029*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)0);
2030*b1cdbd2cSJim Jagielski             break;
2031*b1cdbd2cSJim Jagielski         case STRIKEOUT_DOUBLE:
2032*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_STRIKED);
2033*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)1);
2034*b1cdbd2cSJim Jagielski             break;
2035*b1cdbd2cSJim Jagielski         default:
2036*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_STRIKE);
2037*b1cdbd2cSJim Jagielski             break;
2038*b1cdbd2cSJim Jagielski     }
2039*b1cdbd2cSJim Jagielski }
2040*b1cdbd2cSJim Jagielski 
CharEscapement(const SvxEscapementItem & rEsc)2041*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharEscapement( const SvxEscapementItem& rEsc )
2042*b1cdbd2cSJim Jagielski {
2043*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2044*b1cdbd2cSJim Jagielski 
2045*b1cdbd2cSJim Jagielski     const char * pUpDn;
2046*b1cdbd2cSJim Jagielski 
2047*b1cdbd2cSJim Jagielski     SwTwips nH = ((SvxFontHeightItem&)m_rExport.GetItem( RES_CHRATR_FONTSIZE )).GetHeight();
2048*b1cdbd2cSJim Jagielski 
2049*b1cdbd2cSJim Jagielski     if( 0 < rEsc.GetEsc() )
2050*b1cdbd2cSJim Jagielski         pUpDn = OOO_STRING_SVTOOLS_RTF_UP;
2051*b1cdbd2cSJim Jagielski     else if( 0 > rEsc.GetEsc() )
2052*b1cdbd2cSJim Jagielski     {
2053*b1cdbd2cSJim Jagielski         pUpDn = OOO_STRING_SVTOOLS_RTF_DN;
2054*b1cdbd2cSJim Jagielski         nH = -nH;
2055*b1cdbd2cSJim Jagielski     }
2056*b1cdbd2cSJim Jagielski     else
2057*b1cdbd2cSJim Jagielski         return;
2058*b1cdbd2cSJim Jagielski 
2059*b1cdbd2cSJim Jagielski     short nEsc = rEsc.GetEsc();
2060*b1cdbd2cSJim Jagielski     short nProp = rEsc.GetProp() * 100;
2061*b1cdbd2cSJim Jagielski     if( DFLT_ESC_AUTO_SUPER == nEsc )
2062*b1cdbd2cSJim Jagielski     {
2063*b1cdbd2cSJim Jagielski         nEsc = 100 - rEsc.GetProp();
2064*b1cdbd2cSJim Jagielski         ++nProp;
2065*b1cdbd2cSJim Jagielski     }
2066*b1cdbd2cSJim Jagielski     else if( DFLT_ESC_AUTO_SUB == nEsc )
2067*b1cdbd2cSJim Jagielski     {
2068*b1cdbd2cSJim Jagielski         nEsc = - 100 + rEsc.GetProp();
2069*b1cdbd2cSJim Jagielski         ++nProp;
2070*b1cdbd2cSJim Jagielski     }
2071*b1cdbd2cSJim Jagielski 
2072*b1cdbd2cSJim Jagielski     m_aStyles.append('{');
2073*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_IGNORE);
2074*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_UPDNPROP);
2075*b1cdbd2cSJim Jagielski     m_aStyles.append( (sal_Int32)nProp );
2076*b1cdbd2cSJim Jagielski     m_aStyles.append('}');
2077*b1cdbd2cSJim Jagielski     m_aStyles.append(pUpDn);
2078*b1cdbd2cSJim Jagielski 
2079*b1cdbd2cSJim Jagielski     /*
2080*b1cdbd2cSJim Jagielski      * Calculate the act. FontSize and the percentage of the displacement;
2081*b1cdbd2cSJim Jagielski      * RTF file expects half points, while internally it's in twips.
2082*b1cdbd2cSJim Jagielski      * Formally :            (FontSize * 1/20 ) pts         x * 2
2083*b1cdbd2cSJim Jagielski      *                    -----------------------  = ------------
2084*b1cdbd2cSJim Jagielski      *                      100%                       Escapement
2085*b1cdbd2cSJim Jagielski      */
2086*b1cdbd2cSJim Jagielski 
2087*b1cdbd2cSJim Jagielski     m_aStyles.append( (sal_Int32) ( (long( nEsc ) * nH) + 500L ) / 1000L );
2088*b1cdbd2cSJim Jagielski     // 500L to round !!
2089*b1cdbd2cSJim Jagielski }
2090*b1cdbd2cSJim Jagielski 
CharFont(const SvxFontItem & rFont)2091*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharFont( const SvxFontItem& rFont)
2092*b1cdbd2cSJim Jagielski {
2093*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2094*b1cdbd2cSJim Jagielski 
2095*b1cdbd2cSJim Jagielski     m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_LOCH);
2096*b1cdbd2cSJim Jagielski     m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_F);
2097*b1cdbd2cSJim Jagielski     m_aStylesEnd.append((sal_Int32)m_rExport.maFontHelper.GetId(rFont));
2098*b1cdbd2cSJim Jagielski     m_rExport.eCurrentEncoding = rtl_getTextEncodingFromWindowsCharset(sw::ms::rtl_TextEncodingToWinCharset(rFont.GetCharSet()));
2099*b1cdbd2cSJim Jagielski }
2100*b1cdbd2cSJim Jagielski 
CharFontSize(const SvxFontHeightItem & rFontSize)2101*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharFontSize( const SvxFontHeightItem& rFontSize)
2102*b1cdbd2cSJim Jagielski {
2103*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2104*b1cdbd2cSJim Jagielski 
2105*b1cdbd2cSJim Jagielski     switch ( rFontSize.Which() )
2106*b1cdbd2cSJim Jagielski     {
2107*b1cdbd2cSJim Jagielski         case RES_CHRATR_FONTSIZE:
2108*b1cdbd2cSJim Jagielski             m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_FS);
2109*b1cdbd2cSJim Jagielski             m_aStylesEnd.append((sal_Int32)(rFontSize.GetHeight() / 10 ));
2110*b1cdbd2cSJim Jagielski             break;
2111*b1cdbd2cSJim Jagielski         case RES_CHRATR_CJK_FONTSIZE:
2112*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FS);
2113*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)(rFontSize.GetHeight() / 10 ));
2114*b1cdbd2cSJim Jagielski             break;
2115*b1cdbd2cSJim Jagielski         case RES_CHRATR_CTL_FONTSIZE:
2116*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_AFS);
2117*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)(rFontSize.GetHeight() / 10 ));
2118*b1cdbd2cSJim Jagielski             break;
2119*b1cdbd2cSJim Jagielski     }
2120*b1cdbd2cSJim Jagielski }
2121*b1cdbd2cSJim Jagielski 
CharKerning(const SvxKerningItem & rKerning)2122*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharKerning( const SvxKerningItem& rKerning )
2123*b1cdbd2cSJim Jagielski {
2124*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2125*b1cdbd2cSJim Jagielski 
2126*b1cdbd2cSJim Jagielski     // in quater points then in twips
2127*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_EXPND);
2128*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)(rKerning.GetValue() / 5));
2129*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_EXPNDTW);
2130*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)(rKerning.GetValue()));
2131*b1cdbd2cSJim Jagielski }
2132*b1cdbd2cSJim Jagielski 
CharLanguage(const SvxLanguageItem & rLanguage)2133*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharLanguage( const SvxLanguageItem& rLanguage )
2134*b1cdbd2cSJim Jagielski {
2135*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2136*b1cdbd2cSJim Jagielski 
2137*b1cdbd2cSJim Jagielski     switch (rLanguage.Which())
2138*b1cdbd2cSJim Jagielski     {
2139*b1cdbd2cSJim Jagielski         case RES_CHRATR_LANGUAGE:
2140*b1cdbd2cSJim Jagielski             m_aStylesEnd.append(OOO_STRING_SVTOOLS_RTF_LANG);
2141*b1cdbd2cSJim Jagielski             m_aStylesEnd.append((sal_Int32)rLanguage.GetLanguage());
2142*b1cdbd2cSJim Jagielski             break;
2143*b1cdbd2cSJim Jagielski         case RES_CHRATR_CJK_LANGUAGE:
2144*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LANGFE);
2145*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)rLanguage.GetLanguage());
2146*b1cdbd2cSJim Jagielski             break;
2147*b1cdbd2cSJim Jagielski         case RES_CHRATR_CTL_LANGUAGE:
2148*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LANG);
2149*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)rLanguage.GetLanguage());
2150*b1cdbd2cSJim Jagielski             break;
2151*b1cdbd2cSJim Jagielski     }
2152*b1cdbd2cSJim Jagielski }
2153*b1cdbd2cSJim Jagielski 
CharPosture(const SvxPostureItem & rPosture)2154*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharPosture( const SvxPostureItem& rPosture )
2155*b1cdbd2cSJim Jagielski {
2156*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2157*b1cdbd2cSJim Jagielski 
2158*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_I);
2159*b1cdbd2cSJim Jagielski     if ( rPosture.GetPosture() == ITALIC_NONE )
2160*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2161*b1cdbd2cSJim Jagielski }
2162*b1cdbd2cSJim Jagielski 
CharShadow(const SvxShadowedItem & rShadow)2163*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharShadow( const SvxShadowedItem& rShadow )
2164*b1cdbd2cSJim Jagielski {
2165*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2166*b1cdbd2cSJim Jagielski 
2167*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SHAD);
2168*b1cdbd2cSJim Jagielski     if ( !rShadow.GetValue() )
2169*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2170*b1cdbd2cSJim Jagielski }
2171*b1cdbd2cSJim Jagielski 
CharUnderline(const SvxUnderlineItem & rUnderline)2172*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharUnderline( const SvxUnderlineItem& rUnderline )
2173*b1cdbd2cSJim Jagielski {
2174*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2175*b1cdbd2cSJim Jagielski 
2176*b1cdbd2cSJim Jagielski     const char* pStr = 0;
2177*b1cdbd2cSJim Jagielski     const SfxPoolItem* pItem = m_rExport.HasItem( RES_CHRATR_WORDLINEMODE );
2178*b1cdbd2cSJim Jagielski     bool bWord = false;
2179*b1cdbd2cSJim Jagielski     if (pItem)
2180*b1cdbd2cSJim Jagielski         bWord = ((const SvxWordLineModeItem*)pItem)->GetValue() ? true : false;
2181*b1cdbd2cSJim Jagielski     switch(rUnderline.GetLineStyle() )
2182*b1cdbd2cSJim Jagielski     {
2183*b1cdbd2cSJim Jagielski         case UNDERLINE_SINGLE:
2184*b1cdbd2cSJim Jagielski             pStr = bWord ? OOO_STRING_SVTOOLS_RTF_ULW : OOO_STRING_SVTOOLS_RTF_UL;
2185*b1cdbd2cSJim Jagielski             break;
2186*b1cdbd2cSJim Jagielski         case UNDERLINE_DOUBLE:
2187*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULDB;
2188*b1cdbd2cSJim Jagielski             break;
2189*b1cdbd2cSJim Jagielski         case UNDERLINE_NONE:
2190*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULNONE;
2191*b1cdbd2cSJim Jagielski             break;
2192*b1cdbd2cSJim Jagielski         case UNDERLINE_DOTTED:
2193*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULD;
2194*b1cdbd2cSJim Jagielski             break;
2195*b1cdbd2cSJim Jagielski         case UNDERLINE_DASH:
2196*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULDASH;
2197*b1cdbd2cSJim Jagielski             break;
2198*b1cdbd2cSJim Jagielski         case UNDERLINE_DASHDOT:
2199*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULDASHD;
2200*b1cdbd2cSJim Jagielski             break;
2201*b1cdbd2cSJim Jagielski         case UNDERLINE_DASHDOTDOT:
2202*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULDASHDD;
2203*b1cdbd2cSJim Jagielski             break;
2204*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLD:
2205*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULTH;
2206*b1cdbd2cSJim Jagielski             break;
2207*b1cdbd2cSJim Jagielski         case UNDERLINE_WAVE:
2208*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULWAVE;
2209*b1cdbd2cSJim Jagielski             break;
2210*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLDDOTTED:
2211*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULTHD;
2212*b1cdbd2cSJim Jagielski             break;
2213*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLDDASH:
2214*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULTHDASH;
2215*b1cdbd2cSJim Jagielski             break;
2216*b1cdbd2cSJim Jagielski         case UNDERLINE_LONGDASH:
2217*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULLDASH;
2218*b1cdbd2cSJim Jagielski             break;
2219*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLDLONGDASH:
2220*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULTHLDASH;
2221*b1cdbd2cSJim Jagielski             break;
2222*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLDDASHDOT:
2223*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULTHDASHD;
2224*b1cdbd2cSJim Jagielski             break;
2225*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLDDASHDOTDOT:
2226*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULTHDASHDD;
2227*b1cdbd2cSJim Jagielski             break;
2228*b1cdbd2cSJim Jagielski         case UNDERLINE_BOLDWAVE:
2229*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULHWAVE;
2230*b1cdbd2cSJim Jagielski             break;
2231*b1cdbd2cSJim Jagielski         case UNDERLINE_DOUBLEWAVE:
2232*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_ULULDBWAVE;
2233*b1cdbd2cSJim Jagielski             break;
2234*b1cdbd2cSJim Jagielski         default:
2235*b1cdbd2cSJim Jagielski             break;
2236*b1cdbd2cSJim Jagielski     }
2237*b1cdbd2cSJim Jagielski 
2238*b1cdbd2cSJim Jagielski     if( pStr )
2239*b1cdbd2cSJim Jagielski     {
2240*b1cdbd2cSJim Jagielski         m_aStyles.append(pStr);
2241*b1cdbd2cSJim Jagielski         // NEEDSWORK looks like here rUnderline.GetColor() is always black,
2242*b1cdbd2cSJim Jagielski         // even if the color in the odt is for example green...
2243*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_ULC);
2244*b1cdbd2cSJim Jagielski         m_aStyles.append( (sal_Int32)m_rExport.GetColor(rUnderline.GetColor()) );
2245*b1cdbd2cSJim Jagielski     }
2246*b1cdbd2cSJim Jagielski }
2247*b1cdbd2cSJim Jagielski 
CharWeight(const SvxWeightItem & rWeight)2248*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharWeight( const SvxWeightItem& rWeight )
2249*b1cdbd2cSJim Jagielski {
2250*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2251*b1cdbd2cSJim Jagielski 
2252*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_B);
2253*b1cdbd2cSJim Jagielski     if ( rWeight.GetWeight() != WEIGHT_BOLD )
2254*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2255*b1cdbd2cSJim Jagielski }
2256*b1cdbd2cSJim Jagielski 
CharAutoKern(const SvxAutoKernItem & rAutoKern)2257*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharAutoKern( const SvxAutoKernItem& rAutoKern)
2258*b1cdbd2cSJim Jagielski {
2259*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2260*b1cdbd2cSJim Jagielski 
2261*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_KERNING);
2262*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32) (rAutoKern.GetValue() ? 1 : 0));
2263*b1cdbd2cSJim Jagielski }
2264*b1cdbd2cSJim Jagielski 
CharAnimatedText(const SvxBlinkItem & rBlink)2265*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharAnimatedText( const SvxBlinkItem& rBlink )
2266*b1cdbd2cSJim Jagielski {
2267*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2268*b1cdbd2cSJim Jagielski 
2269*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_ANIMTEXT);
2270*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32) (rBlink.GetValue() ? 2 : 0));
2271*b1cdbd2cSJim Jagielski }
2272*b1cdbd2cSJim Jagielski 
CharBackground(const SvxBrushItem & rBrush)2273*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharBackground( const SvxBrushItem& rBrush )
2274*b1cdbd2cSJim Jagielski {
2275*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2276*b1cdbd2cSJim Jagielski 
2277*b1cdbd2cSJim Jagielski     if( !rBrush.GetColor().GetTransparency() )
2278*b1cdbd2cSJim Jagielski     {
2279*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CHCBPAT);
2280*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)m_rExport.GetColor(rBrush.GetColor()));
2281*b1cdbd2cSJim Jagielski     }
2282*b1cdbd2cSJim Jagielski }
2283*b1cdbd2cSJim Jagielski 
CharFontCJK(const SvxFontItem & rFont)2284*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharFontCJK( const SvxFontItem& rFont )
2285*b1cdbd2cSJim Jagielski {
2286*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2287*b1cdbd2cSJim Jagielski 
2288*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HICH);
2289*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_AF);
2290*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)m_rExport.maFontHelper.GetId(rFont));
2291*b1cdbd2cSJim Jagielski }
2292*b1cdbd2cSJim Jagielski 
CharFontSizeCJK(const SvxFontHeightItem & rFontSize)2293*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharFontSizeCJK( const SvxFontHeightItem& rFontSize )
2294*b1cdbd2cSJim Jagielski {
2295*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2296*b1cdbd2cSJim Jagielski 
2297*b1cdbd2cSJim Jagielski     CharFontSize( rFontSize );
2298*b1cdbd2cSJim Jagielski }
2299*b1cdbd2cSJim Jagielski 
CharLanguageCJK(const SvxLanguageItem & rLanguageItem)2300*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharLanguageCJK( const SvxLanguageItem& rLanguageItem )
2301*b1cdbd2cSJim Jagielski {
2302*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2303*b1cdbd2cSJim Jagielski 
2304*b1cdbd2cSJim Jagielski     CharLanguage( rLanguageItem );
2305*b1cdbd2cSJim Jagielski }
2306*b1cdbd2cSJim Jagielski 
CharPostureCJK(const SvxPostureItem & rPosture)2307*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharPostureCJK( const SvxPostureItem& rPosture )
2308*b1cdbd2cSJim Jagielski {
2309*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2310*b1cdbd2cSJim Jagielski 
2311*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_I);
2312*b1cdbd2cSJim Jagielski     if ( rPosture.GetPosture() == ITALIC_NONE )
2313*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2314*b1cdbd2cSJim Jagielski }
2315*b1cdbd2cSJim Jagielski 
CharWeightCJK(const SvxWeightItem & rWeight)2316*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharWeightCJK( const SvxWeightItem& rWeight )
2317*b1cdbd2cSJim Jagielski {
2318*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2319*b1cdbd2cSJim Jagielski 
2320*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_B);
2321*b1cdbd2cSJim Jagielski     if ( rWeight.GetWeight() != WEIGHT_BOLD )
2322*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2323*b1cdbd2cSJim Jagielski }
2324*b1cdbd2cSJim Jagielski 
CharFontCTL(const SvxFontItem & rFont)2325*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharFontCTL( const SvxFontItem& rFont )
2326*b1cdbd2cSJim Jagielski {
2327*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2328*b1cdbd2cSJim Jagielski 
2329*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_DBCH);
2330*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_AF);
2331*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)m_rExport.maFontHelper.GetId(rFont));
2332*b1cdbd2cSJim Jagielski }
2333*b1cdbd2cSJim Jagielski 
CharFontSizeCTL(const SvxFontHeightItem & rFontSize)2334*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharFontSizeCTL( const SvxFontHeightItem& rFontSize )
2335*b1cdbd2cSJim Jagielski {
2336*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2337*b1cdbd2cSJim Jagielski 
2338*b1cdbd2cSJim Jagielski     CharFontSize( rFontSize );
2339*b1cdbd2cSJim Jagielski }
2340*b1cdbd2cSJim Jagielski 
CharLanguageCTL(const SvxLanguageItem & rLanguageItem)2341*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharLanguageCTL( const SvxLanguageItem& rLanguageItem )
2342*b1cdbd2cSJim Jagielski {
2343*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2344*b1cdbd2cSJim Jagielski 
2345*b1cdbd2cSJim Jagielski     CharLanguage( rLanguageItem );
2346*b1cdbd2cSJim Jagielski }
2347*b1cdbd2cSJim Jagielski 
CharPostureCTL(const SvxPostureItem & rPosture)2348*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharPostureCTL( const SvxPostureItem& rPosture)
2349*b1cdbd2cSJim Jagielski {
2350*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2351*b1cdbd2cSJim Jagielski 
2352*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_AI);
2353*b1cdbd2cSJim Jagielski     if ( rPosture.GetPosture() == ITALIC_NONE )
2354*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2355*b1cdbd2cSJim Jagielski }
2356*b1cdbd2cSJim Jagielski 
CharWeightCTL(const SvxWeightItem & rWeight)2357*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharWeightCTL( const SvxWeightItem& rWeight )
2358*b1cdbd2cSJim Jagielski {
2359*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2360*b1cdbd2cSJim Jagielski 
2361*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_AB);
2362*b1cdbd2cSJim Jagielski     if ( rWeight.GetWeight() != WEIGHT_BOLD )
2363*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2364*b1cdbd2cSJim Jagielski }
CharBidiRTL(const SfxPoolItem &)2365*b1cdbd2cSJim Jagielski void RtfAttributeOutput:: CharBidiRTL( const SfxPoolItem& )
2366*b1cdbd2cSJim Jagielski {
2367*b1cdbd2cSJim Jagielski }
2368*b1cdbd2cSJim Jagielski 
CharIdctHint(const SfxPoolItem &)2369*b1cdbd2cSJim Jagielski void RtfAttributeOutput:: CharIdctHint( const SfxPoolItem&)
2370*b1cdbd2cSJim Jagielski {
2371*b1cdbd2cSJim Jagielski }
2372*b1cdbd2cSJim Jagielski 
CharRotate(const SvxCharRotateItem & rRotate)2373*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharRotate( const SvxCharRotateItem& rRotate)
2374*b1cdbd2cSJim Jagielski {
2375*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2376*b1cdbd2cSJim Jagielski 
2377*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HORZVERT);
2378*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)(rRotate.IsFitToLine() ? 1 : 0));
2379*b1cdbd2cSJim Jagielski }
2380*b1cdbd2cSJim Jagielski 
CharEmphasisMark(const SvxEmphasisMarkItem & rEmphasisMark)2381*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharEmphasisMark( const SvxEmphasisMarkItem& rEmphasisMark )
2382*b1cdbd2cSJim Jagielski {
2383*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2384*b1cdbd2cSJim Jagielski 
2385*b1cdbd2cSJim Jagielski     const sal_Char* pStr;
2386*b1cdbd2cSJim Jagielski     switch( rEmphasisMark.GetEmphasisMark())
2387*b1cdbd2cSJim Jagielski     {
2388*b1cdbd2cSJim Jagielski         case EMPHASISMARK_NONE:         pStr = OOO_STRING_SVTOOLS_RTF_ACCNONE;  break;
2389*b1cdbd2cSJim Jagielski         case EMPHASISMARK_SIDE_DOTS:    pStr = OOO_STRING_SVTOOLS_RTF_ACCCOMMA; break;
2390*b1cdbd2cSJim Jagielski         default:                        pStr = OOO_STRING_SVTOOLS_RTF_ACCDOT;   break;
2391*b1cdbd2cSJim Jagielski     }
2392*b1cdbd2cSJim Jagielski     m_aStyles.append(pStr);
2393*b1cdbd2cSJim Jagielski }
2394*b1cdbd2cSJim Jagielski 
CharTwoLines(const SvxTwoLinesItem & rTwoLines)2395*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharTwoLines( const SvxTwoLinesItem& rTwoLines )
2396*b1cdbd2cSJim Jagielski {
2397*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2398*b1cdbd2cSJim Jagielski 
2399*b1cdbd2cSJim Jagielski     if( rTwoLines.GetValue() )
2400*b1cdbd2cSJim Jagielski     {
2401*b1cdbd2cSJim Jagielski         sal_Unicode cStart = rTwoLines.GetStartBracket();
2402*b1cdbd2cSJim Jagielski         sal_Unicode cEnd =   rTwoLines.GetEndBracket();
2403*b1cdbd2cSJim Jagielski 
2404*b1cdbd2cSJim Jagielski         sal_uInt16 nType;
2405*b1cdbd2cSJim Jagielski         if( !cStart && !cEnd )
2406*b1cdbd2cSJim Jagielski             nType = 0;
2407*b1cdbd2cSJim Jagielski         else if( '{' == cStart || '}' == cEnd )
2408*b1cdbd2cSJim Jagielski             nType = 4;
2409*b1cdbd2cSJim Jagielski         else if( '<' == cStart || '>' == cEnd )
2410*b1cdbd2cSJim Jagielski             nType = 3;
2411*b1cdbd2cSJim Jagielski         else if( '[' == cStart || ']' == cEnd )
2412*b1cdbd2cSJim Jagielski             nType = 2;
2413*b1cdbd2cSJim Jagielski         else                            // all other kind of brackets
2414*b1cdbd2cSJim Jagielski             nType = 1;
2415*b1cdbd2cSJim Jagielski 
2416*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_TWOINONE);
2417*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)nType);
2418*b1cdbd2cSJim Jagielski     }
2419*b1cdbd2cSJim Jagielski }
2420*b1cdbd2cSJim Jagielski 
CharScaleWidth(const SvxCharScaleWidthItem & rScaleWidth)2421*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharScaleWidth( const SvxCharScaleWidthItem& rScaleWidth )
2422*b1cdbd2cSJim Jagielski {
2423*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2424*b1cdbd2cSJim Jagielski 
2425*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CHARSCALEX);
2426*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)rScaleWidth.GetValue());
2427*b1cdbd2cSJim Jagielski }
2428*b1cdbd2cSJim Jagielski 
CharRelief(const SvxCharReliefItem & rRelief)2429*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharRelief( const SvxCharReliefItem& rRelief )
2430*b1cdbd2cSJim Jagielski {
2431*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2432*b1cdbd2cSJim Jagielski 
2433*b1cdbd2cSJim Jagielski     const sal_Char* pStr;
2434*b1cdbd2cSJim Jagielski     switch (rRelief.GetValue())
2435*b1cdbd2cSJim Jagielski     {
2436*b1cdbd2cSJim Jagielski         case RELIEF_EMBOSSED:
2437*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_EMBO;
2438*b1cdbd2cSJim Jagielski             break;
2439*b1cdbd2cSJim Jagielski         case RELIEF_ENGRAVED:
2440*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_IMPR;
2441*b1cdbd2cSJim Jagielski             break;
2442*b1cdbd2cSJim Jagielski         default:
2443*b1cdbd2cSJim Jagielski             pStr = 0;
2444*b1cdbd2cSJim Jagielski             break;
2445*b1cdbd2cSJim Jagielski     }
2446*b1cdbd2cSJim Jagielski 
2447*b1cdbd2cSJim Jagielski     if (pStr)
2448*b1cdbd2cSJim Jagielski         m_aStyles.append(pStr);
2449*b1cdbd2cSJim Jagielski }
2450*b1cdbd2cSJim Jagielski 
CharHidden(const SvxCharHiddenItem & rHidden)2451*b1cdbd2cSJim Jagielski void RtfAttributeOutput::CharHidden( const SvxCharHiddenItem& rHidden )
2452*b1cdbd2cSJim Jagielski {
2453*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2454*b1cdbd2cSJim Jagielski 
2455*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_V);
2456*b1cdbd2cSJim Jagielski     if ( !rHidden.GetValue() )
2457*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)0);
2458*b1cdbd2cSJim Jagielski }
2459*b1cdbd2cSJim Jagielski 
TextINetFormat(const SwFmtINetFmt & rURL)2460*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TextINetFormat( const SwFmtINetFmt& rURL )
2461*b1cdbd2cSJim Jagielski {
2462*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2463*b1cdbd2cSJim Jagielski 
2464*b1cdbd2cSJim Jagielski     if( rURL.GetValue().Len() )
2465*b1cdbd2cSJim Jagielski     {
2466*b1cdbd2cSJim Jagielski         const SwCharFmt* pFmt;
2467*b1cdbd2cSJim Jagielski         const SwTxtINetFmt* pTxtAtr = rURL.GetTxtINetFmt();
2468*b1cdbd2cSJim Jagielski 
2469*b1cdbd2cSJim Jagielski         m_aStyles.append("{" OOO_STRING_SVTOOLS_RTF_FLDRSLT " ");
2470*b1cdbd2cSJim Jagielski         if( pTxtAtr && 0 != ( pFmt = pTxtAtr->GetCharFmt() ))
2471*b1cdbd2cSJim Jagielski         {
2472*b1cdbd2cSJim Jagielski             sal_uInt16 nStyle = m_rExport.GetId( *pFmt );
2473*b1cdbd2cSJim Jagielski             OString* pString = m_rExport.GetStyle(nStyle);
2474*b1cdbd2cSJim Jagielski             if (pString)
2475*b1cdbd2cSJim Jagielski                 m_aStyles.append(*pString);
2476*b1cdbd2cSJim Jagielski         }
2477*b1cdbd2cSJim Jagielski     }
2478*b1cdbd2cSJim Jagielski }
2479*b1cdbd2cSJim Jagielski 
TextCharFormat(const SwFmtCharFmt & rCharFmt)2480*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TextCharFormat( const SwFmtCharFmt& rCharFmt )
2481*b1cdbd2cSJim Jagielski {
2482*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2483*b1cdbd2cSJim Jagielski 
2484*b1cdbd2cSJim Jagielski     sal_uInt16 nStyle = m_rExport.GetId( *rCharFmt.GetCharFmt() );
2485*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_CS);
2486*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)nStyle);
2487*b1cdbd2cSJim Jagielski     OString* pString = m_rExport.GetStyle(nStyle);
2488*b1cdbd2cSJim Jagielski     if (pString)
2489*b1cdbd2cSJim Jagielski         m_aStyles.append(*pString);
2490*b1cdbd2cSJim Jagielski }
2491*b1cdbd2cSJim Jagielski 
WriteTextFootnoteNumStr(const SwFmtFtn & rFootnote)2492*b1cdbd2cSJim Jagielski void RtfAttributeOutput::WriteTextFootnoteNumStr(const SwFmtFtn& rFootnote)
2493*b1cdbd2cSJim Jagielski {
2494*b1cdbd2cSJim Jagielski     if (!rFootnote.GetNumStr().Len())
2495*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_CHFTN);
2496*b1cdbd2cSJim Jagielski     else
2497*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(m_rExport.OutString(rFootnote.GetNumStr(), m_rExport.eCurrentEncoding));
2498*b1cdbd2cSJim Jagielski }
2499*b1cdbd2cSJim Jagielski 
TextFootnote_Impl(const SwFmtFtn & rFootnote)2500*b1cdbd2cSJim Jagielski void RtfAttributeOutput::TextFootnote_Impl( const SwFmtFtn& rFootnote )
2501*b1cdbd2cSJim Jagielski {
2502*b1cdbd2cSJim Jagielski     OSL_TRACE("%s start", OSL_THIS_FUNC);
2503*b1cdbd2cSJim Jagielski 
2504*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_SUPER " ");
2505*b1cdbd2cSJim Jagielski     WriteTextFootnoteNumStr(rFootnote);
2506*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_FOOTNOTE);
2507*b1cdbd2cSJim Jagielski     if( rFootnote.IsEndNote() )
2508*b1cdbd2cSJim Jagielski         m_aRun.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FTNALT);
2509*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append(' ');
2510*b1cdbd2cSJim Jagielski     WriteTextFootnoteNumStr(rFootnote);
2511*b1cdbd2cSJim Jagielski 
2512*b1cdbd2cSJim Jagielski     /*
2513*b1cdbd2cSJim Jagielski      * The footnote contains a whole paragraph, so we have to:
2514*b1cdbd2cSJim Jagielski      * 1) Reset, then later restore the contents of our run buffer.
2515*b1cdbd2cSJim Jagielski      * 2) Buffer the output of the whole paragraph, as we do so for section headers already.
2516*b1cdbd2cSJim Jagielski      */
2517*b1cdbd2cSJim Jagielski     const SwNodeIndex* pIndex = rFootnote.GetTxtFtn()->GetStartNode();
2518*b1cdbd2cSJim Jagielski     MultiBuffer aTemp;
2519*b1cdbd2cSJim Jagielski     aTemp.appendAndClear(m_aRun);
2520*b1cdbd2cSJim Jagielski 
2521*b1cdbd2cSJim Jagielski     m_bBufferSectionHeaders = true;
2522*b1cdbd2cSJim Jagielski     m_rExport.WriteSpecialText( pIndex->GetIndex() + 1,
2523*b1cdbd2cSJim Jagielski             pIndex->GetNode().EndOfSectionIndex(),
2524*b1cdbd2cSJim Jagielski             !rFootnote.IsEndNote() ? TXT_FTN : TXT_EDN);
2525*b1cdbd2cSJim Jagielski     m_bBufferSectionHeaders = false;
2526*b1cdbd2cSJim Jagielski 
2527*b1cdbd2cSJim Jagielski     m_aRun.clear();
2528*b1cdbd2cSJim Jagielski     m_aRun.appendAndClear(aTemp);
2529*b1cdbd2cSJim Jagielski 
2530*b1cdbd2cSJim Jagielski     m_aRun.appendAndClear(m_aSectionHeaders);
2531*b1cdbd2cSJim Jagielski 
2532*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append("}");
2533*b1cdbd2cSJim Jagielski     m_aRun.getOStringBuffer().append("}");
2534*b1cdbd2cSJim Jagielski 
2535*b1cdbd2cSJim Jagielski     OSL_TRACE("%s end", OSL_THIS_FUNC);
2536*b1cdbd2cSJim Jagielski }
2537*b1cdbd2cSJim Jagielski 
ParaLineSpacing_Impl(short nSpace,short nMulti)2538*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaLineSpacing_Impl( short nSpace, short nMulti )
2539*b1cdbd2cSJim Jagielski {
2540*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2541*b1cdbd2cSJim Jagielski 
2542*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SL);
2543*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)nSpace);
2544*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SLMULT);
2545*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)nMulti);
2546*b1cdbd2cSJim Jagielski 
2547*b1cdbd2cSJim Jagielski }
2548*b1cdbd2cSJim Jagielski 
ParaAdjust(const SvxAdjustItem & rAdjust)2549*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaAdjust( const SvxAdjustItem& rAdjust )
2550*b1cdbd2cSJim Jagielski {
2551*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2552*b1cdbd2cSJim Jagielski 
2553*b1cdbd2cSJim Jagielski     switch ( rAdjust.GetAdjust() )
2554*b1cdbd2cSJim Jagielski     {
2555*b1cdbd2cSJim Jagielski         case SVX_ADJUST_LEFT:
2556*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_QL);
2557*b1cdbd2cSJim Jagielski             break;
2558*b1cdbd2cSJim Jagielski         case SVX_ADJUST_RIGHT:
2559*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_QR);
2560*b1cdbd2cSJim Jagielski             break;
2561*b1cdbd2cSJim Jagielski         case SVX_ADJUST_BLOCKLINE:
2562*b1cdbd2cSJim Jagielski         case SVX_ADJUST_BLOCK:
2563*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_QJ);
2564*b1cdbd2cSJim Jagielski             break;
2565*b1cdbd2cSJim Jagielski         case SVX_ADJUST_CENTER:
2566*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_QC);
2567*b1cdbd2cSJim Jagielski             break;
2568*b1cdbd2cSJim Jagielski         default:
2569*b1cdbd2cSJim Jagielski             break;
2570*b1cdbd2cSJim Jagielski     }
2571*b1cdbd2cSJim Jagielski }
2572*b1cdbd2cSJim Jagielski 
ParaSplit(const SvxFmtSplitItem & rSplit)2573*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaSplit( const SvxFmtSplitItem& rSplit )
2574*b1cdbd2cSJim Jagielski {
2575*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2576*b1cdbd2cSJim Jagielski 
2577*b1cdbd2cSJim Jagielski     if( !rSplit.GetValue() )
2578*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_KEEP);
2579*b1cdbd2cSJim Jagielski }
2580*b1cdbd2cSJim Jagielski 
ParaWidows(const SvxWidowsItem & rWidows)2581*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaWidows( const SvxWidowsItem& rWidows )
2582*b1cdbd2cSJim Jagielski {
2583*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2584*b1cdbd2cSJim Jagielski 
2585*b1cdbd2cSJim Jagielski     if (rWidows.GetValue())
2586*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_WIDCTLPAR);
2587*b1cdbd2cSJim Jagielski     else
2588*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_NOWIDCTLPAR);
2589*b1cdbd2cSJim Jagielski }
2590*b1cdbd2cSJim Jagielski 
ParaTabStop(const SvxTabStopItem & rTabStop)2591*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaTabStop( const SvxTabStopItem& rTabStop )
2592*b1cdbd2cSJim Jagielski {
2593*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2594*b1cdbd2cSJim Jagielski 
2595*b1cdbd2cSJim Jagielski     long nOffset = ((SvxLRSpaceItem&)m_rExport.GetItem( RES_LR_SPACE )).GetTxtLeft();
2596*b1cdbd2cSJim Jagielski     for( sal_uInt16 n = 0; n < rTabStop.Count(); n++ )
2597*b1cdbd2cSJim Jagielski     {
2598*b1cdbd2cSJim Jagielski         const SvxTabStop & rTS = rTabStop[ n ];
2599*b1cdbd2cSJim Jagielski         if( SVX_TAB_ADJUST_DEFAULT != rTS.GetAdjustment() )
2600*b1cdbd2cSJim Jagielski         {
2601*b1cdbd2cSJim Jagielski             const char* pFill = 0;
2602*b1cdbd2cSJim Jagielski             switch( rTS.GetFill() )
2603*b1cdbd2cSJim Jagielski             {
2604*b1cdbd2cSJim Jagielski                 case cDfltFillChar:
2605*b1cdbd2cSJim Jagielski                     break;
2606*b1cdbd2cSJim Jagielski 
2607*b1cdbd2cSJim Jagielski                 case '.':    pFill = OOO_STRING_SVTOOLS_RTF_TLDOT;    break;
2608*b1cdbd2cSJim Jagielski                 case '_':    pFill = OOO_STRING_SVTOOLS_RTF_TLUL;    break;
2609*b1cdbd2cSJim Jagielski                 case '-':    pFill = OOO_STRING_SVTOOLS_RTF_TLTH;    break;
2610*b1cdbd2cSJim Jagielski                 case '=':    pFill = OOO_STRING_SVTOOLS_RTF_TLEQ;    break;
2611*b1cdbd2cSJim Jagielski                 default:
2612*b1cdbd2cSJim Jagielski                         break;
2613*b1cdbd2cSJim Jagielski             }
2614*b1cdbd2cSJim Jagielski             if( pFill )
2615*b1cdbd2cSJim Jagielski                 m_aStyles.append(pFill);
2616*b1cdbd2cSJim Jagielski 
2617*b1cdbd2cSJim Jagielski             const sal_Char* pAdjStr = 0;
2618*b1cdbd2cSJim Jagielski             switch (rTS.GetAdjustment())
2619*b1cdbd2cSJim Jagielski             {
2620*b1cdbd2cSJim Jagielski                 case SVX_TAB_ADJUST_RIGHT:
2621*b1cdbd2cSJim Jagielski                     pAdjStr = OOO_STRING_SVTOOLS_RTF_TQR;
2622*b1cdbd2cSJim Jagielski                     break;
2623*b1cdbd2cSJim Jagielski                 case SVX_TAB_ADJUST_DECIMAL:
2624*b1cdbd2cSJim Jagielski                     pAdjStr = OOO_STRING_SVTOOLS_RTF_TQDEC;
2625*b1cdbd2cSJim Jagielski                     break;
2626*b1cdbd2cSJim Jagielski                 case SVX_TAB_ADJUST_CENTER:
2627*b1cdbd2cSJim Jagielski                     pAdjStr = OOO_STRING_SVTOOLS_RTF_TQC;
2628*b1cdbd2cSJim Jagielski                     break;
2629*b1cdbd2cSJim Jagielski                 default:
2630*b1cdbd2cSJim Jagielski                     break;
2631*b1cdbd2cSJim Jagielski             }
2632*b1cdbd2cSJim Jagielski             if (pAdjStr)
2633*b1cdbd2cSJim Jagielski                 m_aStyles.append(pAdjStr);
2634*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_TX);
2635*b1cdbd2cSJim Jagielski             m_aStyles.append((sal_Int32)(rTS.GetTabPos() + nOffset));
2636*b1cdbd2cSJim Jagielski         }
2637*b1cdbd2cSJim Jagielski         else
2638*b1cdbd2cSJim Jagielski         {
2639*b1cdbd2cSJim Jagielski             m_aTabStop.append( OOO_STRING_SVTOOLS_RTF_DEFTAB );
2640*b1cdbd2cSJim Jagielski             m_aTabStop.append( (sal_Int32)rTabStop[0].GetTabPos() );
2641*b1cdbd2cSJim Jagielski         }
2642*b1cdbd2cSJim Jagielski     }
2643*b1cdbd2cSJim Jagielski }
2644*b1cdbd2cSJim Jagielski 
ParaHyphenZone(const SvxHyphenZoneItem & rHyphenZone)2645*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaHyphenZone( const SvxHyphenZoneItem& rHyphenZone )
2646*b1cdbd2cSJim Jagielski {
2647*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2648*b1cdbd2cSJim Jagielski 
2649*b1cdbd2cSJim Jagielski     sal_Int32 nFlags = rHyphenZone.IsHyphen() ? 1 : 0;
2650*b1cdbd2cSJim Jagielski     if( rHyphenZone.IsPageEnd() )
2651*b1cdbd2cSJim Jagielski         nFlags += 2;
2652*b1cdbd2cSJim Jagielski     m_aStyles.append('{');
2653*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_IGNORE);
2654*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HYPHEN);
2655*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)nFlags);
2656*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HYPHLEAD);
2657*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)rHyphenZone.GetMinLead());
2658*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HYPHTRAIL);
2659*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)rHyphenZone.GetMinTrail());
2660*b1cdbd2cSJim Jagielski     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_HYPHMAX);
2661*b1cdbd2cSJim Jagielski     m_aStyles.append((sal_Int32)rHyphenZone.GetMaxHyphens());
2662*b1cdbd2cSJim Jagielski     m_aStyles.append('}');
2663*b1cdbd2cSJim Jagielski }
2664*b1cdbd2cSJim Jagielski 
ParaNumRule_Impl(const SwTxtNode * pTxtNd,sal_Int32 nLvl,sal_Int32 nNumId)2665*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaNumRule_Impl( const SwTxtNode* pTxtNd, sal_Int32 nLvl, sal_Int32 nNumId )
2666*b1cdbd2cSJim Jagielski {
2667*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2668*b1cdbd2cSJim Jagielski 
2669*b1cdbd2cSJim Jagielski     if ( USHRT_MAX == nNumId || 0 == nNumId || 0 == pTxtNd)
2670*b1cdbd2cSJim Jagielski         return;
2671*b1cdbd2cSJim Jagielski 
2672*b1cdbd2cSJim Jagielski     const SwNumRule* pRule = pTxtNd->GetNumRule();
2673*b1cdbd2cSJim Jagielski 
2674*b1cdbd2cSJim Jagielski     // --> OD 2008-03-18 #refactorlists#
2675*b1cdbd2cSJim Jagielski     //    if( pRule && MAXLEVEL > pTxtNd->GetActualListLevel() )
2676*b1cdbd2cSJim Jagielski     if( pRule && pTxtNd->IsInList() )
2677*b1cdbd2cSJim Jagielski         // <--
2678*b1cdbd2cSJim Jagielski     {
2679*b1cdbd2cSJim Jagielski         // --> OD 2008-03-18 #refactorlists#
2680*b1cdbd2cSJim Jagielski         ASSERT( pTxtNd->GetActualListLevel() >= 0 && pTxtNd->GetActualListLevel() < MAXLEVEL,
2681*b1cdbd2cSJim Jagielski                 "<SwRTFWriter::OutListNum(..)> - text node does not have valid list level. Serious defect -> please inform OD" );
2682*b1cdbd2cSJim Jagielski         // <--
2683*b1cdbd2cSJim Jagielski 
2684*b1cdbd2cSJim Jagielski         const bool bExportNumRule = USHRT_MAX != nNumId;
2685*b1cdbd2cSJim Jagielski         const SwNumFmt* pFmt = pRule->GetNumFmt( nLvl );
2686*b1cdbd2cSJim Jagielski         if( !pFmt )
2687*b1cdbd2cSJim Jagielski             pFmt = &pRule->Get( nLvl );
2688*b1cdbd2cSJim Jagielski 
2689*b1cdbd2cSJim Jagielski         const SfxItemSet& rNdSet = pTxtNd->GetSwAttrSet();
2690*b1cdbd2cSJim Jagielski 
2691*b1cdbd2cSJim Jagielski         if ( bExportNumRule ) {
2692*b1cdbd2cSJim Jagielski             m_aStyles.append('{');
2693*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LISTTEXT);
2694*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_PARD);
2695*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_PLAIN);
2696*b1cdbd2cSJim Jagielski             m_aStyles.append(' ');
2697*b1cdbd2cSJim Jagielski         }
2698*b1cdbd2cSJim Jagielski 
2699*b1cdbd2cSJim Jagielski         SvxLRSpaceItem aLR( (SvxLRSpaceItem&)rNdSet.Get( RES_LR_SPACE ) );
2700*b1cdbd2cSJim Jagielski         aLR.SetTxtLeft( aLR.GetTxtLeft() + pFmt->GetIndentAt() );
2701*b1cdbd2cSJim Jagielski         aLR.SetTxtFirstLineOfst( pFmt->GetFirstLineOffset() );
2702*b1cdbd2cSJim Jagielski 
2703*b1cdbd2cSJim Jagielski         sal_uInt16 nStyle = m_rExport.GetId( *pFmt->GetCharFmt() );
2704*b1cdbd2cSJim Jagielski         OString* pString = m_rExport.GetStyle(nStyle);
2705*b1cdbd2cSJim Jagielski         if (pString)
2706*b1cdbd2cSJim Jagielski             m_aStyles.append(*pString);
2707*b1cdbd2cSJim Jagielski 
2708*b1cdbd2cSJim Jagielski         {
2709*b1cdbd2cSJim Jagielski             String sTxt;
2710*b1cdbd2cSJim Jagielski             if( SVX_NUM_CHAR_SPECIAL == pFmt->GetNumberingType() || SVX_NUM_BITMAP == pFmt->GetNumberingType() )
2711*b1cdbd2cSJim Jagielski                 sTxt = pFmt->GetBulletChar();
2712*b1cdbd2cSJim Jagielski             else
2713*b1cdbd2cSJim Jagielski                 sTxt = pTxtNd->GetNumString();
2714*b1cdbd2cSJim Jagielski 
2715*b1cdbd2cSJim Jagielski             m_aStyles.append(' ');
2716*b1cdbd2cSJim Jagielski 
2717*b1cdbd2cSJim Jagielski             if (sTxt.Len())
2718*b1cdbd2cSJim Jagielski             {
2719*b1cdbd2cSJim Jagielski                 m_aStyles.append(m_rExport.OutString(sTxt, m_rExport.eDefaultEncoding));
2720*b1cdbd2cSJim Jagielski             }
2721*b1cdbd2cSJim Jagielski 
2722*b1cdbd2cSJim Jagielski             if( bExportNumRule )
2723*b1cdbd2cSJim Jagielski             {
2724*b1cdbd2cSJim Jagielski                 if( OUTLINE_RULE != pRule->GetRuleType() )
2725*b1cdbd2cSJim Jagielski                 {
2726*b1cdbd2cSJim Jagielski                     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_TAB);
2727*b1cdbd2cSJim Jagielski                     m_aStyles.append('}');
2728*b1cdbd2cSJim Jagielski                     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_ILVL);
2729*b1cdbd2cSJim Jagielski                     if( nLvl > 8 )            // RTF knows only 9 levels
2730*b1cdbd2cSJim Jagielski                     {
2731*b1cdbd2cSJim Jagielski                         m_aStyles.append((sal_Int32)8);
2732*b1cdbd2cSJim Jagielski                         m_aStyles.append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SOUTLVL);
2733*b1cdbd2cSJim Jagielski                         m_aStyles.append((sal_Int32)nLvl);
2734*b1cdbd2cSJim Jagielski                         m_aStyles.append('}');
2735*b1cdbd2cSJim Jagielski                     }
2736*b1cdbd2cSJim Jagielski                     else
2737*b1cdbd2cSJim Jagielski                         m_aStyles.append((sal_Int32)nLvl);
2738*b1cdbd2cSJim Jagielski                 }
2739*b1cdbd2cSJim Jagielski                 else
2740*b1cdbd2cSJim Jagielski                     m_aStyles.append(OOO_STRING_SVTOOLS_RTF_TAB "}");
2741*b1cdbd2cSJim Jagielski                 m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LS);
2742*b1cdbd2cSJim Jagielski                 m_aStyles.append((sal_Int32)m_rExport.GetId(*pRule)+1);
2743*b1cdbd2cSJim Jagielski                 m_aStyles.append(' ');
2744*b1cdbd2cSJim Jagielski             }
2745*b1cdbd2cSJim Jagielski             else if( sTxt.Len() )
2746*b1cdbd2cSJim Jagielski                 m_aStyles.append(OOO_STRING_SVTOOLS_RTF_TAB);
2747*b1cdbd2cSJim Jagielski         }
2748*b1cdbd2cSJim Jagielski         FormatLRSpace(aLR);
2749*b1cdbd2cSJim Jagielski     }
2750*b1cdbd2cSJim Jagielski }
2751*b1cdbd2cSJim Jagielski 
ParaScriptSpace(const SfxBoolItem & rScriptSpace)2752*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaScriptSpace( const SfxBoolItem& rScriptSpace )
2753*b1cdbd2cSJim Jagielski {
2754*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2755*b1cdbd2cSJim Jagielski 
2756*b1cdbd2cSJim Jagielski     if (!rScriptSpace.GetValue( ))
2757*b1cdbd2cSJim Jagielski         return;
2758*b1cdbd2cSJim Jagielski     switch ( rScriptSpace.Which( ) )
2759*b1cdbd2cSJim Jagielski     {
2760*b1cdbd2cSJim Jagielski         case RES_PARATR_SCRIPTSPACE:
2761*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_ASPALPHA);
2762*b1cdbd2cSJim Jagielski             break;
2763*b1cdbd2cSJim Jagielski         /* Is this needed?
2764*b1cdbd2cSJim Jagielski         case RES_PARATR_HANGINGPUNCTUATION:
2765*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_NOOVERFLOW);
2766*b1cdbd2cSJim Jagielski             break;
2767*b1cdbd2cSJim Jagielski         case RES_PARATR_FORBIDDEN_RULES:
2768*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_NOCWRAP);
2769*b1cdbd2cSJim Jagielski             break;*/
2770*b1cdbd2cSJim Jagielski         default:
2771*b1cdbd2cSJim Jagielski             break;
2772*b1cdbd2cSJim Jagielski     }
2773*b1cdbd2cSJim Jagielski }
2774*b1cdbd2cSJim Jagielski 
ParaVerticalAlign(const SvxParaVertAlignItem & rAlign)2775*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaVerticalAlign( const SvxParaVertAlignItem& rAlign )
2776*b1cdbd2cSJim Jagielski {
2777*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2778*b1cdbd2cSJim Jagielski 
2779*b1cdbd2cSJim Jagielski     const char* pStr;
2780*b1cdbd2cSJim Jagielski     switch ( rAlign.GetValue() )
2781*b1cdbd2cSJim Jagielski     {
2782*b1cdbd2cSJim Jagielski         case SvxParaVertAlignItem::TOP:         pStr = OOO_STRING_SVTOOLS_RTF_FAHANG;       break;
2783*b1cdbd2cSJim Jagielski         case SvxParaVertAlignItem::BOTTOM:      pStr = OOO_STRING_SVTOOLS_RTF_FAVAR;        break;
2784*b1cdbd2cSJim Jagielski         case SvxParaVertAlignItem::CENTER:      pStr = OOO_STRING_SVTOOLS_RTF_FACENTER;     break;
2785*b1cdbd2cSJim Jagielski         case SvxParaVertAlignItem::BASELINE:    pStr = OOO_STRING_SVTOOLS_RTF_FAROMAN;      break;
2786*b1cdbd2cSJim Jagielski         // default == SvxParaVertAlignItem::AUTOMATIC
2787*b1cdbd2cSJim Jagielski         default:                                pStr = OOO_STRING_SVTOOLS_RTF_FAAUTO;       break;
2788*b1cdbd2cSJim Jagielski     }
2789*b1cdbd2cSJim Jagielski     m_aStyles.append(pStr);
2790*b1cdbd2cSJim Jagielski }
2791*b1cdbd2cSJim Jagielski 
ParaSnapToGrid(const SvxParaGridItem &)2792*b1cdbd2cSJim Jagielski void RtfAttributeOutput::ParaSnapToGrid( const SvxParaGridItem& /*rGrid*/ )
2793*b1cdbd2cSJim Jagielski {
2794*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
2795*b1cdbd2cSJim Jagielski }
2796*b1cdbd2cSJim Jagielski 
FormatFrameSize(const SwFmtFrmSize & rSize)2797*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatFrameSize( const SwFmtFrmSize& rSize )
2798*b1cdbd2cSJim Jagielski {
2799*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2800*b1cdbd2cSJim Jagielski 
2801*b1cdbd2cSJim Jagielski     if ( m_rExport.bOutFlyFrmAttrs && m_rExport.bRTFFlySyntax )
2802*b1cdbd2cSJim Jagielski     {
2803*b1cdbd2cSJim Jagielski         if( rSize.GetWidth() )
2804*b1cdbd2cSJim Jagielski         {
2805*b1cdbd2cSJim Jagielski             m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_ABSW);
2806*b1cdbd2cSJim Jagielski             m_aRunText.getOStringBuffer().append((sal_Int32)rSize.GetWidth());
2807*b1cdbd2cSJim Jagielski         }
2808*b1cdbd2cSJim Jagielski 
2809*b1cdbd2cSJim Jagielski         if( rSize.GetHeight() )
2810*b1cdbd2cSJim Jagielski         {
2811*b1cdbd2cSJim Jagielski             long nH = rSize.GetHeight();
2812*b1cdbd2cSJim Jagielski             if( ATT_FIX_SIZE == rSize.GetHeightSizeType() )
2813*b1cdbd2cSJim Jagielski                 nH = -nH;
2814*b1cdbd2cSJim Jagielski             m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_ABSH);
2815*b1cdbd2cSJim Jagielski             m_aRunText.getOStringBuffer().append((sal_Int32)nH);
2816*b1cdbd2cSJim Jagielski         }
2817*b1cdbd2cSJim Jagielski     }
2818*b1cdbd2cSJim Jagielski     else if (m_rExport.bOutPageDescs)
2819*b1cdbd2cSJim Jagielski     {
2820*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_PGWSXN);
2821*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append((sal_Int32)rSize.GetWidth());
2822*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_PGHSXN);
2823*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append((sal_Int32)rSize.GetHeight());
2824*b1cdbd2cSJim Jagielski         if (!m_bBufferSectionBreaks)
2825*b1cdbd2cSJim Jagielski             m_rExport.Strm() << m_aSectionBreaks.makeStringAndClear();
2826*b1cdbd2cSJim Jagielski     }
2827*b1cdbd2cSJim Jagielski }
2828*b1cdbd2cSJim Jagielski 
FormatPaperBin(const SvxPaperBinItem &)2829*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatPaperBin( const SvxPaperBinItem& )
2830*b1cdbd2cSJim Jagielski {
2831*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
2832*b1cdbd2cSJim Jagielski }
2833*b1cdbd2cSJim Jagielski 
FormatLRSpace(const SvxLRSpaceItem & rLRSpace)2834*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatLRSpace( const SvxLRSpaceItem& rLRSpace )
2835*b1cdbd2cSJim Jagielski {
2836*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2837*b1cdbd2cSJim Jagielski 
2838*b1cdbd2cSJim Jagielski     if ( !m_rExport.bOutFlyFrmAttrs )
2839*b1cdbd2cSJim Jagielski     {
2840*b1cdbd2cSJim Jagielski         if( m_rExport.bOutPageDescs )
2841*b1cdbd2cSJim Jagielski         {
2842*b1cdbd2cSJim Jagielski             if( rLRSpace.GetLeft() )
2843*b1cdbd2cSJim Jagielski             {
2844*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_MARGLSXN);
2845*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append((sal_Int32)rLRSpace.GetLeft());
2846*b1cdbd2cSJim Jagielski             }
2847*b1cdbd2cSJim Jagielski             if( rLRSpace.GetRight() )
2848*b1cdbd2cSJim Jagielski             {
2849*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_MARGRSXN);
2850*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append((sal_Int32)rLRSpace.GetRight());
2851*b1cdbd2cSJim Jagielski             }
2852*b1cdbd2cSJim Jagielski             if (!m_bBufferSectionBreaks)
2853*b1cdbd2cSJim Jagielski                 m_rExport.Strm() << m_aSectionBreaks.makeStringAndClear();
2854*b1cdbd2cSJim Jagielski         }
2855*b1cdbd2cSJim Jagielski         else
2856*b1cdbd2cSJim Jagielski         {
2857*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LI);
2858*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rLRSpace.GetTxtLeft() );
2859*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_RI);
2860*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rLRSpace.GetRight() );
2861*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LIN);
2862*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rLRSpace.GetTxtLeft() );
2863*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_RIN);
2864*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rLRSpace.GetRight() );
2865*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_FI);
2866*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rLRSpace.GetTxtFirstLineOfst() );
2867*b1cdbd2cSJim Jagielski         }
2868*b1cdbd2cSJim Jagielski     }
2869*b1cdbd2cSJim Jagielski     else if (rLRSpace.GetLeft() == rLRSpace.GetRight() && m_rExport.bRTFFlySyntax)
2870*b1cdbd2cSJim Jagielski     {
2871*b1cdbd2cSJim Jagielski         m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_DFRMTXTX;
2872*b1cdbd2cSJim Jagielski         m_rExport.OutLong( rLRSpace.GetLeft() );
2873*b1cdbd2cSJim Jagielski     }
2874*b1cdbd2cSJim Jagielski }
2875*b1cdbd2cSJim Jagielski 
FormatULSpace(const SvxULSpaceItem & rULSpace)2876*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatULSpace( const SvxULSpaceItem& rULSpace )
2877*b1cdbd2cSJim Jagielski {
2878*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2879*b1cdbd2cSJim Jagielski 
2880*b1cdbd2cSJim Jagielski     if ( !m_rExport.bOutFlyFrmAttrs )
2881*b1cdbd2cSJim Jagielski     {
2882*b1cdbd2cSJim Jagielski         if( m_rExport.bOutPageDescs )
2883*b1cdbd2cSJim Jagielski         {
2884*b1cdbd2cSJim Jagielski 
2885*b1cdbd2cSJim Jagielski             ASSERT( m_rExport.GetCurItemSet(), "Impossible" );
2886*b1cdbd2cSJim Jagielski             if ( !m_rExport.GetCurItemSet() )
2887*b1cdbd2cSJim Jagielski                 return;
2888*b1cdbd2cSJim Jagielski 
2889*b1cdbd2cSJim Jagielski             HdFtDistanceGlue aDistances( *m_rExport.GetCurItemSet() );
2890*b1cdbd2cSJim Jagielski 
2891*b1cdbd2cSJim Jagielski             if( aDistances.dyaTop )
2892*b1cdbd2cSJim Jagielski             {
2893*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_MARGTSXN);
2894*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append((sal_Int32)aDistances.dyaTop);
2895*b1cdbd2cSJim Jagielski             }
2896*b1cdbd2cSJim Jagielski             if ( aDistances.HasHeader() )
2897*b1cdbd2cSJim Jagielski             {
2898*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_HEADERY);
2899*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append((sal_Int32)aDistances.dyaHdrTop);
2900*b1cdbd2cSJim Jagielski             }
2901*b1cdbd2cSJim Jagielski 
2902*b1cdbd2cSJim Jagielski             if( aDistances.dyaBottom )
2903*b1cdbd2cSJim Jagielski             {
2904*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_MARGBSXN);
2905*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append((sal_Int32)aDistances.dyaBottom);
2906*b1cdbd2cSJim Jagielski             }
2907*b1cdbd2cSJim Jagielski             if( aDistances.HasFooter() )
2908*b1cdbd2cSJim Jagielski             {
2909*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OOO_STRING_SVTOOLS_RTF_FOOTERY);
2910*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append((sal_Int32)aDistances.dyaHdrBottom);
2911*b1cdbd2cSJim Jagielski             }
2912*b1cdbd2cSJim Jagielski             if (!m_bBufferSectionBreaks)
2913*b1cdbd2cSJim Jagielski                 m_rExport.Strm() << m_aSectionBreaks.makeStringAndClear();
2914*b1cdbd2cSJim Jagielski         }
2915*b1cdbd2cSJim Jagielski         else
2916*b1cdbd2cSJim Jagielski         {
2917*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SB);
2918*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rULSpace.GetUpper() );
2919*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_SA);
2920*b1cdbd2cSJim Jagielski             m_aStyles.append( (sal_Int32) rULSpace.GetLower() );
2921*b1cdbd2cSJim Jagielski         }
2922*b1cdbd2cSJim Jagielski     }
2923*b1cdbd2cSJim Jagielski     else if (rULSpace.GetUpper() == rULSpace.GetLower() && m_rExport.bRTFFlySyntax)
2924*b1cdbd2cSJim Jagielski     {
2925*b1cdbd2cSJim Jagielski         m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_DFRMTXTY;
2926*b1cdbd2cSJim Jagielski         m_rExport.OutLong( rULSpace.GetLower() );
2927*b1cdbd2cSJim Jagielski     }
2928*b1cdbd2cSJim Jagielski }
2929*b1cdbd2cSJim Jagielski 
FormatSurround(const SwFmtSurround & rSurround)2930*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatSurround( const SwFmtSurround& rSurround )
2931*b1cdbd2cSJim Jagielski {
2932*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2933*b1cdbd2cSJim Jagielski 
2934*b1cdbd2cSJim Jagielski     if ( m_rExport.bOutFlyFrmAttrs && !m_rExport.bRTFFlySyntax )
2935*b1cdbd2cSJim Jagielski     {
2936*b1cdbd2cSJim Jagielski         SwSurround eSurround = rSurround.GetSurround();
2937*b1cdbd2cSJim Jagielski         sal_Bool bGold = SURROUND_IDEAL == eSurround;
2938*b1cdbd2cSJim Jagielski         if( bGold )
2939*b1cdbd2cSJim Jagielski             eSurround = SURROUND_PARALLEL;
2940*b1cdbd2cSJim Jagielski         RTFSurround aMC( bGold, static_cast< sal_uInt8 >(eSurround) );
2941*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLYMAINCNT);
2942*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append( (sal_Int32) aMC.GetValue() );
2943*b1cdbd2cSJim Jagielski     }
2944*b1cdbd2cSJim Jagielski }
2945*b1cdbd2cSJim Jagielski 
FormatVertOrientation(const SwFmtVertOrient & rFlyVert)2946*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatVertOrientation( const SwFmtVertOrient& rFlyVert )
2947*b1cdbd2cSJim Jagielski {
2948*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2949*b1cdbd2cSJim Jagielski 
2950*b1cdbd2cSJim Jagielski     if ( m_rExport.bOutFlyFrmAttrs && m_rExport.bRTFFlySyntax )
2951*b1cdbd2cSJim Jagielski     {
2952*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_PVPARA);
2953*b1cdbd2cSJim Jagielski 
2954*b1cdbd2cSJim Jagielski         switch (rFlyVert.GetVertOrient())
2955*b1cdbd2cSJim Jagielski         {
2956*b1cdbd2cSJim Jagielski             case text::VertOrientation::TOP:
2957*b1cdbd2cSJim Jagielski             case text::VertOrientation::LINE_TOP:
2958*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_POSYT);
2959*b1cdbd2cSJim Jagielski                 break;
2960*b1cdbd2cSJim Jagielski             case text::VertOrientation::BOTTOM:
2961*b1cdbd2cSJim Jagielski             case text::VertOrientation::LINE_BOTTOM:
2962*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_POSYB);
2963*b1cdbd2cSJim Jagielski                 break;
2964*b1cdbd2cSJim Jagielski             case text::VertOrientation::CENTER:
2965*b1cdbd2cSJim Jagielski             case text::VertOrientation::LINE_CENTER:
2966*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_POSYC);
2967*b1cdbd2cSJim Jagielski                 break;
2968*b1cdbd2cSJim Jagielski             case text::VertOrientation::NONE:
2969*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_POSY);
2970*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append((sal_Int32)rFlyVert.GetPos());
2971*b1cdbd2cSJim Jagielski                 break;
2972*b1cdbd2cSJim Jagielski             default:
2973*b1cdbd2cSJim Jagielski                 break;
2974*b1cdbd2cSJim Jagielski         }
2975*b1cdbd2cSJim Jagielski     }
2976*b1cdbd2cSJim Jagielski     else if ( !m_rExport.bRTFFlySyntax )
2977*b1cdbd2cSJim Jagielski     {
2978*b1cdbd2cSJim Jagielski         RTFVertOrient aVO( static_cast< sal_uInt16 >(rFlyVert.GetVertOrient()), static_cast< sal_uInt16 >(rFlyVert.GetRelationOrient()) );
2979*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLYVERT);
2980*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append((sal_Int32)aVO.GetValue());
2981*b1cdbd2cSJim Jagielski     }
2982*b1cdbd2cSJim Jagielski }
2983*b1cdbd2cSJim Jagielski 
FormatHorizOrientation(const SwFmtHoriOrient & rFlyHori)2984*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatHorizOrientation( const SwFmtHoriOrient& rFlyHori )
2985*b1cdbd2cSJim Jagielski {
2986*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
2987*b1cdbd2cSJim Jagielski 
2988*b1cdbd2cSJim Jagielski     if ( m_rExport.bOutFlyFrmAttrs && m_rExport.bRTFFlySyntax )
2989*b1cdbd2cSJim Jagielski     {
2990*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_PHCOL);
2991*b1cdbd2cSJim Jagielski 
2992*b1cdbd2cSJim Jagielski         const char* pS = 0;
2993*b1cdbd2cSJim Jagielski         switch(rFlyHori.GetHoriOrient())
2994*b1cdbd2cSJim Jagielski         {
2995*b1cdbd2cSJim Jagielski             case text::HoriOrientation::RIGHT:
2996*b1cdbd2cSJim Jagielski                 pS = rFlyHori.IsPosToggle() ? OOO_STRING_SVTOOLS_RTF_POSXO : OOO_STRING_SVTOOLS_RTF_POSXR;
2997*b1cdbd2cSJim Jagielski                 break;
2998*b1cdbd2cSJim Jagielski             case text::HoriOrientation::LEFT:
2999*b1cdbd2cSJim Jagielski                 pS = rFlyHori.IsPosToggle() ? OOO_STRING_SVTOOLS_RTF_POSXI : OOO_STRING_SVTOOLS_RTF_POSXL;
3000*b1cdbd2cSJim Jagielski                 break;
3001*b1cdbd2cSJim Jagielski             case text::HoriOrientation::CENTER:
3002*b1cdbd2cSJim Jagielski                 pS = OOO_STRING_SVTOOLS_RTF_POSXC;
3003*b1cdbd2cSJim Jagielski                 break;
3004*b1cdbd2cSJim Jagielski             case text::HoriOrientation::NONE:
3005*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_POSX);
3006*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append((sal_Int32)rFlyHori.GetPos());
3007*b1cdbd2cSJim Jagielski                 break;
3008*b1cdbd2cSJim Jagielski             default:
3009*b1cdbd2cSJim Jagielski                 break;
3010*b1cdbd2cSJim Jagielski         }
3011*b1cdbd2cSJim Jagielski         if (pS)
3012*b1cdbd2cSJim Jagielski             m_aRunText.getOStringBuffer().append(pS);
3013*b1cdbd2cSJim Jagielski     } else if ( !m_rExport.bRTFFlySyntax )
3014*b1cdbd2cSJim Jagielski     {
3015*b1cdbd2cSJim Jagielski         RTFHoriOrient aHO( static_cast< sal_uInt16 >(rFlyHori.GetHoriOrient()),
3016*b1cdbd2cSJim Jagielski                 static_cast< sal_uInt16 >(rFlyHori.GetRelationOrient()) );
3017*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLYHORZ);
3018*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append((sal_Int32)aHO.GetValue());
3019*b1cdbd2cSJim Jagielski     }
3020*b1cdbd2cSJim Jagielski }
3021*b1cdbd2cSJim Jagielski 
FormatAnchor(const SwFmtAnchor & rAnchor)3022*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatAnchor( const SwFmtAnchor& rAnchor )
3023*b1cdbd2cSJim Jagielski {
3024*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3025*b1cdbd2cSJim Jagielski 
3026*b1cdbd2cSJim Jagielski     if ( !m_rExport.bRTFFlySyntax )
3027*b1cdbd2cSJim Jagielski     {
3028*b1cdbd2cSJim Jagielski         sal_uInt16 nId = static_cast< sal_uInt16 >(rAnchor.GetAnchorId());
3029*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLYANCHOR);
3030*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append((sal_Int32)nId);
3031*b1cdbd2cSJim Jagielski         switch( nId )
3032*b1cdbd2cSJim Jagielski         {
3033*b1cdbd2cSJim Jagielski             case FLY_AT_PAGE:
3034*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLYPAGE);
3035*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append((sal_Int32)rAnchor.GetPageNum());
3036*b1cdbd2cSJim Jagielski                 break;
3037*b1cdbd2cSJim Jagielski             case FLY_AT_PARA:
3038*b1cdbd2cSJim Jagielski             case FLY_AS_CHAR:
3039*b1cdbd2cSJim Jagielski                 m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_FLYCNTNT);
3040*b1cdbd2cSJim Jagielski                 break;
3041*b1cdbd2cSJim Jagielski         }
3042*b1cdbd2cSJim Jagielski     }
3043*b1cdbd2cSJim Jagielski }
3044*b1cdbd2cSJim Jagielski 
FormatBackground(const SvxBrushItem & rBrush)3045*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatBackground( const SvxBrushItem& rBrush )
3046*b1cdbd2cSJim Jagielski {
3047*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3048*b1cdbd2cSJim Jagielski 
3049*b1cdbd2cSJim Jagielski     if( !rBrush.GetColor().GetTransparency() )
3050*b1cdbd2cSJim Jagielski     {
3051*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_CBPAT);
3052*b1cdbd2cSJim Jagielski         m_aStyles.append((sal_Int32)m_rExport.GetColor(rBrush.GetColor()));
3053*b1cdbd2cSJim Jagielski     }
3054*b1cdbd2cSJim Jagielski }
3055*b1cdbd2cSJim Jagielski 
FormatBox(const SvxBoxItem & rBox)3056*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatBox( const SvxBoxItem& rBox )
3057*b1cdbd2cSJim Jagielski {
3058*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3059*b1cdbd2cSJim Jagielski 
3060*b1cdbd2cSJim Jagielski     static sal_uInt16 __READONLY_DATA aBorders[] = {
3061*b1cdbd2cSJim Jagielski         BOX_LINE_TOP, BOX_LINE_LEFT, BOX_LINE_BOTTOM, BOX_LINE_RIGHT };
3062*b1cdbd2cSJim Jagielski     static const sal_Char* aBorderNames[] = {
3063*b1cdbd2cSJim Jagielski         OOO_STRING_SVTOOLS_RTF_BRDRT, OOO_STRING_SVTOOLS_RTF_BRDRL, OOO_STRING_SVTOOLS_RTF_BRDRB, OOO_STRING_SVTOOLS_RTF_BRDRR };
3064*b1cdbd2cSJim Jagielski 
3065*b1cdbd2cSJim Jagielski     sal_uInt16 nDist = rBox.GetDistance();
3066*b1cdbd2cSJim Jagielski 
3067*b1cdbd2cSJim Jagielski     if ( m_rExport.bRTFFlySyntax )
3068*b1cdbd2cSJim Jagielski         return;
3069*b1cdbd2cSJim Jagielski 
3070*b1cdbd2cSJim Jagielski     if( rBox.GetTop() && rBox.GetBottom() &&
3071*b1cdbd2cSJim Jagielski             rBox.GetLeft() && rBox.GetRight() &&
3072*b1cdbd2cSJim Jagielski             *rBox.GetTop() == *rBox.GetBottom() &&
3073*b1cdbd2cSJim Jagielski             *rBox.GetTop() == *rBox.GetLeft() &&
3074*b1cdbd2cSJim Jagielski             *rBox.GetTop() == *rBox.GetRight() &&
3075*b1cdbd2cSJim Jagielski             nDist == rBox.GetDistance( BOX_LINE_TOP ) &&
3076*b1cdbd2cSJim Jagielski             nDist == rBox.GetDistance( BOX_LINE_LEFT ) &&
3077*b1cdbd2cSJim Jagielski             nDist == rBox.GetDistance( BOX_LINE_BOTTOM ) &&
3078*b1cdbd2cSJim Jagielski             nDist == rBox.GetDistance( BOX_LINE_RIGHT ))
3079*b1cdbd2cSJim Jagielski         m_aSectionBreaks.append(OutBorderLine( m_rExport, rBox.GetTop(), OOO_STRING_SVTOOLS_RTF_BOX, nDist ));
3080*b1cdbd2cSJim Jagielski     else
3081*b1cdbd2cSJim Jagielski     {
3082*b1cdbd2cSJim Jagielski         const sal_uInt16* pBrd = aBorders;
3083*b1cdbd2cSJim Jagielski         const sal_Char** pBrdNms = (const sal_Char**)aBorderNames;
3084*b1cdbd2cSJim Jagielski         for(int i = 0; i < 4; ++i, ++pBrd, ++pBrdNms)
3085*b1cdbd2cSJim Jagielski         {
3086*b1cdbd2cSJim Jagielski             if (const SvxBorderLine* pLn = rBox.GetLine(*pBrd))
3087*b1cdbd2cSJim Jagielski             {
3088*b1cdbd2cSJim Jagielski                 m_aSectionBreaks.append(OutBorderLine(m_rExport, pLn, *pBrdNms,
3089*b1cdbd2cSJim Jagielski                         rBox.GetDistance(*pBrd)));
3090*b1cdbd2cSJim Jagielski             }
3091*b1cdbd2cSJim Jagielski         }
3092*b1cdbd2cSJim Jagielski     }
3093*b1cdbd2cSJim Jagielski 
3094*b1cdbd2cSJim Jagielski     const sal_uInt16* pBrd = aBorders;
3095*b1cdbd2cSJim Jagielski     const sal_Char** pBrdNms = (const sal_Char**)aBorderNames;
3096*b1cdbd2cSJim Jagielski     for( int i = 0; i < 4; ++i, ++pBrd, ++pBrdNms )
3097*b1cdbd2cSJim Jagielski     {
3098*b1cdbd2cSJim Jagielski         const SvxBorderLine* pLn = rBox.GetLine( *pBrd );
3099*b1cdbd2cSJim Jagielski         if( pLn )
3100*b1cdbd2cSJim Jagielski         {
3101*b1cdbd2cSJim Jagielski             m_aSectionBreaks.append("{" OOO_STRING_SVTOOLS_RTF_IGNORE);
3102*b1cdbd2cSJim Jagielski             m_aSectionBreaks.append(OutBorderLine( m_rExport, pLn, *pBrdNms ));
3103*b1cdbd2cSJim Jagielski             m_aSectionBreaks.append("}" OOO_STRING_SVTOOLS_RTF_BRSP);
3104*b1cdbd2cSJim Jagielski             m_aSectionBreaks.append((sal_Int32)rBox.GetDistance( *pBrd ));
3105*b1cdbd2cSJim Jagielski         }
3106*b1cdbd2cSJim Jagielski     }
3107*b1cdbd2cSJim Jagielski 
3108*b1cdbd2cSJim Jagielski     if (!m_bBufferSectionBreaks)
3109*b1cdbd2cSJim Jagielski         m_aStyles.append(m_aSectionBreaks.makeStringAndClear());
3110*b1cdbd2cSJim Jagielski }
3111*b1cdbd2cSJim Jagielski 
FormatColumns_Impl(sal_uInt16 nCols,const SwFmtCol & rCol,bool bEven,SwTwips nPageSize)3112*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatColumns_Impl( sal_uInt16 nCols, const SwFmtCol& rCol, bool bEven, SwTwips nPageSize )
3113*b1cdbd2cSJim Jagielski {
3114*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3115*b1cdbd2cSJim Jagielski 
3116*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_COLS;
3117*b1cdbd2cSJim Jagielski     m_rExport.OutLong( nCols );
3118*b1cdbd2cSJim Jagielski 
3119*b1cdbd2cSJim Jagielski     if( bEven )
3120*b1cdbd2cSJim Jagielski     {
3121*b1cdbd2cSJim Jagielski         m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_COLSX;
3122*b1cdbd2cSJim Jagielski         m_rExport.OutLong( rCol.GetGutterWidth( sal_True ) );
3123*b1cdbd2cSJim Jagielski     }
3124*b1cdbd2cSJim Jagielski     else
3125*b1cdbd2cSJim Jagielski     {
3126*b1cdbd2cSJim Jagielski         const SwColumns & rColumns = rCol.GetColumns( );
3127*b1cdbd2cSJim Jagielski         for( sal_uInt16 n = 0; n < nCols; )
3128*b1cdbd2cSJim Jagielski         {
3129*b1cdbd2cSJim Jagielski             m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_COLNO;
3130*b1cdbd2cSJim Jagielski             m_rExport.OutLong( n+1 );
3131*b1cdbd2cSJim Jagielski 
3132*b1cdbd2cSJim Jagielski             m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_COLW;
3133*b1cdbd2cSJim Jagielski             m_rExport.OutLong( rCol.CalcPrtColWidth( n, nPageSize ) );
3134*b1cdbd2cSJim Jagielski 
3135*b1cdbd2cSJim Jagielski             if( ++n != nCols )
3136*b1cdbd2cSJim Jagielski             {
3137*b1cdbd2cSJim Jagielski                 m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_COLSR;
3138*b1cdbd2cSJim Jagielski                 m_rExport.OutLong( rColumns[ n-1 ]->GetRight() +
3139*b1cdbd2cSJim Jagielski                         rColumns[ n ]->GetLeft() );
3140*b1cdbd2cSJim Jagielski             }
3141*b1cdbd2cSJim Jagielski         }
3142*b1cdbd2cSJim Jagielski     }
3143*b1cdbd2cSJim Jagielski }
3144*b1cdbd2cSJim Jagielski 
FormatKeep(const SvxFmtKeepItem & rItem)3145*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatKeep( const SvxFmtKeepItem& rItem )
3146*b1cdbd2cSJim Jagielski {
3147*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3148*b1cdbd2cSJim Jagielski 
3149*b1cdbd2cSJim Jagielski     if( rItem.GetValue() )
3150*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_KEEPN);
3151*b1cdbd2cSJim Jagielski }
3152*b1cdbd2cSJim Jagielski 
FormatTextGrid(const SwTextGridItem &)3153*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatTextGrid( const SwTextGridItem& /*rGrid*/ )
3154*b1cdbd2cSJim Jagielski {
3155*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
3156*b1cdbd2cSJim Jagielski }
3157*b1cdbd2cSJim Jagielski 
FormatLineNumbering(const SwFmtLineNumber & rNumbering)3158*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatLineNumbering( const SwFmtLineNumber& rNumbering )
3159*b1cdbd2cSJim Jagielski {
3160*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3161*b1cdbd2cSJim Jagielski 
3162*b1cdbd2cSJim Jagielski     if ( !rNumbering.IsCount( ) )
3163*b1cdbd2cSJim Jagielski         m_aStyles.append(OOO_STRING_SVTOOLS_RTF_NOLINE);
3164*b1cdbd2cSJim Jagielski }
3165*b1cdbd2cSJim Jagielski 
FormatFrameDirection(const SvxFrameDirectionItem & rDirection)3166*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FormatFrameDirection( const SvxFrameDirectionItem& rDirection )
3167*b1cdbd2cSJim Jagielski {
3168*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3169*b1cdbd2cSJim Jagielski 
3170*b1cdbd2cSJim Jagielski     if (!m_rExport.bOutPageDescs)
3171*b1cdbd2cSJim Jagielski     {
3172*b1cdbd2cSJim Jagielski         if (rDirection.GetValue() == FRMDIR_HORI_RIGHT_TOP)
3173*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_RTLPAR);
3174*b1cdbd2cSJim Jagielski         else
3175*b1cdbd2cSJim Jagielski             m_aStyles.append(OOO_STRING_SVTOOLS_RTF_LTRPAR);
3176*b1cdbd2cSJim Jagielski     }
3177*b1cdbd2cSJim Jagielski }
3178*b1cdbd2cSJim Jagielski 
WriteExpand(const SwField * pFld)3179*b1cdbd2cSJim Jagielski void RtfAttributeOutput::WriteExpand( const SwField* pFld )
3180*b1cdbd2cSJim Jagielski {
3181*b1cdbd2cSJim Jagielski     String sStr;        // fuer optionale Parameter
3182*b1cdbd2cSJim Jagielski     switch (pFld->GetTyp()->Which())
3183*b1cdbd2cSJim Jagielski     {
3184*b1cdbd2cSJim Jagielski         //#119803# Export user field and DB field for RTF filter
3185*b1cdbd2cSJim Jagielski         case RES_DBFLD:
3186*b1cdbd2cSJim Jagielski             sStr = FieldString(ww::eMERGEFIELD);
3187*b1cdbd2cSJim Jagielski             // kein break !!
3188*b1cdbd2cSJim Jagielski         case RES_USERFLD:
3189*b1cdbd2cSJim Jagielski             sStr += pFld->GetTyp()->GetName();
3190*b1cdbd2cSJim Jagielski             m_rExport.OutputField(pFld, ww::eNONE, sStr);
3191*b1cdbd2cSJim Jagielski             break;
3192*b1cdbd2cSJim Jagielski     }
3193*b1cdbd2cSJim Jagielski }
3194*b1cdbd2cSJim Jagielski 
RefField(const SwField &,const String &)3195*b1cdbd2cSJim Jagielski void RtfAttributeOutput::RefField( const SwField& /*rFld*/, const String& /*rRef*/ )
3196*b1cdbd2cSJim Jagielski {
3197*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
3198*b1cdbd2cSJim Jagielski }
3199*b1cdbd2cSJim Jagielski 
HiddenField(const SwField &)3200*b1cdbd2cSJim Jagielski void RtfAttributeOutput::HiddenField( const SwField& /*rFld*/ )
3201*b1cdbd2cSJim Jagielski {
3202*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
3203*b1cdbd2cSJim Jagielski }
3204*b1cdbd2cSJim Jagielski 
SetField(const SwField &,ww::eField,const String &)3205*b1cdbd2cSJim Jagielski void RtfAttributeOutput::SetField( const SwField& /*rFld*/, ww::eField /*eType*/, const String& /*rCmd*/ )
3206*b1cdbd2cSJim Jagielski {
3207*b1cdbd2cSJim Jagielski     OSL_TRACE("TODO: %s", OSL_THIS_FUNC);
3208*b1cdbd2cSJim Jagielski }
3209*b1cdbd2cSJim Jagielski 
PostitField(const SwField * pFld)3210*b1cdbd2cSJim Jagielski void RtfAttributeOutput::PostitField( const SwField* pFld )
3211*b1cdbd2cSJim Jagielski {
3212*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3213*b1cdbd2cSJim Jagielski 
3214*b1cdbd2cSJim Jagielski     const SwPostItField& rPFld = *(SwPostItField*)pFld;
3215*b1cdbd2cSJim Jagielski 
3216*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNID " ");
3217*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(OUStringToOString(OUString(rPFld.GetPar1()), m_rExport.eCurrentEncoding));
3218*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("}");
3219*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNAUTHOR " ");
3220*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(OUStringToOString(OUString(rPFld.GetPar1()), m_rExport.eCurrentEncoding));
3221*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("}");
3222*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(OOO_STRING_SVTOOLS_RTF_CHATN);
3223*b1cdbd2cSJim Jagielski 
3224*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ANNOTATION);
3225*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_ATNDATE " ");
3226*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append((sal_Int32)sw::ms::DateTime2DTTM(rPFld.GetDate()));
3227*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append('}');
3228*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(OUStringToOString(OUString(rPFld.GetContent()), m_rExport.eCurrentEncoding));
3229*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append('}');
3230*b1cdbd2cSJim Jagielski }
3231*b1cdbd2cSJim Jagielski 
DropdownField(const SwField *)3232*b1cdbd2cSJim Jagielski bool RtfAttributeOutput::DropdownField( const SwField* /*pFld*/ )
3233*b1cdbd2cSJim Jagielski {
3234*b1cdbd2cSJim Jagielski     // this is handled in OutputFlyFrame_Impl()
3235*b1cdbd2cSJim Jagielski     return true;
3236*b1cdbd2cSJim Jagielski }
3237*b1cdbd2cSJim Jagielski 
RtfAttributeOutput(RtfExport & rExport)3238*b1cdbd2cSJim Jagielski RtfAttributeOutput::RtfAttributeOutput( RtfExport &rExport )
3239*b1cdbd2cSJim Jagielski     : m_rExport( rExport ),
3240*b1cdbd2cSJim Jagielski     m_pTableWrt( NULL ),
3241*b1cdbd2cSJim Jagielski     m_bTableCellOpen( false ),
3242*b1cdbd2cSJim Jagielski     m_nTableDepth( 0 ),
3243*b1cdbd2cSJim Jagielski     m_bTblAfterCell( false ),
3244*b1cdbd2cSJim Jagielski     m_nColBreakNeeded( false ),
3245*b1cdbd2cSJim Jagielski     m_bBufferSectionBreaks( false ),
3246*b1cdbd2cSJim Jagielski     m_bBufferSectionHeaders( false ),
3247*b1cdbd2cSJim Jagielski     m_bLastTable( true ),
3248*b1cdbd2cSJim Jagielski     m_bWroteCellInfo( false )
3249*b1cdbd2cSJim Jagielski {
3250*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3251*b1cdbd2cSJim Jagielski }
3252*b1cdbd2cSJim Jagielski 
~RtfAttributeOutput()3253*b1cdbd2cSJim Jagielski RtfAttributeOutput::~RtfAttributeOutput()
3254*b1cdbd2cSJim Jagielski {
3255*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3256*b1cdbd2cSJim Jagielski }
3257*b1cdbd2cSJim Jagielski 
GetExport()3258*b1cdbd2cSJim Jagielski MSWordExportBase& RtfAttributeOutput::GetExport()
3259*b1cdbd2cSJim Jagielski {
3260*b1cdbd2cSJim Jagielski     return m_rExport;
3261*b1cdbd2cSJim Jagielski }
3262*b1cdbd2cSJim Jagielski 
3263*b1cdbd2cSJim Jagielski // These are used by wwFont::WriteRtf()
3264*b1cdbd2cSJim Jagielski 
3265*b1cdbd2cSJim Jagielski /// Start the font.
StartFont(const String & rFamilyName) const3266*b1cdbd2cSJim Jagielski void RtfAttributeOutput::StartFont( const String& rFamilyName ) const
3267*b1cdbd2cSJim Jagielski {
3268*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3269*b1cdbd2cSJim Jagielski 
3270*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OUStringToOString( OUString( rFamilyName ), m_rExport.eCurrentEncoding ).getStr();
3271*b1cdbd2cSJim Jagielski }
3272*b1cdbd2cSJim Jagielski 
3273*b1cdbd2cSJim Jagielski /// End the font.
EndFont() const3274*b1cdbd2cSJim Jagielski void RtfAttributeOutput::EndFont() const
3275*b1cdbd2cSJim Jagielski {
3276*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3277*b1cdbd2cSJim Jagielski 
3278*b1cdbd2cSJim Jagielski     m_rExport.Strm() << ";}";
3279*b1cdbd2cSJim Jagielski }
3280*b1cdbd2cSJim Jagielski 
3281*b1cdbd2cSJim Jagielski /// Alternate name for the font.
FontAlternateName(const String & rName) const3282*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FontAlternateName( const String& rName ) const
3283*b1cdbd2cSJim Jagielski {
3284*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3285*b1cdbd2cSJim Jagielski 
3286*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '{' << OOO_STRING_SVTOOLS_RTF_IGNORE << OOO_STRING_SVTOOLS_RTF_FALT << ' ';
3287*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OUStringToOString( OUString( rName ), m_rExport.eCurrentEncoding ) << '}';
3288*b1cdbd2cSJim Jagielski }
3289*b1cdbd2cSJim Jagielski 
3290*b1cdbd2cSJim Jagielski /// Font charset.
FontCharset(sal_uInt8 nCharSet) const3291*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FontCharset( sal_uInt8 nCharSet ) const
3292*b1cdbd2cSJim Jagielski {
3293*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3294*b1cdbd2cSJim Jagielski 
3295*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_FCHARSET;
3296*b1cdbd2cSJim Jagielski     m_rExport.OutULong( nCharSet );
3297*b1cdbd2cSJim Jagielski     m_rExport.Strm() << ' ';
3298*b1cdbd2cSJim Jagielski }
3299*b1cdbd2cSJim Jagielski 
3300*b1cdbd2cSJim Jagielski /// Font family.
FontFamilyType(FontFamily eFamily,const wwFont & rFont) const3301*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FontFamilyType( FontFamily eFamily, const wwFont &rFont ) const
3302*b1cdbd2cSJim Jagielski {
3303*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3304*b1cdbd2cSJim Jagielski 
3305*b1cdbd2cSJim Jagielski     m_rExport.Strm() << '{' << OOO_STRING_SVTOOLS_RTF_F;
3306*b1cdbd2cSJim Jagielski 
3307*b1cdbd2cSJim Jagielski     const char* pStr = OOO_STRING_SVTOOLS_RTF_FNIL;
3308*b1cdbd2cSJim Jagielski     switch (eFamily)
3309*b1cdbd2cSJim Jagielski     {
3310*b1cdbd2cSJim Jagielski         case FAMILY_ROMAN:
3311*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_FROMAN;
3312*b1cdbd2cSJim Jagielski             break;
3313*b1cdbd2cSJim Jagielski         case FAMILY_SWISS:
3314*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_FSWISS;
3315*b1cdbd2cSJim Jagielski             break;
3316*b1cdbd2cSJim Jagielski         case FAMILY_MODERN:
3317*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_FMODERN;
3318*b1cdbd2cSJim Jagielski             break;
3319*b1cdbd2cSJim Jagielski         case FAMILY_SCRIPT:
3320*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_FSCRIPT;
3321*b1cdbd2cSJim Jagielski             break;
3322*b1cdbd2cSJim Jagielski         case FAMILY_DECORATIVE:
3323*b1cdbd2cSJim Jagielski             pStr = OOO_STRING_SVTOOLS_RTF_FDECOR;
3324*b1cdbd2cSJim Jagielski             break;
3325*b1cdbd2cSJim Jagielski         default:
3326*b1cdbd2cSJim Jagielski             break;
3327*b1cdbd2cSJim Jagielski     }
3328*b1cdbd2cSJim Jagielski     m_rExport.OutULong(m_rExport.maFontHelper.GetId(rFont)) << pStr;
3329*b1cdbd2cSJim Jagielski }
3330*b1cdbd2cSJim Jagielski 
3331*b1cdbd2cSJim Jagielski /// Font pitch.
FontPitchType(FontPitch ePitch) const3332*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FontPitchType( FontPitch ePitch ) const
3333*b1cdbd2cSJim Jagielski {
3334*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3335*b1cdbd2cSJim Jagielski 
3336*b1cdbd2cSJim Jagielski     m_rExport.Strm() << OOO_STRING_SVTOOLS_RTF_FPRQ;
3337*b1cdbd2cSJim Jagielski 
3338*b1cdbd2cSJim Jagielski     sal_uInt16 nVal = 0;
3339*b1cdbd2cSJim Jagielski     switch (ePitch)
3340*b1cdbd2cSJim Jagielski     {
3341*b1cdbd2cSJim Jagielski         case PITCH_FIXED:
3342*b1cdbd2cSJim Jagielski             nVal = 1;
3343*b1cdbd2cSJim Jagielski             break;
3344*b1cdbd2cSJim Jagielski         case PITCH_VARIABLE:
3345*b1cdbd2cSJim Jagielski             nVal = 2;
3346*b1cdbd2cSJim Jagielski             break;
3347*b1cdbd2cSJim Jagielski         default:
3348*b1cdbd2cSJim Jagielski             break;
3349*b1cdbd2cSJim Jagielski     }
3350*b1cdbd2cSJim Jagielski     m_rExport.OutULong(nVal);
3351*b1cdbd2cSJim Jagielski }
3352*b1cdbd2cSJim Jagielski 
IsEMF(const sal_uInt8 * pGraphicAry,unsigned long nSize)3353*b1cdbd2cSJim Jagielski static bool IsEMF(const sal_uInt8 *pGraphicAry, unsigned long nSize)
3354*b1cdbd2cSJim Jagielski {
3355*b1cdbd2cSJim Jagielski     if (pGraphicAry && (nSize > 0x2c ))
3356*b1cdbd2cSJim Jagielski     {
3357*b1cdbd2cSJim Jagielski         // check the magic number
3358*b1cdbd2cSJim Jagielski         if (
3359*b1cdbd2cSJim Jagielski                 (pGraphicAry[0x28] == 0x20 ) && (pGraphicAry[0x29] == 0x45) &&
3360*b1cdbd2cSJim Jagielski                 (pGraphicAry[0x2a] == 0x4d ) && (pGraphicAry[0x2b] == 0x46)
3361*b1cdbd2cSJim Jagielski            )
3362*b1cdbd2cSJim Jagielski         {
3363*b1cdbd2cSJim Jagielski             //emf detected
3364*b1cdbd2cSJim Jagielski             return true;
3365*b1cdbd2cSJim Jagielski         }
3366*b1cdbd2cSJim Jagielski     }
3367*b1cdbd2cSJim Jagielski     return false;
3368*b1cdbd2cSJim Jagielski }
3369*b1cdbd2cSJim Jagielski 
StripMetafileHeader(const sal_uInt8 * & rpGraphicAry,unsigned long & rSize)3370*b1cdbd2cSJim Jagielski static bool StripMetafileHeader(const sal_uInt8 *&rpGraphicAry, unsigned long &rSize)
3371*b1cdbd2cSJim Jagielski {
3372*b1cdbd2cSJim Jagielski     if (rpGraphicAry && (rSize > 0x22))
3373*b1cdbd2cSJim Jagielski     {
3374*b1cdbd2cSJim Jagielski         if (
3375*b1cdbd2cSJim Jagielski              (rpGraphicAry[0] == 0xd7) && (rpGraphicAry[1] == 0xcd) &&
3376*b1cdbd2cSJim Jagielski              (rpGraphicAry[2] == 0xc6) && (rpGraphicAry[3] == 0x9a)
3377*b1cdbd2cSJim Jagielski            )
3378*b1cdbd2cSJim Jagielski         {   // we have to get rid of the metafileheader
3379*b1cdbd2cSJim Jagielski             rpGraphicAry += 22;
3380*b1cdbd2cSJim Jagielski             rSize -= 22;
3381*b1cdbd2cSJim Jagielski             return true;
3382*b1cdbd2cSJim Jagielski         }
3383*b1cdbd2cSJim Jagielski     }
3384*b1cdbd2cSJim Jagielski     return false;
3385*b1cdbd2cSJim Jagielski }
3386*b1cdbd2cSJim Jagielski 
WriteHex(const sal_uInt8 * pData,sal_uInt32 nSize,sal_uInt32 nLimit=64)3387*b1cdbd2cSJim Jagielski static OString WriteHex(const sal_uInt8* pData, sal_uInt32 nSize, sal_uInt32 nLimit = 64)
3388*b1cdbd2cSJim Jagielski {
3389*b1cdbd2cSJim Jagielski     OStringBuffer aRet;
3390*b1cdbd2cSJim Jagielski 
3391*b1cdbd2cSJim Jagielski     sal_uInt32 nBreak = 0;
3392*b1cdbd2cSJim Jagielski     for (sal_uInt32 i = 0; i < nSize; i++)
3393*b1cdbd2cSJim Jagielski     {
3394*b1cdbd2cSJim Jagielski         OString sNo = OString::valueOf(sal_Int32(pData[i]), 16);
3395*b1cdbd2cSJim Jagielski         if (sNo.getLength() < 2)
3396*b1cdbd2cSJim Jagielski             aRet.append('0');
3397*b1cdbd2cSJim Jagielski         aRet.append(sNo);
3398*b1cdbd2cSJim Jagielski         if (++nBreak == nLimit)
3399*b1cdbd2cSJim Jagielski         {
3400*b1cdbd2cSJim Jagielski             aRet.append(RtfExport::sNewLine);
3401*b1cdbd2cSJim Jagielski             nBreak = 0;
3402*b1cdbd2cSJim Jagielski         }
3403*b1cdbd2cSJim Jagielski     }
3404*b1cdbd2cSJim Jagielski 
3405*b1cdbd2cSJim Jagielski     return aRet.makeStringAndClear();
3406*b1cdbd2cSJim Jagielski }
3407*b1cdbd2cSJim Jagielski 
WriteHex(sal_Int32 nNum)3408*b1cdbd2cSJim Jagielski static OString WriteHex(sal_Int32 nNum)
3409*b1cdbd2cSJim Jagielski {
3410*b1cdbd2cSJim Jagielski     return WriteHex((sal_uInt8*)&nNum, sizeof(sal_Int32));
3411*b1cdbd2cSJim Jagielski }
3412*b1cdbd2cSJim Jagielski 
WriteHex(OString sString)3413*b1cdbd2cSJim Jagielski static OString WriteHex(OString sString)
3414*b1cdbd2cSJim Jagielski {
3415*b1cdbd2cSJim Jagielski     OStringBuffer aRet;
3416*b1cdbd2cSJim Jagielski 
3417*b1cdbd2cSJim Jagielski     aRet.append(WriteHex(sString.getLength()+1));
3418*b1cdbd2cSJim Jagielski     aRet.append(WriteHex((sal_uInt8*)sString.getStr(), sString.getLength()+1));
3419*b1cdbd2cSJim Jagielski 
3420*b1cdbd2cSJim Jagielski     return aRet.makeStringAndClear();
3421*b1cdbd2cSJim Jagielski }
3422*b1cdbd2cSJim Jagielski 
lcl_AppendSP(OStringBuffer & rBuffer,const char cName[],const::rtl::OUString & rValue,const RtfExport & rExport)3423*b1cdbd2cSJim Jagielski void lcl_AppendSP( OStringBuffer& rBuffer,
3424*b1cdbd2cSJim Jagielski     const char cName[],
3425*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rValue,
3426*b1cdbd2cSJim Jagielski     const RtfExport& rExport )
3427*b1cdbd2cSJim Jagielski {
3428*b1cdbd2cSJim Jagielski     rBuffer.append( "{" OOO_STRING_SVTOOLS_RTF_SP "{" ); // "{\sp{"
3429*b1cdbd2cSJim Jagielski     rBuffer.append( OOO_STRING_SVTOOLS_RTF_SN " " );//" \sn "
3430*b1cdbd2cSJim Jagielski     rBuffer.append( cName ); //"PropName"
3431*b1cdbd2cSJim Jagielski     rBuffer.append( "}{" OOO_STRING_SVTOOLS_RTF_SV " " );
3432*b1cdbd2cSJim Jagielski // "}{ \sv "
3433*b1cdbd2cSJim Jagielski     rBuffer.append( rExport.OutString( rValue, rExport.eCurrentEncoding ) );
3434*b1cdbd2cSJim Jagielski     rBuffer.append( "}}" );
3435*b1cdbd2cSJim Jagielski }
3436*b1cdbd2cSJim Jagielski 
ExportPICT(MultiBuffer & rTarget,const SwFlyFrmFmt * pFlyFrmFmt,const Size & rOrig,const Size & rRendered,const Size & rMapped,const SwCropGrf & rCr,const char * pBLIPType,const sal_uInt8 * pGraphicAry,unsigned long nSize,const RtfExport & rExport)3437*b1cdbd2cSJim Jagielski void ExportPICT(
3438*b1cdbd2cSJim Jagielski     MultiBuffer& rTarget,
3439*b1cdbd2cSJim Jagielski     const SwFlyFrmFmt* pFlyFrmFmt,
3440*b1cdbd2cSJim Jagielski     const Size &rOrig,
3441*b1cdbd2cSJim Jagielski     const Size &rRendered,
3442*b1cdbd2cSJim Jagielski     const Size &rMapped,
3443*b1cdbd2cSJim Jagielski     const SwCropGrf &rCr,
3444*b1cdbd2cSJim Jagielski     const char *pBLIPType,
3445*b1cdbd2cSJim Jagielski     const sal_uInt8 *pGraphicAry,
3446*b1cdbd2cSJim Jagielski     unsigned long nSize,
3447*b1cdbd2cSJim Jagielski     const RtfExport& rExport )
3448*b1cdbd2cSJim Jagielski {
3449*b1cdbd2cSJim Jagielski     bool bIsWMF = (const char *)pBLIPType == (const char *)OOO_STRING_SVTOOLS_RTF_WMETAFILE ? true : false;
3450*b1cdbd2cSJim Jagielski     if (pBLIPType && nSize && pGraphicAry)
3451*b1cdbd2cSJim Jagielski     {
3452*b1cdbd2cSJim Jagielski         rtl::OStringBuffer& rBuffer = rTarget.getOStringBuffer();
3453*b1cdbd2cSJim Jagielski         rBuffer.append("{" OOO_STRING_SVTOOLS_RTF_PICT);
3454*b1cdbd2cSJim Jagielski 
3455*b1cdbd2cSJim Jagielski         if( pFlyFrmFmt )
3456*b1cdbd2cSJim Jagielski         {
3457*b1cdbd2cSJim Jagielski             String sDescription = pFlyFrmFmt->GetObjDescription();
3458*b1cdbd2cSJim Jagielski             //write picture properties - wzDescription at first
3459*b1cdbd2cSJim Jagielski             //looks like: "{\*\picprop{\sp{\sn PropertyName}{\sv PropertyValue}}}"
3460*b1cdbd2cSJim Jagielski             rBuffer.append( "{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_PICPROP );//"{\*\picprop
3461*b1cdbd2cSJim Jagielski             lcl_AppendSP( rBuffer, "wzDescription", sDescription, rExport );
3462*b1cdbd2cSJim Jagielski             String sName = pFlyFrmFmt->GetObjTitle();
3463*b1cdbd2cSJim Jagielski             lcl_AppendSP( rBuffer, "wzName", sName, rExport );
3464*b1cdbd2cSJim Jagielski             rBuffer.append( "}" ); //"}"
3465*b1cdbd2cSJim Jagielski         }
3466*b1cdbd2cSJim Jagielski 
3467*b1cdbd2cSJim Jagielski         long nXCroppedSize = rOrig.Width()-(rCr.GetLeft() + rCr.GetRight());
3468*b1cdbd2cSJim Jagielski         long nYCroppedSize = rOrig.Height()-(rCr.GetTop() + rCr.GetBottom());
3469*b1cdbd2cSJim Jagielski         /* #127543#: Graphic with a zero height or width, typically copied from webpages, caused
3470*b1cdbd2cSJim Jagielski            crashes. */
3471*b1cdbd2cSJim Jagielski         if( !nXCroppedSize )
3472*b1cdbd2cSJim Jagielski             nXCroppedSize = 100;
3473*b1cdbd2cSJim Jagielski         if( !nYCroppedSize )
3474*b1cdbd2cSJim Jagielski             nYCroppedSize = 100;
3475*b1cdbd2cSJim Jagielski 
3476*b1cdbd2cSJim Jagielski         //Given the original size and taking cropping into account
3477*b1cdbd2cSJim Jagielski         //first, how much has the original been scaled to get the
3478*b1cdbd2cSJim Jagielski         //final rendered size
3479*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICSCALEX);
3480*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)((100 * rRendered.Width()) / nXCroppedSize));
3481*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICSCALEY);
3482*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)((100 * rRendered.Height()) / nYCroppedSize));
3483*b1cdbd2cSJim Jagielski 
3484*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICCROPL);
3485*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rCr.GetLeft());
3486*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICCROPR);
3487*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rCr.GetRight());
3488*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICCROPT);
3489*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rCr.GetTop());
3490*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICCROPB);
3491*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rCr.GetBottom());
3492*b1cdbd2cSJim Jagielski 
3493*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICW);
3494*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rMapped.Width());
3495*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICH);
3496*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rMapped.Height());
3497*b1cdbd2cSJim Jagielski 
3498*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICWGOAL);
3499*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rOrig.Width());
3500*b1cdbd2cSJim Jagielski         rBuffer.append(OOO_STRING_SVTOOLS_RTF_PICHGOAL);
3501*b1cdbd2cSJim Jagielski         rBuffer.append((sal_Int32)rOrig.Height());
3502*b1cdbd2cSJim Jagielski 
3503*b1cdbd2cSJim Jagielski         rBuffer.append(pBLIPType);
3504*b1cdbd2cSJim Jagielski         if (bIsWMF)
3505*b1cdbd2cSJim Jagielski         {
3506*b1cdbd2cSJim Jagielski             rBuffer.append((sal_Int32)8);
3507*b1cdbd2cSJim Jagielski             StripMetafileHeader(pGraphicAry, nSize);
3508*b1cdbd2cSJim Jagielski         }
3509*b1cdbd2cSJim Jagielski         rBuffer.append(RtfExport::sNewLine);
3510*b1cdbd2cSJim Jagielski 
3511*b1cdbd2cSJim Jagielski         // append binary data for later streaming
3512*b1cdbd2cSJim Jagielski         // anotation: it is okay to append further to the remembered rBuffer since
3513*b1cdbd2cSJim Jagielski         // the address of this basic buffer at MultiBuffer does not change; it will
3514*b1cdbd2cSJim Jagielski         // be reset to length zero, though, after this call
3515*b1cdbd2cSJim Jagielski         rTarget.appendHexData(pGraphicAry, nSize);
3516*b1cdbd2cSJim Jagielski 
3517*b1cdbd2cSJim Jagielski         rBuffer.append('}');
3518*b1cdbd2cSJim Jagielski     }
3519*b1cdbd2cSJim Jagielski }
3520*b1cdbd2cSJim Jagielski 
FlyFrameOLEData(SwOLENode & rOLENode)3521*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FlyFrameOLEData( SwOLENode& rOLENode )
3522*b1cdbd2cSJim Jagielski {
3523*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3524*b1cdbd2cSJim Jagielski 
3525*b1cdbd2cSJim Jagielski     uno::Reference < embed::XEmbeddedObject > xObj(const_cast<SwOLENode&>(rOLENode).GetOLEObj().GetOleRef());
3526*b1cdbd2cSJim Jagielski     sal_Int64 nAspect = rOLENode.GetAspect();
3527*b1cdbd2cSJim Jagielski     svt::EmbeddedObjectRef aObjRef( xObj, nAspect );
3528*b1cdbd2cSJim Jagielski     SvGlobalName aObjName(aObjRef->getClassID());
3529*b1cdbd2cSJim Jagielski 
3530*b1cdbd2cSJim Jagielski     if (SotExchange::IsMath(aObjName))
3531*b1cdbd2cSJim Jagielski     {
3532*b1cdbd2cSJim Jagielski         // ObjectHeader
3533*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(WriteHex(0x00000501)); // OLEVersion
3534*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(WriteHex(0x00000002)); // FormatID
3535*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(WriteHex(OString("Equation.3"))); // ClassName
3536*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(WriteHex(0x00000000)); // TopicName
3537*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(WriteHex(0x00000000)); // ItemName
3538*b1cdbd2cSJim Jagielski 
3539*b1cdbd2cSJim Jagielski         // NativeData
3540*b1cdbd2cSJim Jagielski         SvMemoryStream *pStream = new SvMemoryStream;
3541*b1cdbd2cSJim Jagielski         SvStorage* pStorage = new SvStorage(*pStream);
3542*b1cdbd2cSJim Jagielski         m_rExport.pOLEExp->ExportOLEObject( aObjRef, *pStorage );
3543*b1cdbd2cSJim Jagielski         pStream->Seek(STREAM_SEEK_TO_END);
3544*b1cdbd2cSJim Jagielski         sal_uInt32 nNativeDataSize = pStream->Tell();
3545*b1cdbd2cSJim Jagielski         const sal_uInt8* pNativeData = (sal_uInt8*)pStream->GetData();
3546*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(WriteHex(nNativeDataSize));
3547*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(RtfExport::sNewLine);
3548*b1cdbd2cSJim Jagielski 
3549*b1cdbd2cSJim Jagielski         // append binary data for later streaming
3550*b1cdbd2cSJim Jagielski         m_aRunText.appendHexData(pNativeData, nNativeDataSize, 126);
3551*b1cdbd2cSJim Jagielski 
3552*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append(RtfExport::sNewLine);
3553*b1cdbd2cSJim Jagielski         delete pStream;
3554*b1cdbd2cSJim Jagielski 
3555*b1cdbd2cSJim Jagielski         // MetaFilePresentationObject
3556*b1cdbd2cSJim Jagielski         pStream = new SvMemoryStream;
3557*b1cdbd2cSJim Jagielski         Graphic* pGraphic = rOLENode.GetGraphic();
3558*b1cdbd2cSJim Jagielski         if (GraphicConverter::Export(*pStream, *pGraphic, CVT_WMF) != ERRCODE_NONE)
3559*b1cdbd2cSJim Jagielski             OSL_ENSURE(false, "failed to export the presentation data");
3560*b1cdbd2cSJim Jagielski         pStream->Seek(STREAM_SEEK_TO_END);
3561*b1cdbd2cSJim Jagielski         sal_uInt32 nPresentationDataSize = pStream->Tell();
3562*b1cdbd2cSJim Jagielski         const sal_uInt8* pPresentationData = (sal_uInt8*)pStream->GetData();
3563*b1cdbd2cSJim Jagielski 
3564*b1cdbd2cSJim Jagielski         // append binary data for later streaming
3565*b1cdbd2cSJim Jagielski         m_aRunText.appendHexData(pPresentationData, nPresentationDataSize, 126);
3566*b1cdbd2cSJim Jagielski     }
3567*b1cdbd2cSJim Jagielski }
3568*b1cdbd2cSJim Jagielski 
FlyFrameOLE(const SwFlyFrmFmt * pFlyFrmFmt,SwOLENode & rOLENode,const Size & rSize)3569*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FlyFrameOLE( const SwFlyFrmFmt* pFlyFrmFmt, SwOLENode& rOLENode, const Size& rSize )
3570*b1cdbd2cSJim Jagielski {
3571*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3572*b1cdbd2cSJim Jagielski 
3573*b1cdbd2cSJim Jagielski     SvMemoryStream aStream;
3574*b1cdbd2cSJim Jagielski     const sal_uInt8* pGraphicAry = 0;
3575*b1cdbd2cSJim Jagielski     sal_uInt32 nSize = 0;
3576*b1cdbd2cSJim Jagielski     Graphic* pGraphic = rOLENode.GetGraphic();
3577*b1cdbd2cSJim Jagielski 
3578*b1cdbd2cSJim Jagielski     Size aSize(sw::util::GetSwappedInSize(rOLENode));
3579*b1cdbd2cSJim Jagielski     Size aRendered(aSize);
3580*b1cdbd2cSJim Jagielski     aRendered.Width() = rSize.Width();
3581*b1cdbd2cSJim Jagielski     aRendered.Height() = rSize.Height();
3582*b1cdbd2cSJim Jagielski     Size aMapped(pGraphic->GetPrefSize());
3583*b1cdbd2cSJim Jagielski     const SwCropGrf &rCr = (const SwCropGrf &)rOLENode.GetAttr(RES_GRFATR_CROPGRF);
3584*b1cdbd2cSJim Jagielski     const sal_Char* pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE;
3585*b1cdbd2cSJim Jagielski 
3586*b1cdbd2cSJim Jagielski     if (GraphicConverter::Export(aStream, *pGraphic, CVT_WMF) != ERRCODE_NONE)
3587*b1cdbd2cSJim Jagielski         OSL_ENSURE(false, "failed to export the graphic");
3588*b1cdbd2cSJim Jagielski     aStream.Seek(STREAM_SEEK_TO_END);
3589*b1cdbd2cSJim Jagielski     nSize = aStream.Tell();
3590*b1cdbd2cSJim Jagielski     pGraphicAry = (sal_uInt8*)aStream.GetData();
3591*b1cdbd2cSJim Jagielski 
3592*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_OBJECT OOO_STRING_SVTOOLS_RTF_OBJEMB);
3593*b1cdbd2cSJim Jagielski 
3594*b1cdbd2cSJim Jagielski     // export the object data in the appropriate format; RTF requires the usage of the OLE 1.0 format
3595*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_OBJDATA " ");
3596*b1cdbd2cSJim Jagielski     FlyFrameOLEData(rOLENode);
3597*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("}{" OOO_STRING_SVTOOLS_RTF_RESULT);
3598*b1cdbd2cSJim Jagielski 
3599*b1cdbd2cSJim Jagielski     SwTwips nHeight = aSize.Height();
3600*b1cdbd2cSJim Jagielski     nHeight/=20; //nHeight was in twips, want it in half points, but then half of total height.
3601*b1cdbd2cSJim Jagielski     long nFontHeight = ((const SvxFontHeightItem&)m_rExport.GetItem(RES_CHRATR_FONTSIZE)).GetHeight();
3602*b1cdbd2cSJim Jagielski     nHeight-=nFontHeight/20;
3603*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_DN).append(nHeight);
3604*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT);
3605*b1cdbd2cSJim Jagielski     ExportPICT( m_aRunText, pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport );
3606*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append("}}}}");
3607*b1cdbd2cSJim Jagielski }
3608*b1cdbd2cSJim Jagielski 
FlyFrameGraphic(const SwFlyFrmFmt * pFlyFrmFmt,const SwGrfNode & rGrfNode,const Size & rSize)3609*b1cdbd2cSJim Jagielski void RtfAttributeOutput::FlyFrameGraphic( const SwFlyFrmFmt* pFlyFrmFmt, const SwGrfNode& rGrfNode, const Size& rSize )
3610*b1cdbd2cSJim Jagielski {
3611*b1cdbd2cSJim Jagielski     OSL_TRACE("%s", OSL_THIS_FUNC);
3612*b1cdbd2cSJim Jagielski 
3613*b1cdbd2cSJim Jagielski     SvMemoryStream aStream;
3614*b1cdbd2cSJim Jagielski     const sal_uInt8* pGraphicAry = 0;
3615*b1cdbd2cSJim Jagielski     sal_uInt32 nSize = 0;
3616*b1cdbd2cSJim Jagielski 
3617*b1cdbd2cSJim Jagielski     Graphic aGraphic(rGrfNode.GetGrf());
3618*b1cdbd2cSJim Jagielski 
3619*b1cdbd2cSJim Jagielski     // If there is no graphic there is not much point in parsing it
3620*b1cdbd2cSJim Jagielski     if(aGraphic.GetType()==GRAPHIC_NONE)
3621*b1cdbd2cSJim Jagielski         return;
3622*b1cdbd2cSJim Jagielski 
3623*b1cdbd2cSJim Jagielski     GfxLink aGraphicLink;
3624*b1cdbd2cSJim Jagielski     const sal_Char* pBLIPType = 0;
3625*b1cdbd2cSJim Jagielski     if (aGraphic.IsLink())
3626*b1cdbd2cSJim Jagielski     {
3627*b1cdbd2cSJim Jagielski         aGraphicLink = aGraphic.GetLink();
3628*b1cdbd2cSJim Jagielski         nSize = aGraphicLink.GetDataSize();
3629*b1cdbd2cSJim Jagielski         pGraphicAry = aGraphicLink.GetData();
3630*b1cdbd2cSJim Jagielski         switch (aGraphicLink.GetType())
3631*b1cdbd2cSJim Jagielski         {
3632*b1cdbd2cSJim Jagielski             // #15508# trying to add BMP type for better exports, need to check if this works
3633*b1cdbd2cSJim Jagielski             // checked, does not work. Also need to reset pGraphicAry to NULL to force conversion
3634*b1cdbd2cSJim Jagielski             // to PNG, else the BMP array will be used.
3635*b1cdbd2cSJim Jagielski             // It may work using direct DIB data, but that needs to be checked eventually
3636*b1cdbd2cSJim Jagielski             //
3637*b1cdbd2cSJim Jagielski             // #15508# before GFX_LINK_TYPE_NATIVE_BMP was added the graphic data
3638*b1cdbd2cSJim Jagielski             // (to be hold in pGraphicAry) was not available; thus for now to stay
3639*b1cdbd2cSJim Jagielski             // compatible, keep it that way by assigning NULL value to pGraphicAry
3640*b1cdbd2cSJim Jagielski             case GFX_LINK_TYPE_NATIVE_BMP:
3641*b1cdbd2cSJim Jagielski             //    pBLIPType = OOO_STRING_SVTOOLS_RTF_WBITMAP;
3642*b1cdbd2cSJim Jagielski                 pGraphicAry = 0;
3643*b1cdbd2cSJim Jagielski                 break;
3644*b1cdbd2cSJim Jagielski 
3645*b1cdbd2cSJim Jagielski             case GFX_LINK_TYPE_NATIVE_JPG:
3646*b1cdbd2cSJim Jagielski                 pBLIPType = OOO_STRING_SVTOOLS_RTF_JPEGBLIP;
3647*b1cdbd2cSJim Jagielski                 break;
3648*b1cdbd2cSJim Jagielski             case GFX_LINK_TYPE_NATIVE_PNG:
3649*b1cdbd2cSJim Jagielski                 pBLIPType = OOO_STRING_SVTOOLS_RTF_PNGBLIP;
3650*b1cdbd2cSJim Jagielski                 break;
3651*b1cdbd2cSJim Jagielski             case GFX_LINK_TYPE_NATIVE_WMF:
3652*b1cdbd2cSJim Jagielski                 pBLIPType =
3653*b1cdbd2cSJim Jagielski                     IsEMF(pGraphicAry, nSize) ? OOO_STRING_SVTOOLS_RTF_EMFBLIP : OOO_STRING_SVTOOLS_RTF_WMETAFILE;
3654*b1cdbd2cSJim Jagielski                 break;
3655*b1cdbd2cSJim Jagielski             default:
3656*b1cdbd2cSJim Jagielski                 break;
3657*b1cdbd2cSJim Jagielski         }
3658*b1cdbd2cSJim Jagielski     }
3659*b1cdbd2cSJim Jagielski 
3660*b1cdbd2cSJim Jagielski     GraphicType eGraphicType = aGraphic.GetType();
3661*b1cdbd2cSJim Jagielski     if (!pGraphicAry)
3662*b1cdbd2cSJim Jagielski     {
3663*b1cdbd2cSJim Jagielski         if (ERRCODE_NONE == GraphicConverter::Export(aStream, aGraphic,
3664*b1cdbd2cSJim Jagielski                     (eGraphicType == GRAPHIC_BITMAP) ? CVT_PNG : CVT_WMF))
3665*b1cdbd2cSJim Jagielski         {
3666*b1cdbd2cSJim Jagielski             pBLIPType = (eGraphicType == GRAPHIC_BITMAP) ?
3667*b1cdbd2cSJim Jagielski                 OOO_STRING_SVTOOLS_RTF_PNGBLIP : OOO_STRING_SVTOOLS_RTF_WMETAFILE;
3668*b1cdbd2cSJim Jagielski             aStream.Seek(STREAM_SEEK_TO_END);
3669*b1cdbd2cSJim Jagielski             nSize = aStream.Tell();
3670*b1cdbd2cSJim Jagielski             pGraphicAry = (sal_uInt8*)aStream.GetData();
3671*b1cdbd2cSJim Jagielski         }
3672*b1cdbd2cSJim Jagielski     }
3673*b1cdbd2cSJim Jagielski 
3674*b1cdbd2cSJim Jagielski     Size aMapped(eGraphicType == GRAPHIC_BITMAP ? aGraphic.GetSizePixel() : aGraphic.GetPrefSize());
3675*b1cdbd2cSJim Jagielski 
3676*b1cdbd2cSJim Jagielski     const SwCropGrf &rCr = (const SwCropGrf &)rGrfNode.GetAttr(RES_GRFATR_CROPGRF);
3677*b1cdbd2cSJim Jagielski 
3678*b1cdbd2cSJim Jagielski     //Get original size in twips
3679*b1cdbd2cSJim Jagielski     Size aSize(sw::util::GetSwappedInSize(rGrfNode));
3680*b1cdbd2cSJim Jagielski     Size aRendered(aSize);
3681*b1cdbd2cSJim Jagielski     aRendered.Width() = rSize.Width();
3682*b1cdbd2cSJim Jagielski     aRendered.Height() = rSize.Height();
3683*b1cdbd2cSJim Jagielski 
3684*b1cdbd2cSJim Jagielski     /*
3685*b1cdbd2cSJim Jagielski        If the graphic is not of type WMF then we will have to store two
3686*b1cdbd2cSJim Jagielski        graphics, one in the native format wrapped in shppict, and the other in
3687*b1cdbd2cSJim Jagielski        the wmf format wrapped in nonshppict, so as to keep wordpad happy. If its
3688*b1cdbd2cSJim Jagielski        a wmf already then we don't need any such wrapping
3689*b1cdbd2cSJim Jagielski        */
3690*b1cdbd2cSJim Jagielski     bool bIsWMF = (const sal_Char*)pBLIPType == (const sal_Char*)OOO_STRING_SVTOOLS_RTF_WMETAFILE ? true : false;
3691*b1cdbd2cSJim Jagielski     if (!bIsWMF)
3692*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append("{" OOO_STRING_SVTOOLS_RTF_IGNORE OOO_STRING_SVTOOLS_RTF_SHPPICT);
3693*b1cdbd2cSJim Jagielski 
3694*b1cdbd2cSJim Jagielski     if (pBLIPType)
3695*b1cdbd2cSJim Jagielski     {
3696*b1cdbd2cSJim Jagielski         ExportPICT( m_aRunText, pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport);
3697*b1cdbd2cSJim Jagielski     }
3698*b1cdbd2cSJim Jagielski     else
3699*b1cdbd2cSJim Jagielski     {
3700*b1cdbd2cSJim Jagielski         aStream.Seek(0);
3701*b1cdbd2cSJim Jagielski         GraphicConverter::Export(aStream, aGraphic, CVT_WMF);
3702*b1cdbd2cSJim Jagielski         pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE;
3703*b1cdbd2cSJim Jagielski         aStream.Seek(STREAM_SEEK_TO_END);
3704*b1cdbd2cSJim Jagielski         nSize = aStream.Tell();
3705*b1cdbd2cSJim Jagielski         pGraphicAry = (sal_uInt8*)aStream.GetData();
3706*b1cdbd2cSJim Jagielski 
3707*b1cdbd2cSJim Jagielski         ExportPICT( m_aRunText, pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport );
3708*b1cdbd2cSJim Jagielski     }
3709*b1cdbd2cSJim Jagielski 
3710*b1cdbd2cSJim Jagielski     if (!bIsWMF)
3711*b1cdbd2cSJim Jagielski     {
3712*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append("}" "{" OOO_STRING_SVTOOLS_RTF_NONSHPPICT);
3713*b1cdbd2cSJim Jagielski 
3714*b1cdbd2cSJim Jagielski         aStream.Seek(0);
3715*b1cdbd2cSJim Jagielski         GraphicConverter::Export(aStream, aGraphic, CVT_WMF);
3716*b1cdbd2cSJim Jagielski         pBLIPType = OOO_STRING_SVTOOLS_RTF_WMETAFILE;
3717*b1cdbd2cSJim Jagielski         aStream.Seek(STREAM_SEEK_TO_END);
3718*b1cdbd2cSJim Jagielski         nSize = aStream.Tell();
3719*b1cdbd2cSJim Jagielski         pGraphicAry = (sal_uInt8*)aStream.GetData();
3720*b1cdbd2cSJim Jagielski 
3721*b1cdbd2cSJim Jagielski         ExportPICT( m_aRunText, pFlyFrmFmt, aSize, aRendered, aMapped, rCr, pBLIPType, pGraphicAry, nSize, m_rExport );
3722*b1cdbd2cSJim Jagielski 
3723*b1cdbd2cSJim Jagielski         m_aRunText.getOStringBuffer().append('}');
3724*b1cdbd2cSJim Jagielski     }
3725*b1cdbd2cSJim Jagielski 
3726*b1cdbd2cSJim Jagielski     m_aRunText.getOStringBuffer().append(m_rExport.sNewLine);
3727*b1cdbd2cSJim Jagielski }
3728*b1cdbd2cSJim Jagielski 
3729*b1cdbd2cSJim Jagielski /* vi:set shiftwidth=4 expandtab: */
3730