Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "hintids.hxx"
30 : : #include <comphelper/string.hxx>
31 : : #include <vcl/svapp.hxx>
32 : : #include <vcl/wrkwin.hxx>
33 : : #include <svl/whiter.hxx>
34 : : #include <editeng/boxitem.hxx>
35 : : #include <editeng/ulspitem.hxx>
36 : : #include <editeng/udlnitem.hxx>
37 : : #include <editeng/crsditem.hxx>
38 : : #include <editeng/blnkitem.hxx>
39 : : #include <editeng/cmapitem.hxx>
40 : : #include <editeng/colritem.hxx>
41 : : #include <editeng/fontitem.hxx>
42 : : #include <editeng/fhgtitem.hxx>
43 : : #include <editeng/postitem.hxx>
44 : : #include <editeng/kernitem.hxx>
45 : : #include <editeng/wghtitem.hxx>
46 : : #include <editeng/lspcitem.hxx>
47 : : #include <editeng/adjitem.hxx>
48 : : #include <editeng/lrspitem.hxx>
49 : : #include <editeng/brshitem.hxx>
50 : : #include <editeng/brkitem.hxx>
51 : : #include <editeng/keepitem.hxx>
52 : : #include <editeng/widwitem.hxx>
53 : : #include <editeng/spltitem.hxx>
54 : : #include <editeng/orphitem.hxx>
55 : : #include <svx/xoutbmp.hxx>
56 : : #include <svx/svdobj.hxx>
57 : : #include <editeng/langitem.hxx>
58 : : #include <editeng/frmdiritem.hxx>
59 : : #include <svtools/htmlout.hxx>
60 : : #include <svtools/htmlkywd.hxx>
61 : : #include <svx/htmlmode.hxx>
62 : : #include <svl/urihelper.hxx>
63 : : #include <tools/urlobj.hxx>
64 : : #include <tools/bigint.hxx>
65 : : #include <unotools/charclass.hxx>
66 : : #include <i18npool/mslangid.hxx>
67 : : #include <charfmt.hxx>
68 : : #include <fmtcol.hxx>
69 : : #include <fmtfsize.hxx>
70 : : #include <fmtornt.hxx>
71 : : #include <fmtpdsc.hxx>
72 : : #include <fmtlsplt.hxx>
73 : : #include <pagedesc.hxx>
74 : : #include <fmtanchr.hxx>
75 : : #include <docary.hxx>
76 : : #include <pam.hxx>
77 : : #include <viewsh.hxx>
78 : : #include <viewopt.hxx>
79 : : #include <swtable.hxx>
80 : : // OTES
81 : : #include <ftninfo.hxx>
82 : : #include <ftnidx.hxx>
83 : : #include <txtftn.hxx>
84 : : #include <fmtftn.hxx>
85 : : // FOOTNOTES
86 : : #include "doc.hxx"
87 : : #include "swerror.h"
88 : : #include "charatr.hxx"
89 : : #include "paratr.hxx"
90 : : #include "frmatr.hxx"
91 : : #include "poolfmt.hxx"
92 : : #include "fltini.hxx"
93 : : #include "css1kywd.hxx"
94 : : #include "wrthtml.hxx"
95 : : #include "htmlnum.hxx"
96 : :
97 : : #include <IDocumentStylePoolAccess.hxx>
98 : : #include <numrule.hxx>
99 : :
100 : : #include <rtl/strbuf.hxx>
101 : :
102 : : using namespace ::com::sun::star;
103 : : using ::editeng::SvxBorderLine;
104 : :
105 : : /*
106 : : * um nicht immer wieder nach einem Update festzustellen, das irgendwelche
107 : : * Hint-Ids dazugekommen sind, wird hier definiert, die Groesse der Tabelle
108 : : * definiert und mit der akt. verglichen. Bei unterschieden wird der
109 : : * Compiler schon meckern.
110 : : *
111 : : * diese Section und die dazugeherigen Tabellen muessen in folgenden Files
112 : : * gepflegt werden: rtf\rtfatr.cxx, sw6\sw6atr.cxx, w4w\w4watr.cxx
113 : : */
114 : : #if !defined(UNX) && !defined(MSC) && !defined(PPC) && !defined(__MINGW32__)
115 : :
116 : : #define ATTRFNTAB_SIZE 130
117 : : #if ATTRFNTAB_SIZE != POOLATTR_END - POOLATTR_BEGIN
118 : : #error Attribut-Tabelle ist ungueltigt. Wurden neue Hint-IDs zugefuegt ??
119 : : #endif
120 : :
121 : : #endif
122 : :
123 : : #define HTML_HEADSPACE (12*20)
124 : :
125 : : #define CSS1_BACKGROUND_ATTR 1
126 : : #define CSS1_BACKGROUND_PAGE 2
127 : : #define CSS1_BACKGROUND_TABLE 3
128 : : #define CSS1_BACKGROUND_FLY 4
129 : : #define CSS1_BACKGROUND_SECTION 5
130 : :
131 : : #define CSS1_FRMSIZE_WIDTH 0x01
132 : : #define CSS1_FRMSIZE_VARHEIGHT 0x02
133 : : #define CSS1_FRMSIZE_MINHEIGHT 0x04
134 : : #define CSS1_FRMSIZE_FIXHEIGHT 0x08
135 : : #define CSS1_FRMSIZE_ANYHEIGHT 0x0e
136 : : #define CSS1_FRMSIZE_PIXEL 0x10
137 : :
138 : : using namespace ::com::sun::star;
139 : :
140 : : //-----------------------------------------------------------------------
141 : :
142 : : sal_Char CSS1_CONSTASCII_DEF( sCSS1_rule_end, " }" );
143 : : sal_Char CSS1_CONSTASCII_DEF( sCSS1_span_tag_end, "\">" );
144 : : const sal_Char cCSS1_style_opt_end = '\"';
145 : :
146 : : sal_Char CSS1_CONSTASCII_DEF( sHTML_FTN_fontheight, "57%" );
147 : :
148 : : extern SwAttrFnTab aCSS1AttrFnTab;
149 : :
150 : : static Writer& OutCSS1_SwFmt( Writer& rWrt, const SwFmt& rFmt,
151 : : IDocumentStylePoolAccess /*SwDoc*/ *pDoc, SwDoc *pTemplate );
152 : : static Writer& OutCSS1_SwPageDesc( Writer& rWrt, const SwPageDesc& rFmt,
153 : : IDocumentStylePoolAccess /*SwDoc*/ *pDoc, SwDoc *pTemplate,
154 : : sal_uInt16 nRefPoolId, sal_Bool bExtRef,
155 : : sal_Bool bPseudo=sal_True );
156 : : static Writer& OutCSS1_SwFtnInfo( Writer& rWrt, const SwEndNoteInfo& rInfo,
157 : : SwDoc *pDoc, sal_uInt16 nNotes, sal_Bool bEndNote );
158 : : static void OutCSS1_SwFmtDropAttrs( SwHTMLWriter& rHWrt,
159 : : const SwFmtDrop& rDrop,
160 : : const SfxItemSet *pCharFmtItemSet=0 );
161 : : static Writer& OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( Writer& rWrt,
162 : : const SvxUnderlineItem *pUItem,
163 : : const SvxOverlineItem *pOItem,
164 : : const SvxCrossedOutItem *pCOItem,
165 : : const SvxBlinkItem *pBItem );
166 : : static Writer& OutCSS1_SvxFontWeight( Writer& rWrt, const SfxPoolItem& rHt );
167 : : static Writer& OutCSS1_SvxPosture( Writer& rWrt, const SfxPoolItem& rHt );
168 : : static Writer& OutCSS1_SvxULSpace( Writer& rWrt, const SfxPoolItem& rHt );
169 : : static Writer& OutCSS1_SvxLRSpace( Writer& rWrt, const SfxPoolItem& rHt );
170 : : static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt,
171 : : const SvxULSpaceItem *pULSpace,
172 : : const SvxLRSpaceItem *pLRSpace );
173 : : static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt,
174 : : const SfxItemSet& rItemSet,
175 : : sal_Bool bDeep );
176 : : static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
177 : : sal_uInt16 nMode, const String *pGrfName );
178 : : static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt );
179 : : static Writer& OutCSS1_SwFmtFrmSize( Writer& rWrt, const SfxPoolItem& rHt,
180 : : sal_uInt16 nMode );
181 : : static Writer& OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( Writer& rWrt,
182 : : const SfxItemSet& rItemSet,
183 : : sal_Bool bDeep );
184 : : static Writer& OutCSS1_SwFmtLayoutSplit( Writer& rWrt, const SfxPoolItem& rHt );
185 : :
186 : 0 : static rtl::OString ConvToHex(sal_uInt16 nHex)
187 : : {
188 : 0 : sal_Char aNToABuf[] = "00";
189 : :
190 : : // Pointer an das Bufferende setzen
191 : 0 : sal_Char *pStr = aNToABuf + (sizeof(aNToABuf)-1);
192 [ # # ]: 0 : for( sal_uInt8 n = 0; n < 2; ++n )
193 : : {
194 : 0 : *(--pStr) = (sal_Char)(nHex & 0xf ) + 48;
195 [ # # ]: 0 : if( *pStr > '9' )
196 : 0 : *pStr += 39;
197 : 0 : nHex >>= 4;
198 : : }
199 : :
200 : 0 : return rtl::OString(aNToABuf, 2);
201 : : }
202 : :
203 : 0 : static rtl::OString GetCSS1Color(const Color& rColor)
204 : : {
205 : 0 : rtl::OStringBuffer aStr;
206 [ # # ]: 0 : aStr.append('#');
207 : :
208 [ # # ]: 0 : aStr.append(ConvToHex(rColor.GetRed()));
209 [ # # ]: 0 : aStr.append(ConvToHex(rColor.GetGreen()));
210 [ # # ]: 0 : aStr.append(ConvToHex(rColor.GetBlue()));
211 : :
212 : 0 : return aStr.makeStringAndClear();
213 : : }
214 : :
215 : : class SwCSS1OutMode
216 : : {
217 : : SwHTMLWriter& rWrt;
218 : : sal_uInt16 nOldMode;
219 : :
220 : : public:
221 : :
222 : 6 : SwCSS1OutMode( SwHTMLWriter& rHWrt, sal_uInt16 nMode, sal_Bool bStartFirst=sal_True,
223 : : const String *pSelector=0 ) :
224 : : rWrt( rHWrt ),
225 : 6 : nOldMode( rHWrt.nCSS1OutMode )
226 : : {
227 : 6 : rWrt.nCSS1OutMode = nMode;
228 [ + - ]: 6 : if( bStartFirst )
229 : 6 : rWrt.bFirstCSS1Property = sal_True;
230 [ + + ]: 6 : if( pSelector )
231 : 2 : rWrt.aCSS1Selector = *pSelector;
232 : 6 : }
233 : :
234 : 6 : ~SwCSS1OutMode()
235 : : {
236 : 6 : rWrt.nCSS1OutMode = nOldMode;
237 : 6 : }
238 : : };
239 : :
240 : :
241 : :
242 : 0 : void SwHTMLWriter::OutCSS1_Property( const sal_Char *pProp,
243 : : const sal_Char *pVal,
244 : : const String *pSVal )
245 : : {
246 : 0 : rtl::OStringBuffer sOut;
247 : :
248 [ # # ][ # # ]: 0 : if( bFirstCSS1Rule && (nCSS1OutMode & CSS1_OUTMODE_RULE_ON)!=0 )
249 : : {
250 : 0 : bFirstCSS1Rule = sal_False;
251 [ # # ]: 0 : OutNewLine();
252 [ # # ][ # # ]: 0 : sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_style).append(' ')
[ # # ]
253 [ # # ][ # # ]: 0 : .append(OOO_STRING_SVTOOLS_HTML_O_type).append("=\"text/css\">");
254 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
255 [ # # ]: 0 : OutNewLine();
256 [ # # ][ # # ]: 0 : Strm() << '<' << OOO_STRING_SVTOOLS_HTML_comment;
[ # # ]
257 : :
258 : 0 : IncIndentLevel();
259 : : }
260 : :
261 [ # # ]: 0 : if( bFirstCSS1Property )
262 : : {
263 [ # # # # ]: 0 : switch( nCSS1OutMode & CSS1_OUTMODE_ANY_ON )
264 : : {
265 : : case CSS1_OUTMODE_SPAN_TAG_ON:
266 : : case CSS1_OUTMODE_SPAN_TAG1_ON:
267 [ # # ]: 0 : if( bTagOn )
268 : : {
269 [ # # ][ # # ]: 0 : sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_span)
270 [ # # ][ # # ]: 0 : .append(' ').append(OOO_STRING_SVTOOLS_HTML_O_style)
271 [ # # ]: 0 : .append("=\"");
272 : : }
273 : : else
274 : : {
275 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_AsciiTag( Strm(), OOO_STRING_SVTOOLS_HTML_span, sal_False );
276 : 0 : return;
277 : : }
278 : 0 : break;
279 : :
280 : : case CSS1_OUTMODE_RULE_ON:
281 : : {
282 [ # # ]: 0 : OutNewLine();
283 [ # # ][ # # ]: 0 : sOut.append(rtl::OUStringToOString(aCSS1Selector, eDestEnc)).append(" { ");
[ # # ][ # # ]
284 : : }
285 : 0 : break;
286 : :
287 : : case CSS1_OUTMODE_STYLE_OPT_ON:
288 [ # # ][ # # ]: 0 : sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_style)
289 [ # # ]: 0 : .append("=\"");
290 : 0 : break;
291 : : }
292 : 0 : bFirstCSS1Property = sal_False;
293 : : }
294 : : else
295 : : {
296 [ # # ]: 0 : sOut.append("; ");
297 : : }
298 : :
299 : :
300 [ # # ][ # # ]: 0 : sOut.append(pProp).append(": ");
301 [ # # ]: 0 : if( nCSS1OutMode & CSS1_OUTMODE_ENCODE )
302 : : {
303 : : // In STYLE-Optionen den String codieren
304 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
305 [ # # ]: 0 : if( pVal )
306 [ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), rtl::OUString::createFromAscii(pVal),
307 [ # # ][ # # ]: 0 : eDestEnc, &aNonConvertableCharacters );
[ # # ]
308 [ # # ]: 0 : else if( pSVal )
309 [ # # ][ # # ]: 0 : HTMLOutFuncs::Out_String( Strm(), *pSVal, eDestEnc, &aNonConvertableCharacters );
310 : : }
311 : : else
312 : : {
313 : : // Im STYLE-Tag des String direct ausgeben
314 [ # # ]: 0 : if( pVal )
315 [ # # ]: 0 : sOut.append(pVal);
316 [ # # ]: 0 : else if( pSVal )
317 [ # # ][ # # ]: 0 : sOut.append(rtl::OUStringToOString(*pSVal, eDestEnc));
[ # # ]
318 : : }
319 : :
320 [ # # ]: 0 : if (sOut.getLength())
321 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
[ # # ]
322 : : }
323 : :
324 : 0 : static void AddUnitPropertyValue(rtl::OStringBuffer &rOut, long nVal,
325 : : FieldUnit eUnit)
326 : : {
327 [ # # ]: 0 : if( nVal < 0 )
328 : : {
329 : : // Vorzeichen extra behandeln
330 : 0 : nVal = -nVal;
331 [ # # ]: 0 : rOut.append('-');
332 : : }
333 : :
334 : : // Die umgerechnete Einheit ergibt sich aus (x * nMul)/(nDiv*nFac*10)
335 : 0 : long nMul = 1000;
336 : 0 : long nDiv = 1;
337 : 0 : long nFac = 100;
338 : : const sal_Char *pUnit;
339 [ # # # # : 0 : switch( eUnit )
# ]
340 : : {
341 : : case FUNIT_100TH_MM:
342 : : OSL_ENSURE( FUNIT_MM == eUnit, "Masseinheit wird nicht unterstuetzt" );
343 : : case FUNIT_MM:
344 : : // 0.01mm = 0.57twip
345 : 0 : nMul = 25400; // 25.4 * 1000
346 : 0 : nDiv = 1440; // 72 * 20;
347 : 0 : nFac = 100;
348 : 0 : pUnit = sCSS1_UNIT_mm;
349 : 0 : break;
350 : :
351 : : case FUNIT_M:
352 : : case FUNIT_KM:
353 : : OSL_ENSURE( FUNIT_CM == eUnit, "Masseinheit wird nicht unterstuetzt" );
354 : : case FUNIT_CM:
355 : : // 0.01cm = 5.7twip (ist zwar ungenau, aber die UI ist auch ungenau)
356 : 0 : nMul = 2540; // 2.54 * 1000
357 : 0 : nDiv = 1440; // 72 * 20;
358 : 0 : nFac = 100;
359 : 0 : pUnit = sCSS1_UNIT_cm;
360 : 0 : break;
361 : :
362 : : case FUNIT_TWIP:
363 : : OSL_ENSURE( FUNIT_POINT == eUnit, "Masseinheit wird nicht unterstuetzt" );
364 : : case FUNIT_POINT:
365 : : // 0.1pt = 2.0twip (ist zwar ungenau, aber die UI ist auch ungenau)
366 : 0 : nMul = 100;
367 : 0 : nDiv = 20;
368 : 0 : nFac = 10;
369 : 0 : pUnit = sCSS1_UNIT_pt;
370 : 0 : break;
371 : :
372 : : case FUNIT_PICA:
373 : : // 0.01pc = 2.40twip (ist zwar ungenau, aber die UI ist auch ungenau)
374 : 0 : nMul = 1000;
375 : 0 : nDiv = 240; // 12 * 20;
376 : 0 : nFac = 100;
377 : 0 : pUnit = sCSS1_UNIT_pc;
378 : 0 : break;
379 : :
380 : : case FUNIT_NONE:
381 : : case FUNIT_FOOT:
382 : : case FUNIT_MILE:
383 : : case FUNIT_CUSTOM:
384 : : case FUNIT_PERCENT:
385 : : case FUNIT_INCH:
386 : : default:
387 : : OSL_ENSURE( FUNIT_INCH == eUnit, "Masseinheit wird nicht unterstuetzt" );
388 : : // 0.01in = 14.4twip (ist zwar ungenau, aber die UI ist auch ungenau)
389 : 0 : nMul = 1000;
390 : 0 : nDiv = 1440; // 72 * 20;
391 : 0 : nFac = 100;
392 : 0 : pUnit = sCSS1_UNIT_inch;
393 : 0 : break;
394 : : }
395 : :
396 : 0 : long nLongVal = 0;
397 : 0 : sal_Bool bOutLongVal = sal_True;
398 [ # # ]: 0 : if( nVal > LONG_MAX / nMul )
399 : : {
400 : : // Zum Unrechnen der Einheit wird ein BigInt benoetigt
401 : : #ifdef SAL_INT64_IS_STRUCT
402 : : BigInt nBigVal( nVal );
403 : : nBigVal *= nMul;
404 : : nBigVal /= nDiv;
405 : : nBigVal += 5;
406 : : nBigVal /= 10;
407 : :
408 : : if( nBigVal.IsLong() )
409 : : {
410 : : // Zum Ausgeben des Wertes reicht ein long.
411 : : nLongVal = (long)nBigVal;
412 : : }
413 : : else
414 : : {
415 : : BigInt nBigFac( nFac );
416 : : BigInt nBig10( 10 );
417 : : rOut += (long)(nBigVal / nBigFac);
418 : : if( !(nBigVal % nBigFac).IsZero() )
419 : : {
420 : : rOut.append('.');
421 : : while( nFac > 1 && !(nBigVal % nBigFac).IsZero() )
422 : : {
423 : : nFac /= 10;
424 : : nBigFac = nFac;
425 : : rOut.append(static_cast<sal_Int32>((nBigVal / nBigFac) % nBig10));
426 : : }
427 : : }
428 : : bOutLongVal = sal_False;
429 : : }
430 : : #else
431 : 0 : sal_Int64 nBigVal( nVal );
432 : 0 : nBigVal *= nMul;
433 : 0 : nBigVal /= nDiv;
434 : 0 : nBigVal += 5;
435 : 0 : nBigVal /= 10;
436 : :
437 [ # # ]: 0 : if( nBigVal <= LONG_MAX )
438 : : {
439 : : // Zum Ausgeben des Wertes reicht ein long.
440 : 0 : nLongVal = (long)nBigVal;
441 : : }
442 : : else
443 : : {
444 [ # # ]: 0 : rOut.append(nBigVal / (sal_Int64)nFac);
445 [ # # ]: 0 : if( (nBigVal % (sal_Int64)nFac) != 0 )
446 : : {
447 [ # # ]: 0 : rOut.append('.');
448 [ # # ][ # # ]: 0 : while( nFac > 1 && (nBigVal % (sal_Int64)nFac) != 0 )
[ # # ]
449 : : {
450 : 0 : nFac /= 10;
451 [ # # ]: 0 : rOut.append((nBigVal / (sal_Int64)nFac) % (sal_Int64)10);
452 : : }
453 : : }
454 : 0 : bOutLongVal = sal_False;
455 : : }
456 : : #endif
457 : : }
458 : : else
459 : : {
460 : 0 : nLongVal = nVal * nMul;
461 : 0 : nLongVal /= nDiv;
462 : 0 : nLongVal += 5;
463 : 0 : nLongVal /= 10;
464 : : }
465 : :
466 [ # # ]: 0 : if( bOutLongVal )
467 : : {
468 [ # # ]: 0 : rOut.append(static_cast<sal_Int32>(nLongVal/nFac));
469 [ # # ]: 0 : if( (nLongVal % nFac) != 0 )
470 : : {
471 [ # # ]: 0 : rOut.append('.');
472 [ # # ][ # # ]: 0 : while( nFac > 1 && (nLongVal % nFac) != 0 )
[ # # ]
473 : : {
474 : 0 : nFac /= 10;
475 [ # # ]: 0 : rOut.append(static_cast<sal_Int32>((nLongVal / nFac) % 10));
476 : : }
477 : : }
478 : : }
479 : :
480 [ # # ]: 0 : rOut.append(pUnit);
481 : 0 : }
482 : :
483 : 0 : void SwHTMLWriter::OutCSS1_UnitProperty( const sal_Char *pProp, long nVal )
484 : : {
485 : 0 : rtl::OStringBuffer sOut;
486 [ # # ]: 0 : AddUnitPropertyValue(sOut, nVal, eCSS1Unit);
487 [ # # ]: 0 : OutCSS1_PropertyAscii(pProp, sOut.makeStringAndClear());
488 : 0 : }
489 : :
490 : 0 : void SwHTMLWriter::OutCSS1_PixelProperty( const sal_Char *pProp, long nVal,
491 : : sal_Bool bVert )
492 : : {
493 [ # # ][ # # ]: 0 : if( nVal && Application::GetDefaultDevice() )
[ # # ][ # # ]
494 : : {
495 [ # # ][ # # ]: 0 : Size aSz( bVert ? 0 : nVal, bVert ? nVal : 0 );
496 [ # # ][ # # ]: 0 : aSz = Application::GetDefaultDevice()->LogicToPixel( aSz, MapMode( MAP_TWIP) );
[ # # ][ # # ]
497 [ # # ]: 0 : nVal = bVert ? aSz.Height() : aSz.Width();
498 [ # # ]: 0 : if( !nVal )
499 : 0 : nVal = 1;
500 : : }
501 : :
502 : 0 : rtl::OStringBuffer sOut;
503 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(nVal));
504 [ # # ]: 0 : sOut.append(sCSS1_UNIT_px);
505 [ # # ]: 0 : OutCSS1_PropertyAscii(pProp, sOut.makeStringAndClear());
506 : 0 : }
507 : :
508 : 2 : void SwHTMLWriter::OutCSS1_SfxItemSet( const SfxItemSet& rItemSet,
509 : : sal_Bool bDeep )
510 : : {
511 : : // den ItemSet ausgeben, und zwar inklusive aller Attribute
512 [ + - ]: 2 : Out_SfxItemSet( aCSS1AttrFnTab, *this, rItemSet, bDeep );
513 : :
514 : : // ein par Attribute benoetigen eine Spezial-Behandlung
515 : 2 : const SfxPoolItem *pItem = 0;
516 : :
517 : : // Underline, Overline, CrossedOut und Blink bilden zusammen eine CSS1-Property
518 : : // (geht natuerlich nicht bei Hints)
519 [ + - ]: 2 : if( !IsCSS1Source(CSS1_OUTMODE_HINT) )
520 : : {
521 : 2 : const SvxUnderlineItem *pUnderlineItem = 0;
522 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_CHRATR_UNDERLINE, bDeep, &pItem ))
523 : 0 : pUnderlineItem = (const SvxUnderlineItem *)pItem;
524 : :
525 : 2 : const SvxOverlineItem *pOverlineItem = 0;
526 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_CHRATR_OVERLINE, bDeep, &pItem ))
527 : 0 : pOverlineItem = (const SvxOverlineItem *)pItem;
528 : :
529 : 2 : const SvxCrossedOutItem *pCrossedOutItem = 0;
530 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_CHRATR_CROSSEDOUT, bDeep, &pItem ))
531 : 0 : pCrossedOutItem = (const SvxCrossedOutItem *)pItem;
532 : :
533 : 2 : const SvxBlinkItem *pBlinkItem = 0;
534 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_CHRATR_BLINK, bDeep, &pItem ))
535 : 0 : pBlinkItem = (const SvxBlinkItem *)pItem;
536 : :
537 [ + - ][ + - ]: 2 : if( pUnderlineItem || pOverlineItem || pCrossedOutItem || pBlinkItem )
[ + - ][ - + ]
538 : : OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( *this, pUnderlineItem,
539 : : pOverlineItem,
540 : : pCrossedOutItem,
541 [ # # ]: 0 : pBlinkItem );
542 : :
543 [ + - ]: 2 : OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( *this, rItemSet, bDeep );
544 : : }
545 : :
546 [ - + ]: 2 : if( !bFirstCSS1Property )
547 : : {
548 : : // wenn eine Property als Bestandteil einer Style-Option
549 : : // ausgegeben wurde, muss die Optiomn noch beendet werden
550 : 0 : rtl::OStringBuffer sOut;
551 [ # # # # ]: 0 : switch( nCSS1OutMode & CSS1_OUTMODE_ANY_OFF )
552 : : {
553 : : case CSS1_OUTMODE_SPAN_TAG_OFF:
554 [ # # ]: 0 : sOut.append(sCSS1_span_tag_end);
555 : 0 : break;
556 : :
557 : : case CSS1_OUTMODE_STYLE_OPT_OFF:
558 [ # # ]: 0 : sOut.append(cCSS1_style_opt_end);
559 : 0 : break;
560 : :
561 : : case CSS1_OUTMODE_RULE_OFF:
562 [ # # ]: 0 : sOut.append(sCSS1_rule_end);
563 : 0 : break;
564 : : }
565 [ # # ]: 0 : if (sOut.getLength())
566 [ # # ][ # # ]: 0 : Strm() << sOut.makeStringAndClear().getStr();
567 : : }
568 : 2 : }
569 : :
570 : 2 : void SwHTMLWriter::OutStyleSheet( const SwPageDesc& rPageDesc, sal_Bool bUsed )
571 : : {
572 : 2 : bFirstCSS1Rule = sal_True;
573 : :
574 : : // Feature: PrintExt
575 [ + - ]: 2 : if( IsHTMLMode(HTMLMODE_PRINT_EXT) )
576 : : {
577 : 2 : const SwPageDesc *pFirstPageDesc = 0;
578 : 2 : sal_uInt16 nFirstRefPoolId = RES_POOLPAGE_HTML;
579 : 2 : bCSS1IgnoreFirstPageDesc = sal_True;
580 : :
581 : : // Erstmal versuchen wir zu erraten, wie das Dokument so augebaut ist.
582 : : // Erlaubt sind nur die Vorlagen HTML, erste Seite, linke Seite und
583 : : // rechte Seite.
584 : : // Eine erste Seite wird nur exportiert, wenn die erste Seite auch
585 : : // wirklich die Vorlage "erste Seite" ist.
586 : : // Linke und rechte Seiten werden nur exportiert, wenn diese beiden
587 : : // Vorlagen untereinander verkettet werden.
588 : : // Wenn andere Vorlagen verwendet werden, wird nur in sehr einfachen
589 : : // Faellen etwas exportiert.
590 : 2 : const SwPageDesc *pPageDesc = &rPageDesc;
591 : 2 : const SwPageDesc *pFollow = rPageDesc.GetFollow();
592 [ # # # # ]: 2 : if( RES_POOLPAGE_FIRST == pPageDesc->GetPoolFmtId() &&
[ - + ][ - + ]
593 : : pFollow != pPageDesc &&
594 : 0 : !IsPoolUserFmt( pFollow->GetPoolFmtId() ) )
595 : : {
596 : : // Das Dokument hat eine erste Seite
597 : 0 : pFirstPageDesc = pPageDesc;
598 : 0 : pPageDesc = pFollow;
599 : 0 : pFollow = pPageDesc->GetFollow();
600 : : }
601 : :
602 : 2 : IDocumentStylePoolAccess* pStylePoolAccess = getIDocumentStylePoolAccess();
603 [ + - ]: 2 : if( pPageDesc == pFollow )
604 : : {
605 : : // Das Dokument ist einseitig. Egal welche Seite verwendet wird,
606 : : // es wird kein zweiseitiges Dokument daraus gemacht.
607 : : // Die Attributierung wird relativ zur HTML-Seitenvorlage
608 : : // aus der HTML-Vorlage exportiert.
609 : : OutCSS1_SwPageDesc( *this, *pPageDesc, pStylePoolAccess, pTemplate,
610 : 2 : RES_POOLPAGE_HTML, sal_True, sal_False );
611 : 2 : nFirstRefPoolId = pFollow->GetPoolFmtId();
612 : : }
613 [ # # # # : 0 : else if( (RES_POOLPAGE_LEFT == pPageDesc->GetPoolFmtId() &&
# # # # ]
[ # # ]
614 : 0 : RES_POOLPAGE_RIGHT == pFollow->GetPoolFmtId()) ||
615 : 0 : (RES_POOLPAGE_RIGHT == pPageDesc->GetPoolFmtId() &&
616 : 0 : RES_POOLPAGE_LEFT == pFollow->GetPoolFmtId()) )
617 : : {
618 : : // Das Dokument ist zweiseitig
619 : : OutCSS1_SwPageDesc( *this, *pPageDesc, pStylePoolAccess, pTemplate,
620 : 0 : RES_POOLPAGE_HTML, sal_True );
621 : : OutCSS1_SwPageDesc( *this, *pFollow, pStylePoolAccess, pTemplate,
622 : 0 : RES_POOLPAGE_HTML, sal_True );
623 : 0 : nFirstRefPoolId = RES_POOLPAGE_RIGHT;
624 : 0 : bCSS1IgnoreFirstPageDesc = sal_False;
625 : : }
626 : : // Alles andere bekommen wir nicht hin.
627 : :
628 [ - + ]: 2 : if( pFirstPageDesc )
629 : : OutCSS1_SwPageDesc( *this, *pFirstPageDesc, pStylePoolAccess, pTemplate,
630 : 0 : nFirstRefPoolId, sal_False );
631 : : }
632 : : // /Feature: PrintExt
633 : :
634 : :
635 : : // The text body style has to be exported always (if it is changed compared
636 : : // to the template), because it is used as reference for any style
637 : : // that maps to <P>, and that's especially the standard style
638 : 2 : getIDocumentStylePoolAccess()->GetTxtCollFromPool( RES_POOLCOLL_TEXT, false );
639 : :
640 : : // das Default-TextStyle wir nicht mit ausgegeben !!
641 : : // das 0-Style ist das Default, wird nie ausgegeben !!
642 : 2 : sal_uInt16 nArrLen = pDoc->GetTxtFmtColls()->size();
643 : : sal_uInt16 i;
644 : :
645 [ + + ]: 16 : for( i = 1; i < nArrLen; i++ )
646 : : {
647 : 14 : const SwTxtFmtColl* pColl = (*pDoc->GetTxtFmtColls())[i];
648 : 14 : sal_uInt16 nPoolId = pColl->GetPoolFmtId();
649 [ + + + + ]: 26 : if( !bUsed || nPoolId == RES_POOLCOLL_TEXT ||
[ + + ][ + - ]
650 : 12 : pDoc->IsUsed( *pColl ) )
651 [ + - ]: 4 : OutCSS1_SwFmt( *this, *pColl, pDoc, pTemplate );
652 : : }
653 : :
654 : : // das Default-TextStyle wir nicht mit ausgegeben !!
655 : 2 : nArrLen = pDoc->GetCharFmts()->size();
656 [ - + ]: 2 : for( i=1; i<nArrLen; i++ )
657 : : {
658 : 0 : const SwCharFmt *pCFmt = (*pDoc->GetCharFmts())[i];
659 : 0 : sal_uInt16 nPoolId = pCFmt->GetPoolFmtId();
660 [ # # ]: 0 : if( !bUsed || nPoolId == RES_POOLCHR_INET_NORMAL ||
[ # # # # ]
[ # # ][ # # ]
661 : : nPoolId == RES_POOLCHR_INET_VISIT ||
662 : 0 : pDoc->IsUsed( *pCFmt ) )
663 [ # # ]: 0 : OutCSS1_SwFmt( *this, *pCFmt, pDoc, pTemplate );
664 : : }
665 : :
666 : 2 : const SwFtnIdxs& rIdxs = pDoc->GetFtnIdxs();
667 : 2 : nArrLen = rIdxs.size();
668 : 2 : sal_uInt16 nEnd = 0, nFtn = 0;
669 [ - + ]: 2 : for( i=0; i < nArrLen; i++ )
670 : : {
671 [ # # ]: 0 : if( rIdxs[i]->GetFtn().IsEndNote() )
672 : 0 : nEnd++;
673 : : else
674 : 0 : nFtn++;
675 : : }
676 : 2 : OutCSS1_SwFtnInfo( *this, pDoc->GetFtnInfo(), pDoc, nFtn, sal_False );
677 : 2 : OutCSS1_SwFtnInfo( *this, pDoc->GetEndNoteInfo(), pDoc, nEnd, sal_True );
678 : :
679 [ - + ]: 2 : if( !bFirstCSS1Rule )
680 : : {
681 : 0 : DecIndentLevel();
682 : 0 : OutNewLine();
683 : 0 : Strm() << "-->";
684 : :
685 : 0 : OutNewLine();
686 : 0 : HTMLOutFuncs::Out_AsciiTag( Strm(), OOO_STRING_SVTOOLS_HTML_style, sal_False );
687 : : }
688 : : else
689 : : {
690 : 2 : bFirstCSS1Rule = sal_False;
691 : : }
692 : :
693 : 2 : nDfltTopMargin = 0;
694 : 2 : nDfltBottomMargin = 0;
695 : 2 : }
696 : :
697 : : //-----------------------------------------------------------------------
698 : :
699 : : // wenn pPseudo gesetzt ist werden Styles-Sheets ausgegeben,
700 : : // sonst wird nur nach Token und Class fuer ein Format gesucht
701 : 6 : sal_uInt16 SwHTMLWriter::GetCSS1Selector( const SwFmt *pFmt, rtl::OString& rToken,
702 : : String& rClass, sal_uInt16& rRefPoolId,
703 : : String *pPseudo )
704 : : {
705 : 6 : sal_uInt16 nDeep = 0;
706 : 6 : rToken = rtl::OString();
707 : 6 : rClass.Erase();
708 : 6 : rRefPoolId = 0;
709 [ + + ]: 6 : if( pPseudo )
710 : 4 : pPseudo->Erase();
711 : :
712 : 6 : sal_Bool bChrFmt = RES_CHRFMT==pFmt->Which();
713 : :
714 : : // Nach oben die Formate abklappern, bis man auf eine Standard-
715 : : // oder eine HTML-Tag-Vorlage trifft
716 : 6 : const SwFmt *pPFmt = pFmt;
717 [ + - ][ + - ]: 6 : while( pPFmt && !pPFmt->IsDefault() )
[ + - ]
718 : : {
719 : 6 : sal_Bool bStop = sal_False;
720 : 6 : sal_uInt16 nPoolId = pPFmt->GetPoolFmtId();
721 [ - + ]: 6 : if( USER_FMT & nPoolId )
722 : : {
723 : : // Benutzer-Vorlagen
724 : 0 : const String& rNm = pPFmt->GetName();
725 [ # # # # : 0 : switch( rNm.GetChar(0) )
# # # # #
# # # # ]
726 : : {
727 : : // nicht mehr unterstuetzt:
728 : : // OOO_STRING_SVTOOLS_HTML_author
729 : : // OOO_STRING_SVTOOLS_HTML_acronym
730 : : // OOO_STRING_SVTOOLS_HTML_abbreviation
731 : : // OOO_STRING_SVTOOLS_HTML_deletedtext
732 : : // OOO_STRING_SVTOOLS_HTML_insertedtext
733 : : // OOO_STRING_SVTOOLS_HTML_language
734 : : // OOO_STRING_SVTOOLS_HTML_person
735 [ # # ][ # # ]: 0 : case 'B': if( !bChrFmt && rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_blockquote) )
[ # # ]
736 : : {
737 : 0 : rRefPoolId = RES_POOLCOLL_HTML_BLOCKQUOTE;
738 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_blockquote);
739 : : }
740 : 0 : break;
741 [ # # ]: 0 : case 'C': if( bChrFmt )
742 : : {
743 [ # # ]: 0 : if( rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_citiation) )
744 : : {
745 : 0 : rRefPoolId = RES_POOLCHR_HTML_CITIATION;
746 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_citiation);
747 : : }
748 [ # # ]: 0 : else if( rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_code) )
749 : : {
750 : 0 : rRefPoolId = RES_POOLCHR_HTML_CODE;
751 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_code);
752 : : }
753 : : }
754 : 0 : break;
755 [ # # ][ # # ]: 0 : case 'D': if( bChrFmt && rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_definstance) )
[ # # ]
756 : : {
757 : 0 : rRefPoolId = RES_POOLCHR_HTML_DEFINSTANCE;
758 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_definstance);
759 : : }
760 [ # # ]: 0 : else if( !bChrFmt )
761 : : {
762 : 0 : sal_uInt16 nDefListLvl = GetDefListLvl( rNm, nPoolId );
763 : : // Die Vorlagen DD 1/DT 1 werden ausgegeben,
764 : : // aber keine von ihnen abgeleiteten Vorlagen,
765 : : // auch nicht DD 2/DT 2 etc.
766 [ # # ]: 0 : if( nDefListLvl )
767 : : {
768 [ # # ][ # # ]: 0 : if( pPseudo &&
[ # # ]
769 : : (nDeep || (nDefListLvl & 0x0fff) > 1) )
770 : : {
771 : 0 : bStop = sal_True;
772 : : }
773 [ # # ]: 0 : else if( nDefListLvl & HTML_DLCOLL_DD )
774 : : {
775 : 0 : rRefPoolId = RES_POOLCOLL_HTML_DD;
776 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_dd);
777 : : }
778 : : else
779 : : {
780 : 0 : rRefPoolId = RES_POOLCOLL_HTML_DT;
781 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_dt);
782 : : }
783 : : }
784 : : }
785 : 0 : break;
786 [ # # ][ # # ]: 0 : case 'E': if( bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_emphasis ) )
[ # # ]
787 : : {
788 : 0 : rRefPoolId = RES_POOLCHR_HTML_EMPHASIS;
789 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_emphasis);
790 : : }
791 : 0 : break;
792 [ # # ][ # # ]: 0 : case 'H': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_horzrule ) )
[ # # ]
793 : : // HR nicht ausgeben!
794 : 0 : bStop = (nDeep==0);
795 : 0 : break;
796 [ # # ][ # # ]: 0 : case 'K': if( bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_keyboard ) )
[ # # ]
797 : : {
798 : 0 : rRefPoolId = RES_POOLCHR_HTML_KEYBOARD;
799 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_keyboard);
800 : : }
801 : 0 : break;
802 [ # # ][ # # ]: 0 : case 'L': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_listing ) )
[ # # ]
803 : : {
804 : : // Listing als PRE exportieren bzw. von
805 : : // PRE abgeleitete Vorlage exportieren
806 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_preformtxt);
807 : 0 : rRefPoolId = RES_POOLCOLL_HTML_PRE;
808 : 0 : nDeep = CSS1_FMT_CMPREF;
809 : : }
810 : 0 : break;
811 [ # # ][ # # ]: 0 : case 'P': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_preformtxt ) )
[ # # ]
812 : : {
813 : 0 : rRefPoolId = RES_POOLCOLL_HTML_PRE;
814 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_preformtxt);
815 : : }
816 : 0 : break;
817 [ # # ]: 0 : case 'S': if( bChrFmt )
818 : : {
819 [ # # ]: 0 : if( rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_sample ) )
820 : : {
821 : 0 : rRefPoolId = RES_POOLCHR_HTML_SAMPLE;
822 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_sample);
823 : : }
824 [ # # ]: 0 : else if( rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_strong ) )
825 : : {
826 : 0 : rRefPoolId = RES_POOLCHR_HTML_STRONG;
827 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_strong);
828 : : }
829 : : }
830 : 0 : break;
831 [ # # ][ # # ]: 0 : case 'T': if( bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_teletype ) )
[ # # ]
832 : : {
833 : 0 : rRefPoolId = RES_POOLCHR_HTML_TELETYPE;
834 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_teletype);
835 : : }
836 : 0 : break;
837 [ # # ][ # # ]: 0 : case 'V': if( bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_variable ) )
[ # # ]
838 : : {
839 : 0 : rRefPoolId = RES_POOLCHR_HTML_VARIABLE;
840 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_variable);
841 : : }
842 : 0 : break;
843 [ # # ][ # # ]: 0 : case 'X': if( !bChrFmt && rNm.EqualsAscii( OOO_STRING_SVTOOLS_HTML_xmp ) )
[ # # ]
844 : : {
845 : : // XMP als PRE exportieren (aber nicht die
846 : : // Vorlage als Style)
847 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_preformtxt);
848 : 0 : rRefPoolId = RES_POOLCOLL_HTML_PRE;
849 : 0 : nDeep = CSS1_FMT_CMPREF;
850 : : }
851 : 0 : break;
852 : : }
853 : :
854 : : // Wenn eine PoolId gesetzt ist, entspricht der Name der
855 : : // Vorlage dem szugehoerigen Token
856 : : OSL_ENSURE( (rRefPoolId != 0) == (!rToken.isEmpty()),
857 : : "Token missing" );
858 : : }
859 : : else
860 : : {
861 : : // Pool-Vorlagen
862 [ + + - - : 6 : switch( nPoolId )
- - - - -
- - - - -
- - - - -
- - - - -
- - - - -
- ]
863 : : {
864 : : // Absatz-Vorlagen
865 : : case RES_POOLCOLL_HEADLINE_BASE:
866 : : case RES_POOLCOLL_STANDARD:
867 : : // diese Vorlagen nicht ausgeben
868 : 2 : bStop = (nDeep==0);
869 : 2 : break;
870 : : case RES_POOLCOLL_TEXT:
871 : 4 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_parabreak);
872 : 4 : break;
873 : : case RES_POOLCOLL_HEADLINE1:
874 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_head1);
875 : 0 : break;
876 : : case RES_POOLCOLL_HEADLINE2:
877 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_head2);
878 : 0 : break;
879 : : case RES_POOLCOLL_HEADLINE3:
880 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_head3);
881 : 0 : break;
882 : : case RES_POOLCOLL_HEADLINE4:
883 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_head4);
884 : 0 : break;
885 : : case RES_POOLCOLL_HEADLINE5:
886 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_head5);
887 : 0 : break;
888 : : case RES_POOLCOLL_HEADLINE6:
889 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_head6);
890 : 0 : break;
891 : : case RES_POOLCOLL_SENDADRESS:
892 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_address);
893 : 0 : break;
894 : : case RES_POOLCOLL_HTML_BLOCKQUOTE:
895 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_blockquote);
896 : 0 : break;
897 : : case RES_POOLCOLL_HTML_PRE:
898 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_preformtxt);
899 : 0 : break;
900 : :
901 : : case RES_POOLCOLL_HTML_DD:
902 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_dd);
903 : 0 : break;
904 : : case RES_POOLCOLL_HTML_DT:
905 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_dt);
906 : 0 : break;
907 : :
908 : : case RES_POOLCOLL_TABLE:
909 [ # # ]: 0 : if( pPseudo )
910 : : {
911 : : rToken = rtl::OStringBuffer(
912 : : RTL_CONSTASCII_STRINGPARAM(OOO_STRING_SVTOOLS_HTML_tabledata))
913 [ # # ]: 0 : .append(' ')
914 [ # # ]: 0 : .append(RTL_CONSTASCII_STRINGPARAM(OOO_STRING_SVTOOLS_HTML_parabreak))
915 : 0 : .makeStringAndClear();
916 : : }
917 : : else
918 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_parabreak);
919 : 0 : break;
920 : : case RES_POOLCOLL_TABLE_HDLN:
921 [ # # ]: 0 : if( pPseudo )
922 : : {
923 : : rToken = rtl::OStringBuffer(
924 : : RTL_CONSTASCII_STRINGPARAM(OOO_STRING_SVTOOLS_HTML_tableheader))
925 [ # # ]: 0 : .append(' ')
926 [ # # ]: 0 : .append(RTL_CONSTASCII_STRINGPARAM(OOO_STRING_SVTOOLS_HTML_parabreak))
927 : 0 : .makeStringAndClear();
928 : : }
929 : : else
930 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_parabreak);
931 : 0 : break;
932 : : case RES_POOLCOLL_HTML_HR:
933 : : // HR nicht ausgeben!
934 : 0 : bStop = (nDeep==0);
935 : 0 : break;
936 : : case RES_POOLCOLL_FOOTNOTE:
937 [ # # ]: 0 : if( !nDeep )
938 : : {
939 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_parabreak);
940 : 0 : rClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdfootnote );
941 : 0 : rRefPoolId = RES_POOLCOLL_TEXT;
942 : 0 : nDeep = CSS1_FMT_CMPREF;
943 : : }
944 : 0 : break;
945 : : case RES_POOLCOLL_ENDNOTE:
946 [ # # ]: 0 : if( !nDeep )
947 : : {
948 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_parabreak);
949 : 0 : rClass.AssignAscii( OOO_STRING_SVTOOLS_HTML_sdendnote );
950 : 0 : rRefPoolId = RES_POOLCOLL_TEXT;
951 : 0 : nDeep = CSS1_FMT_CMPREF;
952 : : }
953 : 0 : break;
954 : :
955 : : // Zeichen-Vorlagen
956 : : case RES_POOLCHR_HTML_EMPHASIS:
957 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_emphasis);
958 : 0 : break;
959 : : case RES_POOLCHR_HTML_CITIATION:
960 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_citiation);
961 : 0 : break;
962 : : case RES_POOLCHR_HTML_STRONG:
963 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_strong);
964 : 0 : break;
965 : : case RES_POOLCHR_HTML_CODE:
966 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_code);
967 : 0 : break;
968 : : case RES_POOLCHR_HTML_SAMPLE:
969 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_sample);
970 : 0 : break;
971 : : case RES_POOLCHR_HTML_KEYBOARD:
972 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_keyboard);
973 : 0 : break;
974 : : case RES_POOLCHR_HTML_VARIABLE:
975 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_variable);
976 : 0 : break;
977 : : case RES_POOLCHR_HTML_DEFINSTANCE:
978 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_definstance);
979 : 0 : break;
980 : : case RES_POOLCHR_HTML_TELETYPE:
981 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_teletype);
982 : 0 : break;
983 : :
984 : : case RES_POOLCHR_INET_NORMAL:
985 [ # # ]: 0 : if( pPseudo )
986 : : {
987 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_anchor);
988 : 0 : pPseudo->AssignAscii( sCSS1_link );
989 : : }
990 : 0 : break;
991 : : case RES_POOLCHR_INET_VISIT:
992 [ # # ]: 0 : if( pPseudo )
993 : : {
994 : 0 : rToken = rtl::OString(OOO_STRING_SVTOOLS_HTML_anchor);
995 : 0 : pPseudo->AssignAscii( sCSS1_visited );
996 : : }
997 : 0 : break;
998 : : }
999 : :
1000 : : // Wenn ein Token gesetzt ist, enthaelt nPoolId die dazugehoerige
1001 : : // Vorlage
1002 [ + + ][ + - ]: 6 : if( !rToken.isEmpty() && !rRefPoolId )
[ + + ]
1003 : 4 : rRefPoolId = nPoolId;
1004 : : }
1005 : :
1006 [ + + ][ + - ]: 6 : if( !rToken.isEmpty() || bStop )
[ + - ]
1007 : : {
1008 : : // Anhalten wenn eine HTML-Tag-Vorlage gefunden wurde
1009 : 6 : break;
1010 : : }
1011 : : else
1012 : : {
1013 : : // sonst weitersuchen
1014 : 0 : nDeep++;
1015 : 0 : pPFmt = pPFmt->DerivedFrom();
1016 : : }
1017 : : }
1018 : :
1019 [ + + ]: 6 : if( !rToken.isEmpty() )
1020 : : {
1021 : : // Es ist eine HTML-Tag-Vorlage
1022 [ + - ]: 4 : if( !nDeep )
1023 : 4 : nDeep = CSS1_FMT_ISTAG;
1024 : : }
1025 : : else
1026 : : {
1027 : : // Es ist keine HTML-Tag-Vorlage und auch keine davon abgeleitete
1028 : 2 : nDeep = 0;
1029 : : }
1030 [ + + ][ - + ]: 6 : if( nDeep > 0 && nDeep < CSS1_FMT_SPECIAL )
1031 : : {
1032 : : // Wenn die Vorlage von einer HTML-Vorlage abgeleitet ist,
1033 : : // wird sie als <TOKEN>.<CLASS> exportiert, sonst als .<CLASS>.
1034 : : // <CLASS> ergibt sich aus dem Namen der Vorlage durch entfernen
1035 : : // aller Zeichen vor und inklusive dem ersten '.'
1036 : 0 : rClass = pFmt->GetName();
1037 : 0 : xub_StrLen nPos = rClass.Search( '.' );
1038 [ # # ][ # # ]: 0 : if( nPos != STRING_NOTFOUND && rClass.Len() > nPos+1 )
[ # # ]
1039 : : {
1040 : 0 : rClass.Erase( 0, nPos+1 );
1041 : : }
1042 : :
1043 [ # # ][ # # ]: 0 : rClass = GetAppCharClass().lowercase( rClass );
[ # # ]
1044 [ # # ]: 0 : while( STRING_NOTFOUND != rClass.SearchAndReplace( '.', '-' ) )
1045 : : ;
1046 [ # # ]: 0 : while( STRING_NOTFOUND != rClass.SearchAndReplace( ' ', '-' ) )
1047 : : ;
1048 [ # # ]: 0 : while( STRING_NOTFOUND != rClass.SearchAndReplace( '_', '-' ) )
1049 : : ;
1050 : : }
1051 : :
1052 : 6 : return nDeep;
1053 : : }
1054 : :
1055 : 4 : static sal_uInt16 GetCSS1Selector( const SwFmt *pFmt, String& rSelector,
1056 : : sal_uInt16& rRefPoolId )
1057 : : {
1058 : 4 : rtl::OString aToken;
1059 [ + - ]: 4 : String aClass;
1060 [ + - ]: 4 : String aPseudo;
1061 : :
1062 : : sal_uInt16 nDeep = SwHTMLWriter::GetCSS1Selector( pFmt, aToken, aClass,
1063 [ + - ]: 4 : rRefPoolId, &aPseudo );
1064 [ + + ]: 4 : if( nDeep )
1065 : : {
1066 [ + - ]: 2 : if( !aToken.isEmpty() )
1067 [ + - ][ + - ]: 2 : rSelector = rtl::OStringToOUString(aToken, RTL_TEXTENCODING_ASCII_US);
1068 : : else
1069 [ # # ]: 0 : rSelector.Erase();
1070 : :
1071 [ - + ]: 2 : if( aClass.Len() )
1072 [ # # ][ # # ]: 0 : (rSelector += '.') += aClass;
1073 [ - + ]: 2 : if( aPseudo.Len() )
1074 [ # # ][ # # ]: 0 : (rSelector += ':') += aPseudo;
1075 : : }
1076 : :
1077 [ + - ][ + - ]: 4 : return nDeep;
1078 : : }
1079 : :
1080 : 8 : const SwFmt *SwHTMLWriter::GetTemplateFmt( sal_uInt16 nPoolFmtId,
1081 : : IDocumentStylePoolAccess* pTemplate /*SwDoc *pTemplate*/)
1082 : : {
1083 : 8 : const SwFmt *pRefFmt = 0;
1084 : :
1085 [ + - ]: 8 : if( pTemplate )
1086 : : {
1087 : : OSL_ENSURE( !(USER_FMT & nPoolFmtId),
1088 : : "In der Dok-Vorlage gibt es keine Benutzer-Vorlagen" );
1089 [ + + ]: 8 : if( POOLGRP_NOCOLLID & nPoolFmtId )
1090 : 4 : pRefFmt = pTemplate->GetCharFmtFromPool( nPoolFmtId );
1091 : : else
1092 : 4 : pRefFmt = pTemplate->GetTxtCollFromPool( nPoolFmtId, false );
1093 : : }
1094 : :
1095 : 8 : return pRefFmt;
1096 : : }
1097 : :
1098 : 0 : const SwFmt *SwHTMLWriter::GetParentFmt( const SwFmt& rFmt, sal_uInt16 nDeep )
1099 : : {
1100 : : OSL_ENSURE( nDeep != USHRT_MAX, "GetParent fuer HTML-Vorlage aufgerufen!" );
1101 : 0 : const SwFmt *pRefFmt = 0;
1102 : :
1103 [ # # ]: 0 : if( nDeep > 0 )
1104 : : {
1105 : : // hier wird die HTML-Tag-Vorlage, von der die Vorlage abgeleitet
1106 : : // ist als Referenz geholt
1107 : 0 : pRefFmt = &rFmt;
1108 [ # # ]: 0 : for( sal_uInt16 i=nDeep; i>0; i-- )
1109 : 0 : pRefFmt = pRefFmt->DerivedFrom();
1110 : :
1111 [ # # ][ # # ]: 0 : if( pRefFmt && pRefFmt->IsDefault() )
[ # # ]
1112 : 0 : pRefFmt = 0;
1113 : : }
1114 : :
1115 : 0 : return pRefFmt;
1116 : : }
1117 : :
1118 : 0 : sal_Bool lcl_css1atr_equalFontItems( const SfxPoolItem& r1, const SfxPoolItem& r2 )
1119 : : {
1120 : 0 : return ((const SvxFontItem &)r1).GetFamilyName() ==
1121 : 0 : ((const SvxFontItem &)r2).GetFamilyName() &&
1122 : 0 : ((const SvxFontItem &)r1).GetFamily() ==
1123 [ # # # # ]: 0 : ((const SvxFontItem &)r2).GetFamily();
1124 : : }
1125 : :
1126 : 8 : void SwHTMLWriter::SubtractItemSet( SfxItemSet& rItemSet,
1127 : : const SfxItemSet& rRefItemSet,
1128 : : sal_Bool bSetDefaults,
1129 : : sal_Bool bClearSame,
1130 : : const SfxItemSet *pRefScriptItemSet )
1131 : : {
1132 : : OSL_ENSURE( bSetDefaults || bClearSame,
1133 : : "SwHTMLWriter::SubtractItemSet: Bei diesen Flags passiert nix" );
1134 [ + - ]: 8 : SfxItemSet aRefItemSet( *rRefItemSet.GetPool(), rRefItemSet.GetRanges() );
1135 [ + - ]: 8 : aRefItemSet.Set( rRefItemSet );
1136 : :
1137 : : // und mit dem Attr-Set der Vorlage vergleichen
1138 [ + - ]: 8 : SfxWhichIter aIter( rItemSet );
1139 [ + - ]: 8 : sal_uInt16 nWhich = aIter.FirstWhich();
1140 [ + + ]: 376 : while( nWhich )
1141 : : {
1142 : : const SfxPoolItem *pRefItem, *pItem;
1143 : : sal_Bool bItemSet = ( SFX_ITEM_SET ==
1144 [ + - ]: 368 : rItemSet.GetItemState( nWhich, sal_False, &pItem) );
1145 : : sal_Bool bRefItemSet;
1146 : :
1147 [ - + ]: 368 : if( pRefScriptItemSet )
1148 : : {
1149 [ # # ]: 0 : switch( nWhich )
1150 : : {
1151 : : case RES_CHRATR_FONT:
1152 : : case RES_CHRATR_FONTSIZE:
1153 : : case RES_CHRATR_LANGUAGE:
1154 : : case RES_CHRATR_POSTURE:
1155 : : case RES_CHRATR_WEIGHT:
1156 : : case RES_CHRATR_CJK_FONT:
1157 : : case RES_CHRATR_CJK_FONTSIZE:
1158 : : case RES_CHRATR_CJK_LANGUAGE:
1159 : : case RES_CHRATR_CJK_POSTURE:
1160 : : case RES_CHRATR_CJK_WEIGHT:
1161 : : case RES_CHRATR_CTL_FONT:
1162 : : case RES_CHRATR_CTL_FONTSIZE:
1163 : : case RES_CHRATR_CTL_LANGUAGE:
1164 : : case RES_CHRATR_CTL_POSTURE:
1165 : : case RES_CHRATR_CTL_WEIGHT:
1166 : : bRefItemSet = ( SFX_ITEM_SET ==
1167 [ # # ]: 0 : pRefScriptItemSet->GetItemState( nWhich, sal_True, &pRefItem) );
1168 : 0 : break;
1169 : : default:
1170 : : bRefItemSet = ( SFX_ITEM_SET ==
1171 [ # # ]: 0 : aRefItemSet.GetItemState( nWhich, sal_False, &pRefItem) );
1172 : 0 : break;
1173 : : }
1174 : : }
1175 : : else
1176 : : {
1177 : : bRefItemSet = ( SFX_ITEM_SET ==
1178 [ + - ]: 368 : aRefItemSet.GetItemState( nWhich, sal_False, &pRefItem) );
1179 : : }
1180 : :
1181 [ + + ]: 368 : if( bItemSet )
1182 : : {
1183 [ - + ][ # # ]: 12 : if( (bClearSame || pRefScriptItemSet) && bRefItemSet &&
[ + - ][ - + ]
[ # # ][ # # ]
[ # # ][ # # ]
[ + - ]
1184 [ + - ]: 6 : ( *pItem == *pRefItem ||
1185 : : ((RES_CHRATR_FONT == nWhich ||
1186 : : RES_CHRATR_CJK_FONT == nWhich ||
1187 : : RES_CHRATR_CTL_FONT == nWhich) &&
1188 [ # # ]: 0 : lcl_css1atr_equalFontItems( *pItem, *pRefItem )) ) )
1189 : : {
1190 : : // das Attribut ist mit dem gleichen Wert in beiden
1191 : : // Vorlagen vorhanden und muss nicht ausgegeben werden
1192 [ + - ]: 6 : rItemSet.ClearItem( nWhich );
1193 : : }
1194 : : }
1195 : : else
1196 : : {
1197 [ - + ][ # # ]: 362 : if( (bSetDefaults || pRefScriptItemSet) && bRefItemSet )
[ - + ]
1198 : : {
1199 : : // das Attribut ist nur in der Referenz vorhanden. Das
1200 : : // Default muss ggf. ausgegeben werden
1201 [ # # ][ # # ]: 0 : rItemSet.Put( rItemSet.GetPool()->GetDefaultItem(nWhich) );
1202 : : }
1203 : : }
1204 : :
1205 [ + - ]: 368 : nWhich = aIter.NextWhich();
1206 [ + - ][ + - ]: 8 : }
1207 : 8 : }
1208 : :
1209 : 0 : void SwHTMLWriter::PrepareFontList( const SvxFontItem& rFontItem,
1210 : : String& rNames,
1211 : : sal_Unicode cQuote, sal_Bool bGeneric )
1212 : : {
1213 : 0 : rNames = aEmptyStr;
1214 : 0 : const String& rName = rFontItem.GetFamilyName();
1215 : 0 : sal_Bool bContainsKeyword = sal_False;
1216 [ # # ]: 0 : if( rName.Len() )
1217 : : {
1218 : 0 : xub_StrLen nStrPos = 0;
1219 [ # # ]: 0 : while( nStrPos != STRING_NOTFOUND )
1220 : : {
1221 [ # # ]: 0 : String aName = rName.GetToken( 0, ';', nStrPos );
1222 [ # # ][ # # ]: 0 : aName = comphelper::string::strip(aName, ' ');
[ # # ]
1223 [ # # ]: 0 : if( !aName.Len() )
1224 : 0 : continue;
1225 : :
1226 : 0 : sal_Bool bIsKeyword = sal_False;
1227 [ # # # # : 0 : switch( aName.GetChar( 0 ) )
# ]
1228 : : {
1229 : : case 'c':
1230 : : case 'C':
1231 [ # # ]: 0 : bIsKeyword = aName.EqualsIgnoreCaseAscii( sCSS1_PV_cursive );
1232 : 0 : break;
1233 : :
1234 : : case 'f':
1235 : : case 'F':
1236 [ # # ]: 0 : bIsKeyword = aName.EqualsIgnoreCaseAscii( sCSS1_PV_fantasy );
1237 : 0 : break;
1238 : :
1239 : : case 'm':
1240 : : case 'M':
1241 [ # # ]: 0 : bIsKeyword = aName.EqualsIgnoreCaseAscii( sCSS1_PV_monospace );
1242 : 0 : break;
1243 : :
1244 : : case 's':
1245 : : case 'S':
1246 : : bIsKeyword =
1247 [ # # ]: 0 : aName.EqualsIgnoreCaseAscii( sCSS1_PV_serif ) ||
1248 [ # # ][ # # ]: 0 : aName.EqualsIgnoreCaseAscii( sCSS1_PV_sans_serif );
[ # # ]
1249 : 0 : break;
1250 : : }
1251 : :
1252 : 0 : bContainsKeyword |= bIsKeyword;
1253 : :
1254 [ # # ]: 0 : if( rNames.Len() )
1255 [ # # ]: 0 : rNames.AppendAscii( ", " );
1256 [ # # ][ # # ]: 0 : if( cQuote && !bIsKeyword )
1257 [ # # ]: 0 : rNames += cQuote;
1258 [ # # ]: 0 : rNames += aName;
1259 [ # # ][ # # ]: 0 : if( cQuote && !bIsKeyword )
1260 [ # # ]: 0 : rNames += cQuote;
1261 [ # # ][ # # ]: 0 : }
1262 : : }
1263 : :
1264 [ # # ][ # # ]: 0 : if( !bContainsKeyword && bGeneric )
1265 : : {
1266 : 0 : const sal_Char *pStr = 0;
1267 [ # # # # : 0 : switch( rFontItem.GetFamily() )
# # ]
1268 : : {
1269 : 0 : case FAMILY_ROMAN: pStr = sCSS1_PV_serif; break;
1270 : 0 : case FAMILY_SWISS: pStr = sCSS1_PV_sans_serif; break;
1271 : 0 : case FAMILY_SCRIPT: pStr = sCSS1_PV_cursive; break;
1272 : 0 : case FAMILY_DECORATIVE: pStr = sCSS1_PV_fantasy; break;
1273 : 0 : case FAMILY_MODERN: pStr = sCSS1_PV_monospace; break;
1274 : : default:
1275 : : ;
1276 : : }
1277 : :
1278 [ # # ]: 0 : if( pStr )
1279 : : {
1280 [ # # ]: 0 : if( rNames.Len() )
1281 : 0 : rNames.AppendAscii( ", " );
1282 : 0 : rNames.AppendAscii( pStr );
1283 : : }
1284 : : }
1285 : 0 : }
1286 : :
1287 : 0 : sal_Bool SwHTMLWriter::HasScriptDependentItems( const SfxItemSet& rItemSet,
1288 : : sal_Bool bCheckDropCap )
1289 : : {
1290 : : static sal_uInt16 aWhichIds[] =
1291 : : {
1292 : : RES_CHRATR_FONT, RES_CHRATR_CJK_FONT, RES_CHRATR_CTL_FONT,
1293 : : RES_CHRATR_FONTSIZE, RES_CHRATR_CJK_FONTSIZE, RES_CHRATR_CTL_FONTSIZE,
1294 : : RES_CHRATR_LANGUAGE, RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CTL_LANGUAGE,
1295 : : RES_CHRATR_POSTURE, RES_CHRATR_CJK_POSTURE, RES_CHRATR_CTL_POSTURE,
1296 : : RES_CHRATR_WEIGHT, RES_CHRATR_CJK_WEIGHT, RES_CHRATR_CTL_WEIGHT,
1297 : : 0, 0, 0
1298 : : };
1299 : :
1300 [ # # ]: 0 : for( sal_uInt16 i=0; aWhichIds[i]; i += 3 )
1301 : : {
1302 : 0 : const SfxPoolItem *pItem = 0, *pItemCJK = 0, *pItemCTL = 0, *pTmp;
1303 : 0 : sal_uInt16 nItemCount = 0;
1304 [ # # ]: 0 : if( SFX_ITEM_SET == rItemSet.GetItemState( aWhichIds[i], sal_False,
1305 [ # # ]: 0 : &pTmp ) )
1306 : : {
1307 : 0 : pItem = pTmp;
1308 : 0 : nItemCount++;
1309 : : }
1310 [ # # ]: 0 : if( SFX_ITEM_SET == rItemSet.GetItemState( aWhichIds[i+1], sal_False,
1311 [ # # ]: 0 : &pTmp ) )
1312 : : {
1313 : 0 : pItemCJK = pTmp;
1314 : 0 : nItemCount++;
1315 : : }
1316 [ # # ]: 0 : if( SFX_ITEM_SET == rItemSet.GetItemState( aWhichIds[i+2], sal_False,
1317 [ # # ]: 0 : &pTmp ) )
1318 : : {
1319 : 0 : pItemCTL = pTmp;
1320 : 0 : nItemCount++;
1321 : : }
1322 : :
1323 : : // If some of the items are set, but not all, we need script dependent
1324 : : // styles
1325 [ # # ][ # # ]: 0 : if( nItemCount > 0 && nItemCount < 3 )
1326 : 0 : return sal_True;
1327 : :
1328 [ # # ]: 0 : if( 3 == nItemCount )
1329 : : {
1330 : : // If all items are set, but some of them have different values,
1331 : : // we need script dependent styles, too. For font items, we have
1332 : : // to take care about their special HTML/CSS1 representation.
1333 [ # # ]: 0 : if( RES_CHRATR_FONT == aWhichIds[i] )
1334 : : {
1335 [ # # ][ # # ]: 0 : if( !lcl_css1atr_equalFontItems( *pItem, *pItemCJK ) ||
[ # # ][ # # ]
[ # # ]
1336 [ # # ]: 0 : !lcl_css1atr_equalFontItems( *pItem, *pItemCTL ) ||
1337 [ # # ]: 0 : !lcl_css1atr_equalFontItems( *pItemCJK, *pItemCTL ) )
1338 : 0 : return sal_True;
1339 : : }
1340 : : else
1341 : : {
1342 [ # # ][ # # ]: 0 : if( !( *pItem == *pItemCJK ) ||
[ # # ][ # # ]
[ # # ]
1343 [ # # ]: 0 : !( *pItem == *pItemCTL ) ||
1344 [ # # ]: 0 : !( *pItemCJK == *pItemCTL ) )
1345 : 0 : return sal_True;
1346 : : }
1347 : : }
1348 : : }
1349 : :
1350 : : const SfxPoolItem *pItem;
1351 [ # # ][ # # ]: 0 : if( bCheckDropCap &&
[ # # ]
1352 : : SFX_ITEM_SET == rItemSet.GetItemState( RES_PARATR_DROP, sal_True,
1353 [ # # ]: 0 : &pItem ) )
1354 : : {
1355 : 0 : const SwFmtDrop *pDrop = (const SwFmtDrop *)pItem;
1356 : 0 : const SwCharFmt *pDCCharFmt = pDrop->GetCharFmt();
1357 [ # # ]: 0 : if( pDCCharFmt )
1358 : : {
1359 : : //Some items occured twice, and I have no idea why.
1360 : 0 : SfxItemSet aTstItemSet( *pDCCharFmt->GetAttrSet().GetPool(),
1361 : : RES_CHRATR_FONT, RES_CHRATR_POSTURE, RES_CHRATR_WEIGHT,
1362 : : RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_POSTURE, RES_CHRATR_CJK_WEIGHT,
1363 : : RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_POSTURE, RES_CHRATR_CTL_WEIGHT,
1364 [ # # ]: 0 : 0 );
1365 [ # # ]: 0 : aTstItemSet.Set( pDCCharFmt->GetAttrSet(), sal_True );
1366 [ # # ][ # # ]: 0 : return HasScriptDependentItems( aTstItemSet, sal_False );
1367 : : }
1368 : : }
1369 : :
1370 : 0 : return sal_False;
1371 : : }
1372 : :
1373 : 0 : static sal_Bool OutCSS1Rule( SwHTMLWriter& rHTMLWrt, const String& rSelector,
1374 : : const SfxItemSet& rItemSet, sal_Bool bHasClass,
1375 : : sal_Bool bCheckForPseudo )
1376 : : {
1377 : 0 : sal_Bool bScriptDependent = sal_False;
1378 [ # # ]: 0 : if( SwHTMLWriter::HasScriptDependentItems( rItemSet, bHasClass ) )
1379 : : {
1380 : 0 : bScriptDependent = sal_True;
1381 [ # # ]: 0 : String aSelector( rSelector );
1382 : :
1383 [ # # ]: 0 : String aPseudo;
1384 [ # # ]: 0 : if( bCheckForPseudo )
1385 : : {
1386 [ # # ]: 0 : xub_StrLen nPos = aSelector.SearchBackward( ':' );
1387 [ # # ]: 0 : if( STRING_NOTFOUND != nPos )
1388 : : {
1389 [ # # ][ # # ]: 0 : aPseudo = aSelector.Copy( nPos );
[ # # ]
1390 [ # # ]: 0 : aSelector.Erase( nPos );
1391 : : }
1392 : : }
1393 : :
1394 [ # # ]: 0 : if( !bHasClass )
1395 : : {
1396 : : // If we are exporting styles for a tag we have to export a tag
1397 : : // rule for all properties that aren't style dependent and
1398 : : // some class rule for the additional style dependen properties
1399 : : {
1400 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_NO_SCRIPT|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1401 [ # # ]: 0 : sal_True, &rSelector );
1402 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( rItemSet, sal_False );
1403 : : }
1404 : :
1405 : 0 : SfxItemSet aScriptItemSet( *rItemSet.GetPool(),
1406 : : RES_CHRATR_FONT, RES_CHRATR_FONTSIZE,
1407 : : RES_CHRATR_LANGUAGE, RES_CHRATR_POSTURE,
1408 : : RES_CHRATR_WEIGHT,
1409 : : RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONTSIZE,
1410 : : RES_CHRATR_CJK_LANGUAGE, RES_CHRATR_CJK_POSTURE,
1411 : : RES_CHRATR_CJK_WEIGHT,
1412 : : RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONTSIZE,
1413 : : RES_CHRATR_CTL_LANGUAGE, RES_CHRATR_CTL_POSTURE,
1414 : : RES_CHRATR_CTL_WEIGHT,
1415 [ # # ]: 0 : 0 );
1416 [ # # ]: 0 : aScriptItemSet.Put( rItemSet );
1417 : :
1418 [ # # ]: 0 : String aNewSelector( aSelector );
1419 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".western") );
1420 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1421 : : {
1422 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_WESTERN|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1423 [ # # ]: 0 : sal_True, &aNewSelector );
1424 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( aScriptItemSet, sal_False );
1425 : : }
1426 : :
1427 [ # # ]: 0 : aNewSelector = aSelector;
1428 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".cjk") );
1429 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1430 : : {
1431 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CJK|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1432 [ # # ]: 0 : sal_True, &aNewSelector );
1433 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( aScriptItemSet, sal_False );
1434 : : }
1435 : :
1436 [ # # ]: 0 : aNewSelector = aSelector;
1437 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".ctl") );
1438 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1439 : : {
1440 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CTL|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1441 [ # # ]: 0 : sal_True, &aNewSelector );
1442 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( aScriptItemSet, sal_False );
1443 [ # # ][ # # ]: 0 : }
1444 : : }
1445 : : else
1446 : : {
1447 : : // If ther are script dependencies and we are derived from a tag,
1448 : : // when we have to export a style dependent class for all
1449 : : // scripts
1450 [ # # ]: 0 : String aNewSelector( aSelector );
1451 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-western") );
1452 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1453 : : {
1454 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_WESTERN|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1455 [ # # ]: 0 : sal_True, &aNewSelector );
1456 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( rItemSet, sal_False );
1457 : : }
1458 : :
1459 [ # # ]: 0 : aNewSelector = aSelector;
1460 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-cjk") );
1461 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1462 : : {
1463 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CJK|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1464 [ # # ]: 0 : sal_True, &aNewSelector );
1465 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( rItemSet, sal_False );
1466 : : }
1467 : :
1468 [ # # ]: 0 : aNewSelector = aSelector;
1469 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-ctl") );
1470 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1471 : : {
1472 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CTL|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1473 [ # # ]: 0 : sal_True, &aNewSelector );
1474 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( rItemSet, sal_False );
1475 [ # # ]: 0 : }
1476 [ # # ][ # # ]: 0 : }
1477 : : }
1478 : : else
1479 : : {
1480 : : // If there are no script dependencies, when all items are
1481 : : // exported in one step. For hyperlinks only, a script information
1482 : : // must be there, because these two chr formats don't support
1483 : : // script dependencies by now.
1484 : : SwCSS1OutMode aMode( rHTMLWrt,
1485 : : rHTMLWrt.nCSS1Script|CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1486 [ # # ]: 0 : sal_True, &rSelector );
1487 [ # # ]: 0 : rHTMLWrt.OutCSS1_SfxItemSet( rItemSet, sal_False );
1488 : : }
1489 : :
1490 : 0 : return bScriptDependent;
1491 : : }
1492 : :
1493 : 0 : static void OutCSS1DropCapRule(
1494 : : SwHTMLWriter& rHTMLWrt, const String& rSelector,
1495 : : const SwFmtDrop& rDrop, sal_Bool bHasClass,
1496 : : sal_Bool bHasScriptDependencies )
1497 : : {
1498 : 0 : const SwCharFmt *pDCCharFmt = rDrop.GetCharFmt();
1499 [ # # ]: 0 : if( (bHasScriptDependencies && bHasClass) ||
[ # # # # ]
[ # # ][ # # ]
1500 : 0 : (pDCCharFmt && SwHTMLWriter::HasScriptDependentItems( pDCCharFmt->GetAttrSet(), sal_False ) ) )
1501 : : {
1502 [ # # ]: 0 : String aSelector( rSelector );
1503 : :
1504 [ # # ]: 0 : String aPseudo;
1505 [ # # ]: 0 : xub_StrLen nPos = aSelector.SearchBackward( ':' );
1506 [ # # ]: 0 : if( STRING_NOTFOUND != nPos )
1507 : : {
1508 [ # # ][ # # ]: 0 : aPseudo = aSelector.Copy( nPos );
[ # # ]
1509 [ # # ]: 0 : aSelector.Erase( nPos );
1510 : : }
1511 : :
1512 [ # # ]: 0 : if( !bHasClass )
1513 : : {
1514 : : // If we are exporting styles for a tag we have to export a tag
1515 : : // rule for all properties that aren't style dependent and
1516 : : // some class rule for the additional style dependen properties
1517 : : {
1518 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_NO_SCRIPT|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1519 [ # # ]: 0 : sal_True, &rSelector );
1520 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop );
1521 : : }
1522 : :
1523 : 0 : SfxItemSet aScriptItemSet( rHTMLWrt.pDoc->GetAttrPool(),
1524 : : RES_CHRATR_FONT, RES_CHRATR_FONTSIZE,
1525 : : RES_CHRATR_LANGUAGE, RES_CHRATR_POSTURE,
1526 : : RES_CHRATR_WEIGHT, RES_CHRATR_WEIGHT,
1527 : : RES_CHRATR_CJK_FONT, RES_CHRATR_CTL_WEIGHT,
1528 [ # # ]: 0 : 0 );
1529 [ # # ]: 0 : if( pDCCharFmt )
1530 [ # # ]: 0 : aScriptItemSet.Set( pDCCharFmt->GetAttrSet(), sal_True );
1531 : :
1532 [ # # ]: 0 : String aNewSelector( aSelector );
1533 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".western") );
1534 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1535 : : {
1536 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_WESTERN|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1537 [ # # ]: 0 : sal_True, &aNewSelector );
1538 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop, &aScriptItemSet );
1539 : : }
1540 : :
1541 [ # # ]: 0 : aNewSelector = aSelector;
1542 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".cjk") );
1543 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1544 : : {
1545 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CJK|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1546 [ # # ]: 0 : sal_True, &aNewSelector );
1547 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop, &aScriptItemSet );
1548 : : }
1549 : :
1550 [ # # ]: 0 : aNewSelector = aSelector;
1551 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM(".ctl") );
1552 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1553 : : {
1554 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CTL|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1555 [ # # ]: 0 : sal_True, &aNewSelector );
1556 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop, &aScriptItemSet );
1557 [ # # ][ # # ]: 0 : }
1558 : : }
1559 : : else
1560 : : {
1561 : : // If ther are script dependencies and we are derived from a tag,
1562 : : // when we have to export a style dependent class for all
1563 : : // scripts
1564 [ # # ]: 0 : String aNewSelector( aSelector );
1565 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-western") );
1566 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1567 : : {
1568 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_WESTERN|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1569 [ # # ]: 0 : sal_True, &aNewSelector );
1570 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop );
1571 : : }
1572 : :
1573 [ # # ]: 0 : aNewSelector = aSelector;
1574 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-cjk") );
1575 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1576 : : {
1577 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CJK|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1578 [ # # ]: 0 : sal_True, &aNewSelector );
1579 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop );
1580 : : }
1581 : :
1582 [ # # ]: 0 : aNewSelector = aSelector;
1583 [ # # ]: 0 : aNewSelector.AppendAscii( RTL_CONSTASCII_STRINGPARAM("-ctl") );
1584 [ # # ]: 0 : aNewSelector.Append( aPseudo );
1585 : : {
1586 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_CTL|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1587 [ # # ]: 0 : sal_True, &aNewSelector );
1588 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop );
1589 [ # # ]: 0 : }
1590 [ # # ][ # # ]: 0 : }
1591 : : }
1592 : : else
1593 : : {
1594 : : // If there are no script dependencies, when all items are
1595 : : // exported in one step. For hyperlinks only, a script information
1596 : : // must be there, because these two chr formats don't support
1597 : : // script dependencies by now.
1598 : : SwCSS1OutMode aMode( rHTMLWrt,
1599 : : rHTMLWrt.nCSS1Script|CSS1_OUTMODE_RULE|CSS1_OUTMODE_DROPCAP,
1600 [ # # ]: 0 : sal_True, &rSelector );
1601 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, rDrop );
1602 : : }
1603 : 0 : }
1604 : :
1605 : 4 : static Writer& OutCSS1_SwFmt( Writer& rWrt, const SwFmt& rFmt,
1606 : : IDocumentStylePoolAccess/*SwDoc*/ *pDoc, SwDoc *pTemplate )
1607 : : {
1608 : 4 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
1609 : :
1610 : 4 : sal_Bool bCharFmt = sal_False;
1611 [ - + - ]: 4 : switch( rFmt.Which() )
1612 : : {
1613 : : case RES_CHRFMT:
1614 : 0 : bCharFmt = sal_True;
1615 : 0 : break;
1616 : :
1617 : : case RES_TXTFMTCOLL:
1618 : : case RES_CONDTXTFMTCOLL:
1619 : : // diese Vorlagen-Typen koennen exportiert werden
1620 : 4 : break;
1621 : :
1622 : : default:
1623 : : // und diese nicht
1624 : 0 : return rWrt;
1625 : : }
1626 : :
1627 : : // den Selector und die auszugebende Attr-Set-Tiefe ermitteln
1628 [ + - ]: 4 : String aSelector;
1629 : 4 : sal_uInt16 nRefPoolId = 0;
1630 [ + - ]: 4 : sal_uInt16 nDeep = GetCSS1Selector( &rFmt, aSelector, nRefPoolId );
1631 [ + + ]: 4 : if( !nDeep )
1632 : 2 : return rWrt; // von keiner HTML-Vorlage abgeleitet
1633 : :
1634 : 2 : sal_uInt16 nPoolFmtId = rFmt.GetPoolFmtId();
1635 : :
1636 : : // Den auszugebenden Attr-Set bestimmen. Hier muessen 3 Faelle
1637 : : // unterschieden werden:
1638 : : // - HTML-Tag-Vorlagen (nDeep==USHRT_MAX):
1639 : : // Es werden die Attrs ausgegeben
1640 : : // - die in der Vorlage gesetzt sind, aber nicht im Original aus
1641 : : // der HTML-Vorlage
1642 : : // - die Default-Attrs fuer die Attrs, die im Original aus der
1643 : : // HTML-Vorlage gesetzt sind, aber nicht in der vorliegeden Vorlage.
1644 : : // - direkt von HTML-Vorlagen abgeleitete Vorlagen (nDeep==1):
1645 : : // Es weren nur die Attribute des Vorlagen-Item-Set ohne seine
1646 : : // Parents ausgegeben.
1647 : : // - indirekt von HTML-Tag-Vorlagen abgeleitete Vorlagen (nDeep>1)
1648 : : // Es werden die Attribute des Vorlagen-Item-Sets inkl. seiner Parents,
1649 : : // aber ohne die Attribute, die in der HTML-Tag-Vorlage gesetzt sind,
1650 : : // ausgegeben.
1651 : :
1652 : : // einen Item-Set mit allen Attributen aus der Vorlage anlegen
1653 : : // (ausser fuer nDeep==1)
1654 : 2 : const SfxItemSet& rFmtItemSet = rFmt.GetAttrSet();
1655 [ + - ]: 2 : SfxItemSet aItemSet( *rFmtItemSet.GetPool(), rFmtItemSet.GetRanges() );
1656 [ + - ]: 2 : aItemSet.Set( rFmtItemSet, sal_True ); // Was nDeep!=1 that is not working
1657 : : // for script dependent items buts should
1658 : : // not make a deifference for any other
1659 : :
1660 : 2 : sal_Bool bSetDefaults = sal_True, bClearSame = sal_True;
1661 : 2 : const SwFmt *pRefFmt = 0;
1662 : 2 : const SwFmt *pRefFmtScript = 0;
1663 [ + - - ]: 2 : switch( nDeep )
1664 : : {
1665 : : case CSS1_FMT_ISTAG:
1666 [ + - ][ + - ]: 2 : pRefFmt = SwHTMLWriter::GetTemplateFmt( nRefPoolId, pTemplate );
1667 : 2 : break;
1668 : : case CSS1_FMT_CMPREF:
1669 [ # # ]: 0 : pRefFmt = SwHTMLWriter::GetTemplateFmt( nRefPoolId, pDoc );
1670 [ # # ][ # # ]: 0 : pRefFmtScript = SwHTMLWriter::GetTemplateFmt( nRefPoolId, pTemplate );
1671 : 0 : bClearSame = sal_False;
1672 : 0 : break;
1673 : : default:
1674 : 0 : pRefFmt = SwHTMLWriter::GetParentFmt( rFmt, nDeep );
1675 [ # # ][ # # ]: 0 : pRefFmtScript = SwHTMLWriter::GetTemplateFmt( nRefPoolId, pTemplate );
1676 : 0 : bSetDefaults = sal_False;
1677 : 0 : break;
1678 : : }
1679 : :
1680 [ + - ]: 2 : if( pRefFmt )
1681 : : {
1682 : : // Den Item-Set der Referenz-Vorlage (inkl. seiner Parents) vom
1683 : : // ItemSet abziehen
1684 : 2 : SwHTMLWriter::SubtractItemSet( aItemSet, pRefFmt->GetAttrSet(),
1685 : : bSetDefaults, bClearSame,
1686 : : pRefFmtScript
1687 : : ? &pRefFmtScript->GetAttrSet()
1688 [ - + ][ + - ]: 4 : : 0 );
1689 : :
1690 [ + - ]: 2 : if( !bCharFmt )
1691 : : {
1692 [ + - ]: 2 : const SvxULSpaceItem& rULItem = pRefFmt->GetULSpace();
1693 : 2 : rHTMLWrt.nDfltTopMargin = rULItem.GetUpper();
1694 : 2 : rHTMLWrt.nDfltBottomMargin = rULItem.GetLower();
1695 : : }
1696 : : }
1697 [ # # ][ # # ]: 0 : else if( CSS1_FMT_ISTAG==nDeep && !bCharFmt )
1698 : : {
1699 : : // die Default-Abstaende nach oben und unten setzen (fuer den
1700 : : // Fall, dass es keine Vorlage als Referenz gibt)
1701 : 0 : rHTMLWrt.nDfltTopMargin = 0;
1702 : 0 : rHTMLWrt.nDfltBottomMargin = HTML_PARSPACE;
1703 [ # # ]: 0 : if( USER_FMT & nPoolFmtId )
1704 : : {
1705 : : // Benutzer-Vorlagen
1706 : 0 : const String& rNm = rFmt.GetName();
1707 [ # # # # : 0 : switch( rNm.GetChar(0) )
# ]
1708 : : {
1709 [ # # ][ # # ]: 0 : case 'D': if( rNm.EqualsAscii("DD 1") || rNm.EqualsAscii("DT 1") )
[ # # ][ # # ]
[ # # ]
1710 : 0 : rHTMLWrt.nDfltBottomMargin = 0;
1711 : 0 : break;
1712 [ # # ][ # # ]: 0 : case 'L': if(rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_listing) )
1713 : 0 : rHTMLWrt.nDfltBottomMargin = 0;
1714 : 0 : break;
1715 [ # # ][ # # ]: 0 : case 'P': if( rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_preformtxt) )
1716 : 0 : rHTMLWrt.nDfltBottomMargin = 0;
1717 : 0 : break;
1718 [ # # ][ # # ]: 0 : case 'X': if( rNm.EqualsAscii(OOO_STRING_SVTOOLS_HTML_xmp) )
1719 : 0 : rHTMLWrt.nDfltBottomMargin = 0;
1720 : 0 : break;
1721 : : }
1722 : : }
1723 : : else
1724 : : {
1725 : : // Pool-Vorlagen
1726 [ # # # ]: 0 : switch( nPoolFmtId )
1727 : : {
1728 : : case RES_POOLCOLL_HEADLINE1:
1729 : : case RES_POOLCOLL_HEADLINE2:
1730 : : case RES_POOLCOLL_HEADLINE3:
1731 : : case RES_POOLCOLL_HEADLINE4:
1732 : : case RES_POOLCOLL_HEADLINE5:
1733 : : case RES_POOLCOLL_HEADLINE6:
1734 : 0 : rHTMLWrt.nDfltTopMargin = HTML_HEADSPACE;
1735 : 0 : break;
1736 : : case RES_POOLCOLL_SENDADRESS:
1737 : : case RES_POOLCOLL_HTML_DT:
1738 : : case RES_POOLCOLL_HTML_DD:
1739 : : case RES_POOLCOLL_HTML_PRE:
1740 : 0 : rHTMLWrt.nDfltBottomMargin = 0;
1741 : 0 : break;
1742 : : }
1743 : : }
1744 : : }
1745 : :
1746 : : // wo nicht auszugeben ist ...
1747 [ + - ]: 2 : if( !aItemSet.Count() )
1748 : 2 : return rWrt;
1749 : :
1750 : : // There is no support for script dependent hyperlinks by now.
1751 : 0 : sal_Bool bCheckForPseudo = sal_False;
1752 [ # # ][ # # ]: 0 : if( bCharFmt &&
[ # # ]
1753 : : (RES_POOLCHR_INET_NORMAL==nRefPoolId ||
1754 : : RES_POOLCHR_INET_VISIT==nRefPoolId) )
1755 : 0 : bCheckForPseudo = sal_True;
1756 : :
1757 : :
1758 : : // jetzt die Attribute (inkl. Selektor) ausgeben
1759 : 0 : sal_Bool bHasScriptDependencies = sal_False;
1760 [ # # ]: 0 : if( OutCSS1Rule( rHTMLWrt, aSelector, aItemSet, CSS1_FMT_ISTAG != nDeep,
1761 [ # # ]: 0 : bCheckForPseudo ) )
1762 : : {
1763 [ # # ]: 0 : if( bCharFmt )
1764 [ # # ]: 0 : rHTMLWrt.aScriptTextStyles.insert( rFmt.GetName() );
1765 : : else
1766 : : {
1767 [ # # ]: 0 : if( nPoolFmtId==RES_POOLCOLL_TEXT )
1768 [ # # ][ # # ]: 0 : rHTMLWrt.aScriptParaStyles.insert( pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false )->GetName() );
1769 [ # # ]: 0 : rHTMLWrt.aScriptParaStyles.insert( rFmt.GetName() );
1770 : : }
1771 : 0 : bHasScriptDependencies = sal_True;
1772 : : }
1773 : :
1774 [ # # ][ # # ]: 0 : if( nPoolFmtId==RES_POOLCOLL_TEXT && !rHTMLWrt.bFirstCSS1Property )
1775 : 0 : rHTMLWrt.bPoolCollTextModified = sal_True;
1776 : :
1777 : : // Drop-Caps ausgeben
1778 : : const SfxPoolItem *pItem;
1779 [ # # ][ # # ]: 0 : if( SFX_ITEM_SET==aItemSet.GetItemState( RES_PARATR_DROP, sal_False, &pItem ))
1780 : : {
1781 [ # # ]: 0 : String sOut( aSelector );
1782 [ # # ]: 0 : sOut.Append( ':');
1783 [ # # ]: 0 : sOut.AppendAscii( sCSS1_first_letter );
1784 : 0 : const SwFmtDrop *pDrop = (const SwFmtDrop *)pItem;
1785 [ # # ][ # # ]: 0 : OutCSS1DropCapRule( rHTMLWrt, sOut, *pDrop, CSS1_FMT_ISTAG != nDeep, bHasScriptDependencies );
1786 : : }
1787 : :
1788 [ + - ][ + - ]: 4 : return rWrt;
1789 : : }
1790 : :
1791 : 2 : static Writer& OutCSS1_SwPageDesc( Writer& rWrt, const SwPageDesc& rPageDesc,
1792 : : IDocumentStylePoolAccess/*SwDoc*/ *pDoc, SwDoc *pTemplate,
1793 : : sal_uInt16 nRefPoolId, sal_Bool bExtRef,
1794 : : sal_Bool bPseudo )
1795 : : {
1796 : 2 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
1797 : :
1798 : 2 : const SwPageDesc* pRefPageDesc = 0;
1799 [ - + ]: 2 : if( !bExtRef )
1800 [ # # ]: 0 : pRefPageDesc = pDoc->GetPageDescFromPool( nRefPoolId, false );
1801 [ + - ]: 2 : else if( pTemplate )
1802 [ + - ]: 2 : pRefPageDesc = pTemplate->GetPageDescFromPool( nRefPoolId, false );
1803 : :
1804 [ + - ]: 2 : String aSelector = rtl::OUString('@');
1805 [ + - ]: 2 : aSelector.AppendAscii( sCSS1_page );
1806 : :
1807 [ - + ]: 2 : if( bPseudo )
1808 : : {
1809 : 0 : const sal_Char *pPseudo = 0;
1810 [ # # # # ]: 0 : switch( rPageDesc.GetPoolFmtId() )
1811 : : {
1812 : 0 : case RES_POOLPAGE_FIRST: pPseudo = sCSS1_first; break;
1813 : 0 : case RES_POOLPAGE_LEFT: pPseudo = sCSS1_left; break;
1814 : 0 : case RES_POOLPAGE_RIGHT: pPseudo = sCSS1_right; break;
1815 : : }
1816 [ # # ]: 0 : if( pPseudo )
1817 : : {
1818 [ # # ]: 0 : aSelector.Append( ':' );
1819 [ # # ]: 0 : aSelector.AppendAscii( pPseudo );
1820 : : }
1821 : : }
1822 : :
1823 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_RULE_ON|CSS1_OUTMODE_TEMPLATE,
1824 [ + - ]: 2 : sal_True, &aSelector );
1825 : :
1826 : : // Die Groesse: Wenn sie sich nur durch das Landscape-Flag unterscheidet,
1827 : : // wird nur Portrait oder Landscape exportiert. Sonst wird die Groesse
1828 : : // exportiert.
1829 [ + - ]: 2 : sal_Bool bRefLandscape = pRefPageDesc ? pRefPageDesc->GetLandscape() : sal_False;
1830 : 2 : Size aRefSz;
1831 [ + - ]: 2 : const Size& rSz = rPageDesc.GetMaster().GetFrmSize().GetSize();
1832 [ + - ]: 2 : if( pRefPageDesc )
1833 : : {
1834 [ + - ]: 2 : aRefSz = pRefPageDesc->GetMaster().GetFrmSize().GetSize();
1835 [ - + ]: 2 : if( bRefLandscape != rPageDesc.GetLandscape() )
1836 : : {
1837 : 0 : long nTmp = aRefSz.Height();
1838 : 0 : aRefSz.Height() = aRefSz.Width();
1839 : 0 : aRefSz.Width() = nTmp;
1840 : : }
1841 : : }
1842 : :
1843 : : // Boeser uebler Hack: Auf der Seiten-Tabpage gibt es leichte
1844 : : // Rundungsfehler bei der Seitengroesse. Unter anderem wegen bug
1845 : : // 25535 wird dummerweise auch noch immer Size-Item vom Dialog geputtet,
1846 : : // auch wenn man gar nichts geaendert hat. Folge: Sobald man einmal im
1847 : : // Seiten-Dialog war und ihn mit OK verlassen hat, bekommt man eine
1848 : : // neue Seitengroesse, die dann hier exportiert wuerde. Um das
1849 : : // vermeiden erlauben wir hier kleine Abweichungen.
1850 [ + - + - ]: 4 : if( Abs( rSz.Width() - aRefSz.Width() ) <= 2 &&
[ + - ]
1851 : 2 : Abs( rSz.Height() - aRefSz.Height() ) <= 2 )
1852 : : {
1853 [ - + ]: 2 : if( bRefLandscape != rPageDesc.GetLandscape() )
1854 : : {
1855 : : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_size,
1856 : 0 : rPageDesc.GetLandscape() ? sCSS1_PV_landscape
1857 [ # # ][ # # ]: 0 : : sCSS1_PV_portrait );
1858 : : }
1859 : : }
1860 : : else
1861 : : {
1862 : 0 : rtl::OStringBuffer sVal;
1863 [ # # ]: 0 : AddUnitPropertyValue(sVal, rSz.Width(), rHTMLWrt.GetCSS1Unit());
1864 [ # # ]: 0 : sVal.append(' ');
1865 [ # # ]: 0 : AddUnitPropertyValue(sVal, rSz.Height(), rHTMLWrt.GetCSS1Unit());
1866 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_size, sVal.makeStringAndClear());
1867 : : }
1868 : :
1869 : : // Die Abstand-Attribute koennen auf gwohnte Weise exportiert werden
1870 : 2 : const SwFrmFmt &rMaster = rPageDesc.GetMaster();
1871 : 2 : SfxItemSet aItemSet( *rMaster.GetAttrSet().GetPool(),
1872 [ + - ]: 2 : RES_LR_SPACE, RES_UL_SPACE );
1873 [ + - ]: 2 : aItemSet.Set( rMaster.GetAttrSet(), sal_True );
1874 : :
1875 [ + - ]: 2 : if( pRefPageDesc )
1876 : : {
1877 : : SwHTMLWriter::SubtractItemSet( aItemSet,
1878 : 2 : pRefPageDesc->GetMaster().GetAttrSet(),
1879 [ + - ]: 2 : sal_True );
1880 : : }
1881 : :
1882 [ + - ]: 2 : OutCSS1_SvxULSpace_SvxLRSpace( rWrt, aItemSet, sal_False );
1883 : :
1884 : : // Wenn fuer einen Pseudo-Selektor keine Property ausgegeben wurde, muessen
1885 : : // wir trotzdem etwas ausgeben, damit beim Import die entsprechende
1886 : : // Vorlage angelegt wird.
1887 [ + - ][ - + ]: 2 : if( rHTMLWrt.bFirstCSS1Property && bPseudo )
1888 : : {
1889 [ # # ]: 0 : rHTMLWrt.OutNewLine();
1890 [ # # ][ # # ]: 0 : rtl::OString sTmp(rtl::OUStringToOString(aSelector, rHTMLWrt.eDestEnc));
1891 [ # # ][ # # ]: 0 : rWrt.Strm() << sTmp.getStr() << " {";
[ # # ]
1892 : 0 : rHTMLWrt.bFirstCSS1Property = sal_False;
1893 : : }
1894 : :
1895 [ - + ]: 2 : if( !rHTMLWrt.bFirstCSS1Property )
1896 [ # # ][ # # ]: 0 : rWrt.Strm() << sCSS1_rule_end;
1897 : :
1898 [ + - ][ + - ]: 2 : return rWrt;
1899 : : }
1900 : :
1901 : 4 : static Writer& OutCSS1_SwFtnInfo( Writer& rWrt, const SwEndNoteInfo& rInfo,
1902 : : SwDoc *pDoc, sal_uInt16 nNotes, sal_Bool bEndNote )
1903 : : {
1904 : 4 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
1905 : :
1906 [ + - ]: 4 : String aSelector;
1907 : :
1908 [ - + ]: 4 : if( nNotes > 0 )
1909 : : {
1910 [ # # ]: 0 : aSelector.AssignAscii( OOO_STRING_SVTOOLS_HTML_anchor );
1911 [ # # ]: 0 : aSelector.Append( '.');
1912 : : aSelector.AppendAscii( bEndNote ? OOO_STRING_SVTOOLS_HTML_sdendnote_anc
1913 [ # # ][ # # ]: 0 : : OOO_STRING_SVTOOLS_HTML_sdfootnote_anc );
1914 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_RULE|CSS1_OUTMODE_TEMPLATE,
1915 [ # # ]: 0 : sal_True, &aSelector );
1916 : : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_font_size,
1917 [ # # ]: 0 : sHTML_FTN_fontheight );
1918 [ # # ][ # # ]: 0 : rHTMLWrt.Strm() << sCSS1_rule_end;
1919 : : }
1920 : :
1921 [ + - ]: 4 : const SwCharFmt *pSymCharFmt = rInfo.GetCharFmt( *pDoc );
1922 [ + - ]: 4 : if( pSymCharFmt )
1923 : : {
1924 : 4 : const SfxItemSet& rFmtItemSet = pSymCharFmt->GetAttrSet();
1925 [ + - ]: 4 : SfxItemSet aItemSet( *rFmtItemSet.GetPool(), rFmtItemSet.GetRanges() );
1926 [ + - ]: 4 : aItemSet.Set( rFmtItemSet, sal_True );
1927 : :
1928 : : // Wenn es Fuss- bzw. Endnoten gibt, dann muessen alles Attribute
1929 : : // ausgegeben werden, damit Netscape das Dokument richtig anzeigt.
1930 : : // Anderenfalls genuegt es, die Unterschiede zur Fuss-/Endnoten
1931 : : // Vorlage rauszuschreiben.
1932 [ + - ][ + - ]: 4 : if( nNotes == 0 && rHTMLWrt.pTemplate )
1933 : : {
1934 : : SwFmt *pRefFmt = rHTMLWrt.pTemplate->GetCharFmtFromPool(
1935 [ + + ][ + - ]: 4 : static_cast< sal_uInt16 >(bEndNote ? RES_POOLCHR_ENDNOTE : RES_POOLCHR_FOOTNOTE) );
1936 [ + - ]: 4 : if( pRefFmt )
1937 : 4 : SwHTMLWriter::SubtractItemSet( aItemSet, pRefFmt->GetAttrSet(),
1938 [ + - ]: 4 : sal_True );
1939 : : }
1940 [ - + ]: 4 : if( aItemSet.Count() )
1941 : : {
1942 [ # # ]: 0 : aSelector.AssignAscii( OOO_STRING_SVTOOLS_HTML_anchor );
1943 [ # # ]: 0 : aSelector.Append( '.');
1944 : : aSelector.AppendAscii( bEndNote ? OOO_STRING_SVTOOLS_HTML_sdendnote_sym
1945 [ # # ][ # # ]: 0 : : OOO_STRING_SVTOOLS_HTML_sdfootnote_sym );
1946 [ # # ][ # # ]: 0 : if( OutCSS1Rule( rHTMLWrt, aSelector, aItemSet, sal_True, sal_False ))
1947 [ # # ]: 0 : rHTMLWrt.aScriptTextStyles.insert( pSymCharFmt->GetName() );
1948 [ + - ]: 4 : }
1949 : : }
1950 : :
1951 [ + - ]: 4 : return rWrt;
1952 : : }
1953 : :
1954 : 2 : Writer& OutCSS1_BodyTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet,
1955 : : String aEmbBGGrfName )
1956 : : {
1957 : 2 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
1958 : :
1959 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_STYLE_OPT_ON |
1960 [ + - ]: 2 : CSS1_OUTMODE_ENCODE|CSS1_OUTMODE_BODY );
1961 : :
1962 : :
1963 : : // Es werden nur die Attribute der Seiten-Vorlage ausgegeben.
1964 : : // Die Attribute der Standard-Absatz-Vorlage werden schon beim
1965 : : // Export der Absatz-Vorlagen beruecksichtigt.
1966 : :
1967 : : const SfxPoolItem *pItem;
1968 [ - + ]: 2 : if( SFX_ITEM_SET == rItemSet.GetItemState( RES_BACKGROUND, sal_False,
1969 [ + - ]: 2 : &pItem ) )
1970 : : {
1971 : : OutCSS1_SvxBrush( rWrt, *pItem, CSS1_BACKGROUND_PAGE,
1972 [ # # ]: 0 : &aEmbBGGrfName );
1973 : : }
1974 : :
1975 [ - + ]: 2 : if( SFX_ITEM_SET == rItemSet.GetItemState( RES_BOX, sal_False,
1976 [ + - ]: 2 : &pItem ))
1977 : : {
1978 [ # # ]: 0 : OutCSS1_SvxBox( rWrt, *pItem );
1979 : : }
1980 : :
1981 [ - + ]: 2 : if( !rHTMLWrt.bFirstCSS1Property )
1982 : : {
1983 : : // wenn eine Property als Bestandteil einer Style-Option
1984 : : // ausgegeben wurde, muss die Optiomn noch beendet werden
1985 [ # # ][ # # ]: 0 : rWrt.Strm() << '\"';
1986 : : }
1987 : :
1988 : 2 : return rWrt;
1989 : : }
1990 : :
1991 : 2 : Writer& OutCSS1_ParaTagStyleOpt( Writer& rWrt, const SfxItemSet& rItemSet )
1992 : : {
1993 : 2 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
1994 : :
1995 : : SwCSS1OutMode aMode( rHTMLWrt, rHTMLWrt.nCSS1Script|CSS1_OUTMODE_STYLE_OPT |
1996 [ + - ]: 2 : CSS1_OUTMODE_ENCODE|CSS1_OUTMODE_PARA );
1997 [ + - ]: 2 : rHTMLWrt.OutCSS1_SfxItemSet( rItemSet, sal_False );
1998 : :
1999 : 2 : return rWrt;
2000 : : }
2001 : :
2002 : 0 : Writer& OutCSS1_HintSpanTag( Writer& rWrt, const SfxPoolItem& rHt )
2003 : : {
2004 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2005 : :
2006 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_SPAN_TAG |
2007 [ # # ]: 0 : CSS1_OUTMODE_ENCODE|CSS1_OUTMODE_HINT );
2008 : :
2009 [ # # ]: 0 : Out( aCSS1AttrFnTab, rHt, rWrt );
2010 : :
2011 [ # # ][ # # ]: 0 : if( !rHTMLWrt.bFirstCSS1Property && rHTMLWrt.bTagOn )
2012 [ # # ][ # # ]: 0 : rWrt.Strm() << sCSS1_span_tag_end;
2013 : :
2014 : 0 : return rWrt;
2015 : : }
2016 : :
2017 : 0 : Writer& OutCSS1_HintStyleOpt( Writer& rWrt, const SfxPoolItem& rHt )
2018 : : {
2019 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2020 : :
2021 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_STYLE_OPT_ON |
2022 : : CSS1_OUTMODE_ENCODE|
2023 [ # # ]: 0 : CSS1_OUTMODE_HINT );
2024 : :
2025 [ # # ]: 0 : Out( aCSS1AttrFnTab, rHt, rWrt );
2026 : :
2027 [ # # ]: 0 : if( !rHTMLWrt.bFirstCSS1Property )
2028 [ # # ][ # # ]: 0 : rWrt.Strm() << '\"';
2029 : :
2030 : 0 : return rWrt;
2031 : : }
2032 : :
2033 : : // Wrapper fuer die Ausgabe von Tabellen-Hintergruenden
2034 : 0 : Writer& OutCSS1_TableBGStyleOpt( Writer& rWrt, const SfxPoolItem& rHt )
2035 : : {
2036 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2037 : :
2038 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_STYLE_OPT_ON |
2039 : : CSS1_OUTMODE_ENCODE|
2040 [ # # ]: 0 : CSS1_OUTMODE_TABLEBOX );
2041 [ # # ]: 0 : OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_TABLE, 0 );
2042 : :
2043 [ # # ]: 0 : if( !rHTMLWrt.bFirstCSS1Property )
2044 [ # # ][ # # ]: 0 : rWrt.Strm() << '\"';
2045 : :
2046 : 0 : return rWrt;
2047 : : }
2048 : :
2049 : :
2050 : 0 : Writer& OutCSS1_NumBulListStyleOpt( Writer& rWrt, const SwNumRule& rNumRule,
2051 : : sal_uInt8 nLevel )
2052 : : {
2053 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2054 : :
2055 : : SwCSS1OutMode aMode( rHTMLWrt, CSS1_OUTMODE_STYLE_OPT |
2056 [ # # ]: 0 : CSS1_OUTMODE_ENCODE|CSS1_OUTMODE_PARA );
2057 : :
2058 [ # # ]: 0 : const SwNumFmt& rNumFmt = rNumRule.Get( nLevel );
2059 : :
2060 [ # # ]: 0 : long nLSpace = rNumFmt.GetAbsLSpace();
2061 [ # # ]: 0 : long nFirstLineOffset = rNumFmt.GetFirstLineOffset();
2062 : 0 : long nDfltFirstLineOffset = HTML_NUMBUL_INDENT;
2063 [ # # ]: 0 : if( nLevel > 0 )
2064 : : {
2065 [ # # ]: 0 : const SwNumFmt& rPrevNumFmt = rNumRule.Get( nLevel-1 );
2066 [ # # ]: 0 : nLSpace -= rPrevNumFmt.GetAbsLSpace();
2067 [ # # ]: 0 : nDfltFirstLineOffset = rPrevNumFmt.GetFirstLineOffset();
2068 : : }
2069 : :
2070 [ # # ][ # # ]: 0 : if( rHTMLWrt.IsHTMLMode(HTMLMODE_LSPACE_IN_NUMBUL) &&
[ # # ]
2071 : : nLSpace != HTML_NUMBUL_MARGINLEFT )
2072 [ # # ]: 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_margin_left, nLSpace );
2073 : :
2074 [ # # ][ # # ]: 0 : if( rHTMLWrt.IsHTMLMode(HTMLMODE_FRSTLINE_IN_NUMBUL) &&
[ # # ]
2075 : : nFirstLineOffset != nDfltFirstLineOffset )
2076 [ # # ]: 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_text_indent, nFirstLineOffset );
2077 : :
2078 [ # # ]: 0 : if( !rHTMLWrt.bFirstCSS1Property )
2079 [ # # ][ # # ]: 0 : rWrt.Strm() << '\"';
2080 : :
2081 : 0 : return rWrt;
2082 : : }
2083 : :
2084 : : //-----------------------------------------------------------------------
2085 : :
2086 : 0 : void SwHTMLWriter::OutCSS1_FrmFmtOptions( const SwFrmFmt& rFrmFmt,
2087 : : sal_uInt32 nFrmOpts,
2088 : : const SdrObject *pSdrObj,
2089 : : const SfxItemSet *pItemSet )
2090 : : {
2091 : : SwCSS1OutMode aMode( *this, CSS1_OUTMODE_STYLE_OPT_ON |
2092 : : CSS1_OUTMODE_ENCODE|
2093 [ # # ]: 0 : CSS1_OUTMODE_FRAME );
2094 : :
2095 [ # # ]: 0 : const SwFmtHoriOrient& rHoriOri = rFrmFmt.GetHoriOrient();
2096 [ # # ][ # # ]: 0 : SvxLRSpaceItem aLRItem( rFrmFmt.GetLRSpace() );
2097 [ # # ][ # # ]: 0 : SvxULSpaceItem aULItem( rFrmFmt.GetULSpace() );
2098 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_ALIGN )
2099 : : {
2100 [ # # ]: 0 : const SwFmtAnchor& rAnchor = rFrmFmt.GetAnchor();
2101 [ # # # ]: 0 : switch( rAnchor.GetAnchorId() )
2102 : : {
2103 : : case FLY_AT_PARA:
2104 : : case FLY_AT_CHAR:
2105 [ # # # # ]: 0 : if( text::RelOrientation::FRAME == rHoriOri.GetRelationOrient() ||
[ # # ]
2106 : 0 : text::RelOrientation::PRINT_AREA == rHoriOri.GetRelationOrient() )
2107 : : {
2108 [ # # ]: 0 : if( !(nFrmOpts & HTML_FRMOPT_ALIGN) )
2109 : : {
2110 : : // float
2111 : 0 : const sal_Char *pStr = text::HoriOrientation::RIGHT==rHoriOri.GetHoriOrient()
2112 : : ? sCSS1_PV_right
2113 [ # # ]: 0 : : sCSS1_PV_left;
2114 [ # # ]: 0 : OutCSS1_PropertyAscii( sCSS1_P_float, pStr );
2115 : : }
2116 : 0 : break;
2117 : : }
2118 : :
2119 : : case FLY_AT_PAGE:
2120 : : case FLY_AT_FLY:
2121 : : {
2122 : : // position
2123 [ # # ]: 0 : OutCSS1_PropertyAscii( sCSS1_P_position, sCSS1_PV_absolute );
2124 : :
2125 : : // Fuer top/left muessen die Abstaende des Rahmens von
2126 : : // der Position abgezogen werden, da sie in CSS1 noch
2127 : : // zur Position addiert werden.
2128 : : // Das funktioniert auch fuer automatisch ausgerichtete
2129 : : // Rahmen, obwohl der Abstand da ja auch im Writer noch
2130 : : // addiert wird. Denn auch in diesem Fall enthalten
2131 : : // die Orient-Attribute die korrekte Position
2132 : :
2133 : : // top
2134 : 0 : long nXPos=0, nYPos=0;
2135 : 0 : sal_Bool bOutXPos = sal_False, bOutYPos = sal_False;
2136 [ # # ]: 0 : if( RES_DRAWFRMFMT == rFrmFmt.Which() )
2137 : : {
2138 : : OSL_ENSURE( pSdrObj, "Kein SdrObject uebergeben. Ineffizient" );
2139 [ # # ]: 0 : if( !pSdrObj )
2140 [ # # ]: 0 : pSdrObj = rFrmFmt.FindSdrObject();
2141 : : OSL_ENSURE( pSdrObj, "Wo ist das SdrObject" );
2142 [ # # ]: 0 : if( pSdrObj )
2143 : : {
2144 [ # # ]: 0 : Point aPos( pSdrObj->GetRelativePos() );
2145 : 0 : nXPos = aPos.A();
2146 : 0 : nYPos = aPos.B();
2147 : : }
2148 : 0 : bOutXPos = bOutYPos = sal_True;
2149 : : }
2150 : : else
2151 : : {
2152 : 0 : bOutXPos = text::RelOrientation::CHAR != rHoriOri.GetRelationOrient();
2153 : 0 : nXPos = text::HoriOrientation::NONE == rHoriOri.GetHoriOrient()
2154 [ # # ]: 0 : ? rHoriOri.GetPos() : 0;
2155 : :
2156 [ # # ]: 0 : const SwFmtVertOrient& rVertOri = rFrmFmt.GetVertOrient();
2157 : 0 : bOutYPos = text::RelOrientation::CHAR != rVertOri.GetRelationOrient();
2158 : 0 : nYPos = text::VertOrientation::NONE == rVertOri.GetVertOrient()
2159 [ # # ]: 0 : ? rVertOri.GetPos() : 0;
2160 : : }
2161 : :
2162 [ # # ]: 0 : if( bOutYPos )
2163 : : {
2164 [ # # ]: 0 : if( IsHTMLMode( HTMLMODE_FLY_MARGINS) )
2165 : : {
2166 : 0 : nYPos -= aULItem.GetUpper();
2167 [ # # ]: 0 : if( nYPos < 0 )
2168 : : {
2169 : 0 : aULItem.SetUpper( (sal_uInt16)(aULItem.GetUpper() + nYPos) );
2170 : 0 : nYPos = 0;
2171 : : }
2172 : : }
2173 : :
2174 [ # # ]: 0 : OutCSS1_UnitProperty( sCSS1_P_top, nYPos );
2175 : : }
2176 : :
2177 [ # # ]: 0 : if( bOutXPos )
2178 : : {
2179 : : // left
2180 [ # # ]: 0 : if( IsHTMLMode( HTMLMODE_FLY_MARGINS) )
2181 : : {
2182 : 0 : nXPos -= aLRItem.GetLeft();
2183 [ # # ]: 0 : if( nXPos < 0 )
2184 : : {
2185 : 0 : aLRItem.SetLeft( (sal_uInt16)(aLRItem.GetLeft() + nXPos) );
2186 : 0 : nXPos = 0;
2187 : : }
2188 : : }
2189 : :
2190 [ # # ]: 0 : OutCSS1_UnitProperty( sCSS1_P_left, nXPos );
2191 : : }
2192 : : }
2193 : 0 : break;
2194 : :
2195 : : default:
2196 : : ;
2197 : : }
2198 : : }
2199 : :
2200 : : // width/height
2201 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_SIZE )
2202 : : {
2203 [ # # ]: 0 : if( RES_DRAWFRMFMT == rFrmFmt.Which() )
2204 : : {
2205 : : OSL_ENSURE( pSdrObj, "Kein SdrObject uebergeben. Ineffizient" );
2206 [ # # ]: 0 : if( !pSdrObj )
2207 [ # # ]: 0 : pSdrObj = rFrmFmt.FindSdrObject();
2208 : : OSL_ENSURE( pSdrObj, "Wo ist das SdrObject" );
2209 [ # # ]: 0 : if( pSdrObj )
2210 : : {
2211 [ # # ][ # # ]: 0 : Size aTwipSz( pSdrObj->GetLogicRect().GetSize() );
2212 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_WIDTH )
2213 : : {
2214 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_PIXSIZE )
2215 : 0 : OutCSS1_PixelProperty( sCSS1_P_width, aTwipSz.Width(),
2216 [ # # ]: 0 : sal_False );
2217 : : else
2218 [ # # ]: 0 : OutCSS1_UnitProperty( sCSS1_P_width, aTwipSz.Width() );
2219 : : }
2220 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_HEIGHT )
2221 : : {
2222 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_PIXSIZE )
2223 : 0 : OutCSS1_PixelProperty( sCSS1_P_height, aTwipSz.Height(),
2224 [ # # ]: 0 : sal_True );
2225 : : else
2226 [ # # ]: 0 : OutCSS1_UnitProperty( sCSS1_P_height, aTwipSz.Height() );
2227 : : }
2228 : : }
2229 : : }
2230 : : else
2231 : : {
2232 : : OSL_ENSURE( HTML_FRMOPT_ABSSIZE & nFrmOpts,
2233 : : "Absolute Groesse wird exportiert" );
2234 : : OSL_ENSURE( HTML_FRMOPT_ANYSIZE & nFrmOpts,
2235 : : "Jede Groesse wird exportiert" );
2236 : 0 : sal_uInt16 nMode = 0;
2237 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_WIDTH )
2238 : 0 : nMode |= CSS1_FRMSIZE_WIDTH;
2239 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_HEIGHT )
2240 : 0 : nMode |= (CSS1_FRMSIZE_MINHEIGHT|CSS1_FRMSIZE_FIXHEIGHT);
2241 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_PIXSIZE )
2242 : 0 : nMode |= CSS1_FRMSIZE_PIXEL;
2243 : :
2244 [ # # ][ # # ]: 0 : OutCSS1_SwFmtFrmSize( *this, rFrmFmt.GetFrmSize(), nMode );
2245 : : }
2246 : : }
2247 : :
2248 : 0 : const SfxItemSet& rItemSet = rFrmFmt.GetAttrSet();
2249 : : // margin-*
2250 [ # # ]: 0 : if( (nFrmOpts & HTML_FRMOPT_S_SPACE) &&
[ # # # # ]
2251 : 0 : IsHTMLMode( HTMLMODE_FLY_MARGINS) )
2252 : : {
2253 : 0 : const SvxLRSpaceItem *pLRItem = 0;
2254 : 0 : const SvxULSpaceItem *pULItem = 0;
2255 [ # # ][ # # ]: 0 : if( SFX_ITEM_SET == rItemSet.GetItemState( RES_LR_SPACE, sal_True ) )
2256 : 0 : pLRItem = &aLRItem;
2257 [ # # ][ # # ]: 0 : if( SFX_ITEM_SET == rItemSet.GetItemState( RES_UL_SPACE, sal_True ) )
2258 : 0 : pULItem = &aULItem;
2259 [ # # ][ # # ]: 0 : if( pLRItem || pULItem )
2260 [ # # ]: 0 : OutCSS1_SvxULSpace_SvxLRSpace( *this, pULItem, pLRItem );
2261 : : }
2262 : :
2263 : : // border
2264 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_BORDER )
2265 : : {
2266 : : const SfxPoolItem* pItem;
2267 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_NOBORDER )
2268 [ # # ][ # # ]: 0 : OutCSS1_SvxBox( *this, rFrmFmt.GetBox() );
2269 [ # # ][ # # ]: 0 : else if( SFX_ITEM_SET==rItemSet.GetItemState( RES_BOX, sal_True, &pItem ) )
2270 [ # # ]: 0 : OutCSS1_SvxBox( *this, *pItem );
2271 : : }
2272 : :
2273 : : // background (wenn, dann muss auch eine Farbe ausgegeben werden)
2274 [ # # ]: 0 : if( nFrmOpts & HTML_FRMOPT_S_BACKGROUND )
2275 [ # # ]: 0 : OutCSS1_FrmFmtBackground( rFrmFmt );
2276 : :
2277 [ # # ]: 0 : if( pItemSet )
2278 [ # # ]: 0 : OutCSS1_SfxItemSet( *pItemSet, sal_False );
2279 : :
2280 [ # # ]: 0 : if( !bFirstCSS1Property )
2281 [ # # ][ # # ]: 0 : Strm() << '\"';
[ # # ][ # # ]
2282 : 0 : }
2283 : :
2284 : 0 : void SwHTMLWriter::OutCSS1_TableFrmFmtOptions( const SwFrmFmt& rFrmFmt )
2285 : : {
2286 : : SwCSS1OutMode aMode( *this, CSS1_OUTMODE_STYLE_OPT_ON |
2287 : : CSS1_OUTMODE_ENCODE|
2288 [ # # ]: 0 : CSS1_OUTMODE_TABLE );
2289 : :
2290 : : const SfxPoolItem *pItem;
2291 : 0 : const SfxItemSet& rItemSet = rFrmFmt.GetAttrSet();
2292 [ # # ][ # # ]: 0 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_BACKGROUND, sal_False, &pItem ) )
2293 [ # # ]: 0 : OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_TABLE, 0 );
2294 : :
2295 [ # # ]: 0 : if( IsHTMLMode( HTMLMODE_PRINT_EXT ) )
2296 [ # # ]: 0 : OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( *this, rItemSet, sal_False );
2297 : :
2298 [ # # ][ # # ]: 0 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_LAYOUT_SPLIT, sal_False, &pItem ) )
2299 [ # # ]: 0 : OutCSS1_SwFmtLayoutSplit( *this, *pItem );
2300 : :
2301 [ # # ]: 0 : if( !bFirstCSS1Property )
2302 [ # # ][ # # ]: 0 : Strm() << '\"';
2303 : 0 : }
2304 : :
2305 : 0 : void SwHTMLWriter::OutCSS1_TableCellBorderHack(SwFrmFmt const& rFrmFmt)
2306 : : {
2307 : : SwCSS1OutMode const aMode(*this,
2308 : : CSS1_OUTMODE_STYLE_OPT_ON|CSS1_OUTMODE_ENCODE|CSS1_OUTMODE_TABLEBOX,
2309 [ # # ]: 0 : true, 0);
2310 [ # # ][ # # ]: 0 : OutCSS1_SvxBox(*this, rFrmFmt.GetBox());
2311 [ # # ]: 0 : if (!bFirstCSS1Property)
2312 : : {
2313 [ # # ][ # # ]: 0 : this->Strm() << cCSS1_style_opt_end;
2314 : 0 : }
2315 : 0 : }
2316 : :
2317 : 0 : void SwHTMLWriter::OutCSS1_SectionFmtOptions( const SwFrmFmt& rFrmFmt )
2318 : : {
2319 : : SwCSS1OutMode aMode( *this, CSS1_OUTMODE_STYLE_OPT_ON |
2320 : : CSS1_OUTMODE_ENCODE|
2321 [ # # ]: 0 : CSS1_OUTMODE_SECTION );
2322 : :
2323 : : const SfxPoolItem *pItem;
2324 : 0 : const SfxItemSet& rItemSet = rFrmFmt.GetAttrSet();
2325 [ # # ][ # # ]: 0 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_BACKGROUND, sal_False, &pItem ) )
2326 [ # # ]: 0 : OutCSS1_SvxBrush( *this, *pItem, CSS1_BACKGROUND_SECTION, 0 );
2327 : :
2328 [ # # ]: 0 : if( !bFirstCSS1Property )
2329 [ # # ][ # # ]: 0 : Strm() << '\"';
2330 : 0 : }
2331 : :
2332 : 0 : static sal_Bool OutCSS1_FrmFmtBrush( SwHTMLWriter& rWrt,
2333 : : const SvxBrushItem& rBrushItem )
2334 : : {
2335 : 0 : sal_Bool bWritten = sal_False;
2336 : : /// output brush of frame format, if its background color is not "no fill"/"auto fill"
2337 : : /// or it has a background graphic.
2338 [ # # # # : 0 : if( rBrushItem.GetColor() != COL_TRANSPARENT ||
# # ][ # # ]
[ # # ]
2339 : 0 : 0 != rBrushItem.GetGraphicLink() ||
2340 : 0 : 0 != rBrushItem.GetGraphicPos() )
2341 : : {
2342 : 0 : OutCSS1_SvxBrush( rWrt, rBrushItem, CSS1_BACKGROUND_FLY, 0 );
2343 : 0 : bWritten = sal_True;
2344 : : }
2345 : 0 : return bWritten;
2346 : : }
2347 : :
2348 : 0 : void SwHTMLWriter::OutCSS1_FrmFmtBackground( const SwFrmFmt& rFrmFmt )
2349 : : {
2350 : : // Wenn der Rahmen selbst einen Hintergrund hat, wird der ausgegeben.
2351 [ # # ]: 0 : if( OutCSS1_FrmFmtBrush( *this, rFrmFmt.GetBackground() ) )
2352 : 0 : return;
2353 : :
2354 : : // Wenn der Rahmen nicht seitengebunden ist, wird sonst muss der
2355 : : // Hintergrund vom Anker betrachtet
2356 : 0 : const SwFmtAnchor& rAnchor = rFrmFmt.GetAnchor();
2357 : 0 : RndStdIds eAnchorId = rAnchor.GetAnchorId();
2358 : 0 : const SwPosition *pAnchorPos = rAnchor.GetCntntAnchor();
2359 [ # # ][ # # ]: 0 : if (FLY_AT_PAGE != eAnchorId && pAnchorPos)
2360 : : {
2361 : 0 : const SwNode& rNode = pAnchorPos->nNode.GetNode();
2362 [ # # ]: 0 : if( rNode.IsCntntNode() )
2363 : : {
2364 : : // Wenn der Rahmen in einem Content-Node verankert ist,
2365 : : // wird der Hintergrund von Content-Node ausgegeben, wenn
2366 : : // der einen hat.
2367 [ # # ]: 0 : if( OutCSS1_FrmFmtBrush( *this,
2368 : 0 : rNode.GetCntntNode()->GetSwAttrSet().GetBackground()) )
2369 : 0 : return;
2370 : :
2371 : : // Sonst koennen wir evtl. auch in einer Tabelle stehen
2372 : 0 : const SwTableNode *pTableNd = rNode.FindTableNode();
2373 [ # # ]: 0 : if( pTableNd )
2374 : : {
2375 : 0 : const SwStartNode *pBoxSttNd = rNode.FindTableBoxStartNode();
2376 : : const SwTableBox *pBox =
2377 : 0 : pTableNd->GetTable().GetTblBox( pBoxSttNd->GetIndex() );
2378 : :
2379 : : // Wenn die Box einen Hintergrund hat, nehmen wir den.
2380 [ # # ]: 0 : if( OutCSS1_FrmFmtBrush( *this,
2381 : 0 : pBox->GetFrmFmt()->GetBackground() ) )
2382 : 0 : return;
2383 : :
2384 : : // Sonst betrachten wir den der Lines
2385 : 0 : const SwTableLine *pLine = pBox->GetUpper();
2386 [ # # ]: 0 : while( pLine )
2387 : : {
2388 [ # # ]: 0 : if( OutCSS1_FrmFmtBrush( *this,
2389 : 0 : pLine->GetFrmFmt()->GetBackground() ) )
2390 : 0 : return;
2391 : 0 : pBox = pLine->GetUpper();
2392 [ # # ]: 0 : pLine = pBox ? pBox->GetUpper() : 0;
2393 : : }
2394 : :
2395 : : // Wenn da auch nichts war den der Tabelle.
2396 [ # # ]: 0 : if( OutCSS1_FrmFmtBrush( *this,
2397 : 0 : pTableNd->GetTable().GetFrmFmt()->GetBackground() ) )
2398 : 0 : return;
2399 : : }
2400 : :
2401 : : }
2402 : :
2403 : : // Wenn der Anker wieder in einem Fly-Frame steht, dann
2404 : : // wird der Hintergrund des Fly-Frames ausgegeben.
2405 : 0 : const SwFrmFmt *pFrmFmt = rNode.GetFlyFmt();
2406 [ # # ]: 0 : if( pFrmFmt )
2407 : : {
2408 : 0 : OutCSS1_FrmFmtBackground( *pFrmFmt );
2409 : 0 : return;
2410 : : }
2411 : : }
2412 : :
2413 : : // Schliesslich bleibt noch der Hintergrund der Seite uebrig und als
2414 : : // letzte Rettung das Item der Config.
2415 : : OSL_ENSURE( pCurrPageDesc, "Keine Seiten-Vorlage gemerkt" );
2416 [ # # ]: 0 : if( !OutCSS1_FrmFmtBrush( *this,
2417 : 0 : pCurrPageDesc->GetMaster().GetBackground() ) )
2418 : : {
2419 : 0 : Color aColor( COL_WHITE );
2420 : :
2421 : : // Die Hintergrund-Farbe wird normalerweise nur in Browse-Mode
2422 : : // benutzt. Wir benutzen si bei einem HTML-Dokument immer und
2423 : : // bei einem Text-Dokument nur, wenn es im Browse-Mode angezeigt
2424 : : // wird.
2425 [ # # ][ # # ]: 0 : if( pDoc->get(IDocumentSettingAccess::HTML_MODE) ||
[ # # ][ # # ]
2426 [ # # ]: 0 : pDoc->get(IDocumentSettingAccess::BROWSE_MODE))
2427 : : {
2428 : 0 : ViewShell *pVSh = 0;
2429 [ # # ]: 0 : pDoc->GetEditShell( &pVSh );
2430 [ # # # # ]: 0 : if ( pVSh &&
[ # # ]
2431 : 0 : COL_TRANSPARENT != pVSh->GetViewOptions()->GetRetoucheColor().GetColor())
2432 : 0 : aColor = pVSh->GetViewOptions()->GetRetoucheColor().GetColor();
2433 : : }
2434 : :
2435 [ # # ][ # # ]: 0 : OutCSS1_PropertyAscii(sCSS1_P_background, GetCSS1Color(aColor));
2436 : : }
2437 : : }
2438 : :
2439 : : //-----------------------------------------------------------------------
2440 : :
2441 : 0 : static Writer& OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( Writer& rWrt,
2442 : : const SvxUnderlineItem *pUItem,
2443 : : const SvxOverlineItem *pOItem,
2444 : : const SvxCrossedOutItem *pCOItem,
2445 : : const SvxBlinkItem *pBItem )
2446 : : {
2447 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2448 : 0 : sal_Bool bNone = sal_False;
2449 : :
2450 : 0 : const sal_Char *pUStr = 0;
2451 [ # # ]: 0 : if( pUItem )
2452 : : {
2453 [ # # # ]: 0 : switch( pUItem->GetLineStyle() )
2454 : : {
2455 : : case UNDERLINE_NONE:
2456 : 0 : bNone = sal_True;
2457 : 0 : break;
2458 : : case UNDERLINE_DONTKNOW:
2459 : 0 : break;
2460 : : default:
2461 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2462 : : {
2463 : : // das geht auch in HTML und muss nicht als STYLE-Option
2464 : : // und darf nicht als Hint geschrieben werden
2465 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2466 : : "Underline als Hint schreiben?" );
2467 : 0 : pUStr = sCSS1_PV_underline;
2468 : : }
2469 : 0 : break;
2470 : : }
2471 : : }
2472 : :
2473 : 0 : const sal_Char *pOStr = 0;
2474 [ # # ]: 0 : if( pOItem )
2475 : : {
2476 [ # # # ]: 0 : switch( pOItem->GetLineStyle() )
2477 : : {
2478 : : case UNDERLINE_NONE:
2479 : 0 : bNone = sal_True;
2480 : 0 : break;
2481 : : case UNDERLINE_DONTKNOW:
2482 : 0 : break;
2483 : : default:
2484 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2485 : : {
2486 : : // das geht auch in HTML und muss nicht als STYLE-Option
2487 : : // und darf nicht als Hint geschrieben werden
2488 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2489 : : "Overline als Hint schreiben?" );
2490 : 0 : pOStr = sCSS1_PV_overline;
2491 : : }
2492 : 0 : break;
2493 : : }
2494 : : }
2495 : :
2496 : 0 : const sal_Char *pCOStr = 0;
2497 [ # # ]: 0 : if( pCOItem )
2498 : : {
2499 [ # # # ]: 0 : switch( pCOItem->GetStrikeout() )
2500 : : {
2501 : : case STRIKEOUT_NONE:
2502 : 0 : bNone = sal_True;
2503 : 0 : break;
2504 : : case STRIKEOUT_DONTKNOW:
2505 : 0 : break;
2506 : : default:
2507 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2508 : : {
2509 : : // das geht auch in HTML und muss nicht als STYLE-Option
2510 : : // und darf nicht als Hint geschrieben werden
2511 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2512 : : "CrossedOut als Hint schreiben?" );
2513 : 0 : pCOStr = sCSS1_PV_line_through;
2514 : : }
2515 : 0 : break;
2516 : : }
2517 : : }
2518 : :
2519 : 0 : const sal_Char *pBStr = 0;
2520 [ # # ]: 0 : if( pBItem )
2521 : : {
2522 [ # # ]: 0 : if( !pBItem->GetValue() )
2523 : : {
2524 : 0 : bNone = sal_True;
2525 : : }
2526 [ # # ]: 0 : else if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2527 : : {
2528 : : // das geht auch in HTML und muss nicht als STYLE-Option
2529 : : // und darf nicht als Hint geschrieben werden
2530 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2531 : : "Blink als Hint schreiben?" );
2532 : 0 : pBStr = sCSS1_PV_blink;
2533 : : }
2534 : : }
2535 : :
2536 : 0 : rtl::OStringBuffer sOut;
2537 [ # # ]: 0 : if( pUStr )
2538 [ # # ]: 0 : sOut.append(pUStr);
2539 : :
2540 [ # # ]: 0 : if( pOStr )
2541 : : {
2542 [ # # ]: 0 : if (sOut.getLength())
2543 [ # # ]: 0 : sOut.append(' ');
2544 [ # # ]: 0 : sOut.append(pOStr);
2545 : : }
2546 : :
2547 [ # # ]: 0 : if( pCOStr )
2548 : : {
2549 [ # # ]: 0 : if (sOut.getLength())
2550 [ # # ]: 0 : sOut.append(' ');
2551 [ # # ]: 0 : sOut.append(pCOStr);
2552 : : }
2553 : :
2554 [ # # ]: 0 : if( pBStr )
2555 : : {
2556 [ # # ]: 0 : if (sOut.getLength())
2557 [ # # ]: 0 : sOut.append(' ');
2558 [ # # ]: 0 : sOut.append(pBStr);
2559 : : }
2560 : :
2561 [ # # ]: 0 : if (sOut.getLength())
2562 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_text_decoration, sOut.makeStringAndClear() );
2563 [ # # ]: 0 : else if( bNone )
2564 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_text_decoration, sCSS1_PV_none );
2565 : :
2566 : 0 : return rWrt;
2567 : : }
2568 : :
2569 : :
2570 : 0 : static Writer& OutCSS1_SvxCaseMap( Writer& rWrt, const SfxPoolItem& rHt )
2571 : : {
2572 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2573 : :
2574 [ # # # # : 0 : switch( ((const SvxCaseMapItem&)rHt).GetCaseMap() )
# # ]
2575 : : {
2576 : : case SVX_CASEMAP_NOT_MAPPED:
2577 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_font_variant, sCSS1_PV_normal );
2578 : 0 : break;
2579 : : case SVX_CASEMAP_KAPITAELCHEN:
2580 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_font_variant, sCSS1_PV_small_caps );
2581 : 0 : break;
2582 : : case SVX_CASEMAP_VERSALIEN:
2583 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_text_transform, sCSS1_PV_uppercase );
2584 : 0 : break;
2585 : : case SVX_CASEMAP_GEMEINE:
2586 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_text_transform, sCSS1_PV_lowercase );
2587 : 0 : break;
2588 : : case SVX_CASEMAP_TITEL:
2589 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_text_transform, sCSS1_PV_capitalize );
2590 : 0 : break;
2591 : : default:
2592 : : ;
2593 : : }
2594 : :
2595 : 0 : return rWrt;
2596 : : }
2597 : :
2598 : :
2599 : 0 : static Writer& OutCSS1_SvxColor( Writer& rWrt, const SfxPoolItem& rHt )
2600 : : {
2601 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2602 : :
2603 : : // Farben muessen nicht in der Style-Option ausgegeben werden.
2604 [ # # ][ # # ]: 0 : if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) &&
[ # # ]
2605 : 0 : !rHTMLWrt.bCfgPreferStyles )
2606 : 0 : return rWrt;
2607 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2608 : : "Farbe wirklich als Hint ausgeben?" );
2609 : :
2610 : 0 : Color aColor( ((const SvxColorItem&)rHt).GetValue() );
2611 [ # # ]: 0 : if( COL_AUTO == aColor.GetColor() )
2612 : 0 : aColor.SetColor( COL_BLACK );
2613 : :
2614 [ # # ][ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_color, GetCSS1Color(aColor));
2615 : :
2616 : 0 : return rWrt;
2617 : : }
2618 : :
2619 : :
2620 : 0 : static Writer& OutCSS1_SvxCrossedOut( Writer& rWrt, const SfxPoolItem& rHt )
2621 : : {
2622 : : // Mit dieser Methode werden nur Hints ausgegeben!
2623 : : // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
2624 : :
2625 [ # # ]: 0 : if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
2626 : : OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
2627 : 0 : 0, 0, (const SvxCrossedOutItem *)&rHt, 0 );
2628 : :
2629 : 0 : return rWrt;
2630 : : }
2631 : :
2632 : 4 : static Writer& OutCSS1_SvxFont( Writer& rWrt, const SfxPoolItem& rHt )
2633 : : {
2634 : 4 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2635 : :
2636 : : // Fonts muessen nicht in der Style-Option ausgegeben werden.
2637 [ + - ]: 4 : if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2638 : 4 : return rWrt;
2639 : :
2640 : 0 : sal_uInt16 nScript = CSS1_OUTMODE_WESTERN;
2641 [ # # # ]: 0 : switch( rHt.Which() )
2642 : : {
2643 : 0 : case RES_CHRATR_CJK_FONT: nScript = CSS1_OUTMODE_CJK; break;
2644 : 0 : case RES_CHRATR_CTL_FONT: nScript = CSS1_OUTMODE_CTL; break;
2645 : : }
2646 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Script( nScript ) )
2647 : 0 : return rWrt;
2648 : :
2649 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2650 : : "Font wirklich als Hint ausgeben?" );
2651 : :
2652 [ # # ]: 0 : String sOut;
2653 : : // MS IE3b1 hat mit einfachen Haekchen Probleme
2654 : 0 : sal_uInt16 nMode = rHTMLWrt.nCSS1OutMode & CSS1_OUTMODE_ANY_ON;
2655 [ # # ]: 0 : sal_Unicode cQuote = nMode == CSS1_OUTMODE_RULE_ON ? '\"' : '\'';
2656 : : SwHTMLWriter::PrepareFontList( ((const SvxFontItem&)rHt), sOut, cQuote,
2657 [ # # ]: 0 : sal_True );
2658 : :
2659 [ # # ]: 0 : rHTMLWrt.OutCSS1_Property( sCSS1_P_font_family, sOut );
2660 : :
2661 [ # # ]: 4 : return rWrt;
2662 : : }
2663 : :
2664 : 2 : static Writer& OutCSS1_SvxFontHeight( Writer& rWrt, const SfxPoolItem& rHt )
2665 : : {
2666 : 2 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2667 : :
2668 : : // Font-Hoehen muessen nicht in der Style-Option ausgegeben werden.
2669 : : // Fuer Drop-Caps wird ein andewres font-size ausgegeben
2670 [ - + # # ]: 2 : if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) ||
[ + - ]
2671 : 0 : rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_DROPCAP ) )
2672 : 2 : return rWrt;
2673 : :
2674 : 0 : sal_uInt16 nScript = CSS1_OUTMODE_WESTERN;
2675 [ # # # ]: 0 : switch( rHt.Which() )
2676 : : {
2677 : 0 : case RES_CHRATR_CJK_FONTSIZE: nScript = CSS1_OUTMODE_CJK; break;
2678 : 0 : case RES_CHRATR_CTL_FONTSIZE: nScript = CSS1_OUTMODE_CTL; break;
2679 : : }
2680 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Script( nScript ) )
2681 : 0 : return rWrt;
2682 : :
2683 : 0 : sal_uInt32 nHeight = ((const SvxFontHeightItem&)rHt).GetHeight();
2684 [ # # ]: 0 : if( rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT) )
2685 : : {
2686 : : // einen Hint nur dann ausgeben wenn es auch was bringt
2687 [ # # ]: 0 : sal_uInt16 nSize = rHTMLWrt.GetHTMLFontSize( nHeight );
2688 [ # # ]: 0 : if( rHTMLWrt.aFontHeights[nSize-1] == nHeight )
2689 : 0 : return rWrt;
2690 : : }
2691 : :
2692 : 0 : rtl::OStringBuffer sHeight;
2693 [ # # ]: 0 : sHeight.append(static_cast<sal_Int32>(nHeight/20));
2694 [ # # ]: 0 : sHeight.append(sCSS1_UNIT_pt);
2695 : : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_font_size,
2696 [ # # ]: 0 : sHeight.makeStringAndClear());
2697 : :
2698 : 2 : return rWrt;
2699 : : }
2700 : :
2701 : 0 : static Writer& OutCSS1_SvxPosture( Writer& rWrt, const SfxPoolItem& rHt )
2702 : : {
2703 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2704 : :
2705 : 0 : sal_uInt16 nScript = CSS1_OUTMODE_WESTERN;
2706 [ # # # ]: 0 : switch( rHt.Which() )
2707 : : {
2708 : 0 : case RES_CHRATR_CJK_POSTURE: nScript = CSS1_OUTMODE_CJK; break;
2709 : 0 : case RES_CHRATR_CTL_POSTURE: nScript = CSS1_OUTMODE_CTL; break;
2710 : : }
2711 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Script( nScript ) )
2712 : 0 : return rWrt;
2713 : :
2714 : 0 : const sal_Char *pStr = 0;
2715 [ # # # # ]: 0 : switch( ((const SvxPostureItem&)rHt).GetPosture() )
2716 : : {
2717 : 0 : case ITALIC_NONE: pStr = sCSS1_PV_normal; break;
2718 : 0 : case ITALIC_OBLIQUE: pStr = sCSS1_PV_oblique; break;
2719 : : case ITALIC_NORMAL:
2720 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2721 : : {
2722 : : // das geht auch in HTML und muss nicht als STYLE-Option
2723 : : // und darf nicht als Hint geschrieben werden
2724 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2725 : : "Italic als Hint schreiben?" );
2726 : 0 : pStr = sCSS1_PV_italic;
2727 : : }
2728 : 0 : break;
2729 : : default:
2730 : : ;
2731 : : }
2732 : :
2733 [ # # ]: 0 : if( pStr )
2734 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_font_style, pStr );
2735 : :
2736 : 0 : return rWrt;
2737 : : }
2738 : :
2739 : 0 : static Writer& OutCSS1_SvxKerning( Writer& rWrt, const SfxPoolItem& rHt )
2740 : : {
2741 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2742 : :
2743 : : // Kerning-Item nur ausgeben, wenn volle Style-Unterst?tzung da ist
2744 [ # # ]: 0 : if( !rHTMLWrt.IsHTMLMode(HTMLMODE_FULL_STYLES) )
2745 : 0 : return rWrt;
2746 : :
2747 : 0 : sal_Int16 nValue = ((const SvxKerningItem&)rHt).GetValue();
2748 [ # # ]: 0 : if( nValue )
2749 : : {
2750 : 0 : rtl::OStringBuffer sOut;
2751 [ # # ]: 0 : if( nValue < 0 )
2752 : : {
2753 [ # # ]: 0 : sOut.append('-');
2754 : 0 : nValue = -nValue;
2755 : : }
2756 : :
2757 : : // Breite als n.n pt
2758 : 0 : nValue = (nValue + 1) / 2; // 1/10pt
2759 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(nValue / 10));
2760 [ # # ]: 0 : sOut.append('.');
2761 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(nValue % 10));
2762 [ # # ]: 0 : sOut.append(sCSS1_UNIT_pt);
2763 : :
2764 : : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_letter_spacing,
2765 [ # # ]: 0 : sOut.makeStringAndClear());
2766 : : }
2767 : : else
2768 : : {
2769 : : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_letter_spacing,
2770 : 0 : sCSS1_PV_normal );
2771 : : }
2772 : :
2773 : 0 : return rWrt;
2774 : : }
2775 : :
2776 : 4 : static Writer& OutCSS1_SvxLanguage( Writer& rWrt, const SfxPoolItem& rHt )
2777 : : {
2778 : 4 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2779 : :
2780 : : // Language will be exported rules only
2781 [ + - ]: 4 : if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2782 : 4 : return rWrt;
2783 : :
2784 : 0 : sal_uInt16 nScript = CSS1_OUTMODE_WESTERN;
2785 [ # # # ]: 0 : switch( rHt.Which() )
2786 : : {
2787 : 0 : case RES_CHRATR_CJK_LANGUAGE: nScript = CSS1_OUTMODE_CJK; break;
2788 : 0 : case RES_CHRATR_CTL_LANGUAGE: nScript = CSS1_OUTMODE_CTL; break;
2789 : : }
2790 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Script( nScript ) )
2791 : 0 : return rWrt;
2792 : :
2793 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2794 : : "Language wirklich als Hint ausgeben?" );
2795 : :
2796 : 0 : LanguageType eLang = ((const SvxLanguageItem &)rHt).GetLanguage();
2797 [ # # ]: 0 : if( LANGUAGE_DONTKNOW == eLang )
2798 : 0 : return rWrt;
2799 : :
2800 [ # # ][ # # ]: 0 : String sOut = MsLangId::convertLanguageToIsoString( eLang );
2801 : :
2802 [ # # ]: 0 : rHTMLWrt.OutCSS1_Property( sCSS1_P_so_language, sOut );
2803 : :
2804 [ # # ]: 4 : return rWrt;
2805 : : }
2806 : :
2807 : 0 : static Writer& OutCSS1_SvxUnderline( Writer& rWrt, const SfxPoolItem& rHt )
2808 : : {
2809 : : // Mit dieser Methode werden nur Hints ausgegeben!
2810 : : // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
2811 : :
2812 [ # # ]: 0 : if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
2813 : : OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
2814 : 0 : (const SvxUnderlineItem *)&rHt, 0, 0, 0 );
2815 : :
2816 : 0 : return rWrt;
2817 : : }
2818 : :
2819 : :
2820 : 0 : static Writer& OutCSS1_SvxOverline( Writer& rWrt, const SfxPoolItem& rHt )
2821 : : {
2822 : : // Mit dieser Methode werden nur Hints ausgegeben!
2823 : : // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
2824 : :
2825 [ # # ]: 0 : if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
2826 : : OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
2827 : 0 : 0, (const SvxOverlineItem *)&rHt, 0, 0 );
2828 : :
2829 : 0 : return rWrt;
2830 : : }
2831 : :
2832 : :
2833 : 0 : static Writer& OutCSS1_SvxFontWeight( Writer& rWrt, const SfxPoolItem& rHt )
2834 : : {
2835 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2836 : :
2837 : 0 : sal_uInt16 nScript = CSS1_OUTMODE_WESTERN;
2838 [ # # # ]: 0 : switch( rHt.Which() )
2839 : : {
2840 : 0 : case RES_CHRATR_CJK_WEIGHT: nScript = CSS1_OUTMODE_CJK; break;
2841 : 0 : case RES_CHRATR_CTL_WEIGHT: nScript = CSS1_OUTMODE_CTL; break;
2842 : : }
2843 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Script( nScript ) )
2844 : 0 : return rWrt;
2845 : :
2846 : 0 : const sal_Char *pStr = 0;
2847 [ # # # # : 0 : switch( ((const SvxWeightItem&)rHt).GetWeight() )
# # # # ]
2848 : : {
2849 : 0 : case WEIGHT_ULTRALIGHT: pStr = sCSS1_PV_extra_light; break;
2850 : 0 : case WEIGHT_LIGHT: pStr = sCSS1_PV_light; break;
2851 : 0 : case WEIGHT_SEMILIGHT: pStr = sCSS1_PV_demi_light; break;
2852 : 0 : case WEIGHT_NORMAL: pStr = sCSS1_PV_normal; break;
2853 : 0 : case WEIGHT_SEMIBOLD: pStr = sCSS1_PV_demi_bold; break;
2854 : : case WEIGHT_BOLD:
2855 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
2856 : : {
2857 : : // das geht auch in HTML und muss nicht als STYLE-Option
2858 : : // und darf nicht als Hint geschrieben werden
2859 : : OSL_ENSURE( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT),
2860 : : "Fett als Hint schreiben?" );
2861 : 0 : pStr = sCSS1_PV_bold;
2862 : : }
2863 : 0 : break;
2864 : 0 : case WEIGHT_ULTRABOLD: pStr = sCSS1_PV_extra_bold; break;
2865 : : default:
2866 : 0 : pStr = sCSS1_PV_normal;;
2867 : : }
2868 : :
2869 [ # # ]: 0 : if( pStr )
2870 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_font_weight, pStr );
2871 : :
2872 : 0 : return rWrt;
2873 : : }
2874 : :
2875 : 0 : static Writer& OutCSS1_SvxBlink( Writer& rWrt, const SfxPoolItem& rHt )
2876 : : {
2877 : : // Mit dieser Methode werden nur Hints ausgegeben!
2878 : : // Sonst wird OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink() direkt aufgerufen.
2879 : :
2880 [ # # ]: 0 : if( ((SwHTMLWriter&)rWrt).IsCSS1Source(CSS1_OUTMODE_HINT) )
2881 : : OutCSS1_SvxTxtLn_SvxCrOut_SvxBlink( rWrt,
2882 : 0 : 0, 0, 0, (const SvxBlinkItem *)&rHt );
2883 : :
2884 : 0 : return rWrt;
2885 : : }
2886 : :
2887 : 0 : static Writer& OutCSS1_SvxLineSpacing( Writer& rWrt, const SfxPoolItem& rHt )
2888 : : {
2889 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
2890 : :
2891 : : // Netscape4 hat massive Probleme mit den Zellenhoehen
2892 : : // wenn der Zeilenabstand innerhalb einer Tabelle geaendert wird
2893 : : // und die Breite der Tabelle nicht automatisch berechnet wird
2894 : : // (also wenn eine WIDTH-Option vorhanden ist).
2895 [ # # ][ # # ]: 0 : if( rHTMLWrt.bOutTable && rHTMLWrt.bCfgNetscape4 )
2896 : 0 : return rWrt;
2897 : :
2898 : 0 : const SvxLineSpacingItem& rLSItem = (const SvxLineSpacingItem&)rHt;
2899 : :
2900 : 0 : sal_uInt16 nHeight = 0;
2901 : 0 : sal_uInt16 nPrcHeight = 0;
2902 : 0 : SvxLineSpace eLineSpace = rLSItem.GetLineSpaceRule();
2903 [ # # # ]: 0 : switch( rLSItem.GetInterLineSpaceRule() )
2904 : : {
2905 : : case SVX_INTER_LINE_SPACE_OFF:
2906 : : case SVX_INTER_LINE_SPACE_FIX:
2907 : : {
2908 [ # # # ]: 0 : switch( eLineSpace )
2909 : : {
2910 : : case SVX_LINE_SPACE_MIN:
2911 : : case SVX_LINE_SPACE_FIX:
2912 : 0 : nHeight = rLSItem.GetLineHeight();
2913 : 0 : break;
2914 : : case SVX_LINE_SPACE_AUTO:
2915 : 0 : nPrcHeight = 100;
2916 : 0 : break;
2917 : : default:
2918 : : ;
2919 : : }
2920 : : }
2921 : 0 : break;
2922 : : case SVX_INTER_LINE_SPACE_PROP:
2923 : 0 : nPrcHeight = rLSItem.GetPropLineSpace();
2924 : 0 : break;
2925 : :
2926 : : default:
2927 : : ;
2928 : : }
2929 : :
2930 [ # # ]: 0 : if( nHeight )
2931 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_line_height, (long)nHeight );
2932 [ # # ]: 0 : else if( nPrcHeight )
2933 : : {
2934 : 0 : rtl::OStringBuffer sHeight;
2935 [ # # ]: 0 : sHeight.append(static_cast<sal_Int32>(nPrcHeight));
2936 [ # # ]: 0 : sHeight.append('%');
2937 : : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_line_height,
2938 [ # # ]: 0 : sHeight.makeStringAndClear());
2939 : : }
2940 : :
2941 : 0 : return rWrt;
2942 : : }
2943 : :
2944 : 0 : static Writer& OutCSS1_SvxAdjust( Writer& rWrt, const SfxPoolItem& rHt )
2945 : : {
2946 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
2947 : :
2948 : : // Alignment in Style-Option nur ausgeben, wenn das Tag kein
2949 : : // ALIGN=xxx zulaesst
2950 [ # # ][ # # ]: 0 : if( rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) &&
[ # # ]
2951 : 0 : !rHTMLWrt.bNoAlign)
2952 : 0 : return rWrt;
2953 : :
2954 : 0 : const sal_Char* pStr = 0;
2955 [ # # # # : 0 : switch( ((const SvxAdjustItem&)rHt).GetAdjust() )
# ]
2956 : : {
2957 : 0 : case SVX_ADJUST_LEFT: pStr = sCSS1_PV_left; break;
2958 : 0 : case SVX_ADJUST_RIGHT: pStr = sCSS1_PV_right; break;
2959 : 0 : case SVX_ADJUST_BLOCK: pStr = sCSS1_PV_justify; break;
2960 : 0 : case SVX_ADJUST_CENTER: pStr = sCSS1_PV_center; break;
2961 : : default:
2962 : : ;
2963 : : }
2964 : :
2965 [ # # ]: 0 : if( pStr )
2966 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_text_align, pStr );
2967 : :
2968 : 0 : return rWrt;
2969 : : }
2970 : :
2971 : 0 : static Writer& OutCSS1_SvxFmtSplit( Writer& rWrt, const SfxPoolItem& rHt )
2972 : : {
2973 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
2974 : :
2975 : 0 : const sal_Char *pStr = ((const SvxFmtSplitItem&)rHt).GetValue()
2976 : : ? sCSS1_PV_auto
2977 [ # # ]: 0 : : sCSS1_PV_avoid;
2978 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_page_break_inside, pStr );
2979 : :
2980 : 0 : return rWrt;
2981 : : }
2982 : :
2983 : 0 : static Writer& OutCSS1_SwFmtLayoutSplit( Writer& rWrt, const SfxPoolItem& rHt )
2984 : : {
2985 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
2986 : :
2987 : 0 : const sal_Char *pStr = ((const SwFmtLayoutSplit&)rHt).GetValue()
2988 : : ? sCSS1_PV_auto
2989 [ # # ]: 0 : : sCSS1_PV_avoid;
2990 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_page_break_inside, pStr );
2991 : :
2992 : 0 : return rWrt;
2993 : : }
2994 : :
2995 : 0 : static Writer& OutCSS1_SvxWidows( Writer& rWrt, const SfxPoolItem& rHt )
2996 : : {
2997 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
2998 : :
2999 : : rtl::OString aStr(rtl::OString::valueOf(static_cast<sal_Int32>(
3000 : 0 : ((const SvxWidowsItem&)rHt).GetValue())));
3001 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_widows, aStr );
3002 : :
3003 : 0 : return rWrt;
3004 : : }
3005 : :
3006 : 0 : static Writer& OutCSS1_SvxOrphans( Writer& rWrt, const SfxPoolItem& rHt )
3007 : : {
3008 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
3009 : :
3010 : : rtl::OString aStr(rtl::OString::valueOf(static_cast<sal_Int32>(
3011 : 0 : ((const SvxOrphansItem&)rHt).GetValue())));
3012 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_orphans, aStr );
3013 : :
3014 : 0 : return rWrt;
3015 : : }
3016 : :
3017 : 0 : static void OutCSS1_SwFmtDropAttrs( SwHTMLWriter& rHWrt,
3018 : : const SwFmtDrop& rDrop,
3019 : : const SfxItemSet *pCharFmtItemSet )
3020 : : {
3021 : : // Text fliesst rechts drumrum
3022 [ # # ]: 0 : rHWrt.OutCSS1_PropertyAscii( sCSS1_P_float, sCSS1_PV_left );
3023 : :
3024 : : // Anzahl der Zeilen -> %-Angabe fuer Font-Hoehe!
3025 : 0 : rtl::OStringBuffer sOut;
3026 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(rDrop.GetLines()*100));
3027 [ # # ]: 0 : sOut.append('%');
3028 [ # # ]: 0 : rHWrt.OutCSS1_PropertyAscii(sCSS1_P_font_size, sOut.makeStringAndClear());
3029 : :
3030 : : // Abstand zum Text = rechter Rand
3031 : 0 : sal_uInt16 nDistance = rDrop.GetDistance();
3032 [ # # ]: 0 : if( nDistance > 0 )
3033 [ # # ]: 0 : rHWrt.OutCSS1_UnitProperty( sCSS1_P_margin_right, nDistance );
3034 : :
3035 : 0 : const SwCharFmt *pDCCharFmt = rDrop.GetCharFmt();
3036 [ # # ]: 0 : if( pCharFmtItemSet )
3037 [ # # ]: 0 : rHWrt.OutCSS1_SfxItemSet( *pCharFmtItemSet );
3038 [ # # ]: 0 : else if( pDCCharFmt )
3039 [ # # ]: 0 : rHWrt.OutCSS1_SfxItemSet( pDCCharFmt->GetAttrSet() );
3040 [ # # ]: 0 : else if( (rHWrt.nCSS1OutMode & CSS1_OUTMODE_ANY_OFF) == CSS1_OUTMODE_RULE_OFF )
3041 [ # # ][ # # ]: 0 : rHWrt.Strm() << sCSS1_rule_end;
3042 : :
3043 : 0 : }
3044 : :
3045 : 0 : static Writer& OutCSS1_SwFmtDrop( Writer& rWrt, const SfxPoolItem& rHt )
3046 : : {
3047 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
3048 : :
3049 : : // nie als Option eines Absatzes ausgeben, sondern nur als Hints
3050 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source(CSS1_OUTMODE_HINT) )
3051 : 0 : return rWrt;
3052 : :
3053 [ # # ]: 0 : if( rHTMLWrt.bTagOn )
3054 : : {
3055 : : SwCSS1OutMode aMode( rHTMLWrt,
3056 : : rHTMLWrt.nCSS1Script|CSS1_OUTMODE_SPAN_TAG1_ON|CSS1_OUTMODE_ENCODE|
3057 [ # # ]: 0 : CSS1_OUTMODE_DROPCAP );
3058 : :
3059 [ # # ]: 0 : OutCSS1_SwFmtDropAttrs( rHTMLWrt, (const SwFmtDrop&)rHt );
3060 : : // Ein "> wird schon vom aufrufenden OutCSS1_HintAsSpanTag geschrieben.
3061 : : }
3062 : : else
3063 : : {
3064 : 0 : HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_span, sal_False );
3065 : : }
3066 : :
3067 : 0 : return rWrt;
3068 : : }
3069 : :
3070 : 0 : static Writer& OutCSS1_SwFmtFrmSize( Writer& rWrt, const SfxPoolItem& rHt,
3071 : : sal_uInt16 nMode )
3072 : : {
3073 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
3074 : :
3075 : 0 : const SwFmtFrmSize& rFSItem = (const SwFmtFrmSize&)rHt;
3076 : :
3077 [ # # ]: 0 : if( nMode & CSS1_FRMSIZE_WIDTH )
3078 : : {
3079 : 0 : sal_uInt8 nPrcWidth = rFSItem.GetWidthPercent();
3080 [ # # ]: 0 : if( nPrcWidth )
3081 : : {
3082 : 0 : rtl::OStringBuffer sOut;
3083 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(nPrcWidth));
3084 [ # # ]: 0 : sOut.append('%');
3085 : : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_width,
3086 [ # # ]: 0 : sOut.makeStringAndClear());
3087 : : }
3088 [ # # ]: 0 : else if( nMode & CSS1_FRMSIZE_PIXEL )
3089 : : {
3090 : : rHTMLWrt.OutCSS1_PixelProperty( sCSS1_P_width,
3091 : 0 : rFSItem.GetSize().Width(), sal_False );
3092 : : }
3093 : : else
3094 : : {
3095 : : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_width,
3096 : 0 : rFSItem.GetSize().Width() );
3097 : : }
3098 : : }
3099 : :
3100 [ # # ]: 0 : if( nMode & CSS1_FRMSIZE_ANYHEIGHT )
3101 : : {
3102 : 0 : sal_Bool bOutHeight = sal_False;
3103 [ # # # # ]: 0 : switch( rFSItem.GetHeightSizeType() )
3104 : : {
3105 : : case ATT_FIX_SIZE:
3106 : 0 : bOutHeight = (nMode & CSS1_FRMSIZE_FIXHEIGHT) != 0;
3107 : 0 : break;
3108 : : case ATT_MIN_SIZE:
3109 : 0 : bOutHeight = (nMode & CSS1_FRMSIZE_MINHEIGHT) != 0;
3110 : 0 : break;
3111 : : case ATT_VAR_SIZE:
3112 : 0 : bOutHeight = (nMode & CSS1_FRMSIZE_VARHEIGHT) != 0;
3113 : 0 : break;
3114 : : default:
3115 : : OSL_ENSURE( bOutHeight, "Hoehe wird nicht exportiert" );
3116 : 0 : break;
3117 : : }
3118 : :
3119 [ # # ]: 0 : if( bOutHeight )
3120 : : {
3121 : 0 : sal_uInt8 nPrcHeight = rFSItem.GetHeightPercent();
3122 [ # # ]: 0 : if( nPrcHeight )
3123 : : {
3124 : 0 : rtl::OStringBuffer sOut;
3125 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(nPrcHeight));
3126 [ # # ]: 0 : sOut.append('%');
3127 : : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_height,
3128 [ # # ]: 0 : sOut.makeStringAndClear());
3129 : : }
3130 [ # # ]: 0 : else if( nMode & CSS1_FRMSIZE_PIXEL )
3131 : : {
3132 : : rHTMLWrt.OutCSS1_PixelProperty( sCSS1_P_height,
3133 : 0 : rFSItem.GetSize().Width(),
3134 : 0 : sal_True );
3135 : : }
3136 : : else
3137 : : {
3138 : : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_height,
3139 : 0 : rFSItem.GetSize().Height() );
3140 : : }
3141 : : }
3142 : : }
3143 : :
3144 : 0 : return rWrt;
3145 : : }
3146 : :
3147 : 0 : static Writer& OutCSS1_SvxLRSpace( Writer& rWrt, const SfxPoolItem& rHt )
3148 : : {
3149 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
3150 : :
3151 : 0 : const SvxLRSpaceItem& rLRItem = (const SvxLRSpaceItem&)rHt;
3152 : :
3153 : : // Der Export der harten Attributierung ist unnoetig, wenn die
3154 : : // neuen Werte denen der aktuellen Vorlage entsprechen
3155 : :
3156 : : // Einen linken Rand kann es durch eine Liste bereits in der
3157 : : // Umgebung geben
3158 : 0 : long nLeftMargin = (long)rLRItem.GetTxtLeft() - rHTMLWrt.nLeftMargin;
3159 [ # # ]: 0 : if( rHTMLWrt.nDfltLeftMargin != nLeftMargin )
3160 : : {
3161 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_margin_left, nLeftMargin );
3162 : : }
3163 : :
3164 [ # # ]: 0 : if( rHTMLWrt.nDfltRightMargin != rLRItem.GetRight() )
3165 : : {
3166 : : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_margin_right,
3167 : 0 : (long)rLRItem.GetRight() );
3168 : : }
3169 : :
3170 : : // Der Erstzeilen-Einzug kann den Platz fuer eine Numerierung
3171 : : // enthalten
3172 : 0 : long nFirstLineIndent = (long)rLRItem.GetTxtFirstLineOfst() -
3173 : 0 : rHTMLWrt.nFirstLineIndent;
3174 [ # # ]: 0 : if( rHTMLWrt.nDfltFirstLineIndent != nFirstLineIndent )
3175 : : {
3176 : : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_text_indent,
3177 : 0 : nFirstLineIndent );
3178 : : }
3179 : :
3180 : 0 : return rWrt;
3181 : : }
3182 : :
3183 : 0 : static Writer& OutCSS1_SvxULSpace( Writer& rWrt, const SfxPoolItem& rHt )
3184 : : {
3185 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
3186 : :
3187 : 0 : const SvxULSpaceItem& rULItem = (const SvxULSpaceItem&)rHt;
3188 : :
3189 [ # # ]: 0 : if( rHTMLWrt.nDfltTopMargin != rULItem.GetUpper() )
3190 : : {
3191 : : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_margin_top,
3192 : 0 : (long)rULItem.GetUpper() );
3193 : : }
3194 : :
3195 [ # # ]: 0 : if( rHTMLWrt.nDfltBottomMargin != rULItem.GetLower() )
3196 : : {
3197 : : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_margin_bottom,
3198 : 0 : (long)rULItem.GetLower() );
3199 : : }
3200 : :
3201 : 0 : return rWrt;
3202 : : }
3203 : :
3204 : 0 : static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt,
3205 : : const SvxULSpaceItem *pULItem,
3206 : : const SvxLRSpaceItem *pLRItem )
3207 : : {
3208 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
3209 : :
3210 [ # # ][ # # : 0 : if( pLRItem && pULItem &&
# # # # #
# # # # #
# # # # ]
[ # # ]
3211 : 0 : pLRItem->GetLeft() == pLRItem->GetRight() &&
3212 : 0 : pLRItem->GetLeft() == pULItem->GetUpper() &&
3213 : 0 : pLRItem->GetLeft() == pULItem->GetLower() &&
3214 : 0 : pLRItem->GetLeft() != rHTMLWrt.nDfltLeftMargin &&
3215 : 0 : pLRItem->GetRight() != rHTMLWrt.nDfltRightMargin &&
3216 : 0 : pULItem->GetUpper() != rHTMLWrt.nDfltTopMargin &&
3217 : 0 : pULItem->GetLower() != rHTMLWrt.nDfltBottomMargin )
3218 : : {
3219 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_margin, (long)pLRItem->GetLeft() );
3220 : : }
3221 : : else
3222 : : {
3223 [ # # ]: 0 : if( pLRItem )
3224 : 0 : OutCSS1_SvxLRSpace( rWrt, *pLRItem );
3225 [ # # ]: 0 : if( pULItem )
3226 : 0 : OutCSS1_SvxULSpace( rWrt, *pULItem );
3227 : : }
3228 : :
3229 : 0 : return rWrt;
3230 : : }
3231 : :
3232 : 2 : static Writer& OutCSS1_SvxULSpace_SvxLRSpace( Writer& rWrt,
3233 : : const SfxItemSet& rItemSet,
3234 : : sal_Bool bDeep )
3235 : : {
3236 : 2 : const SvxULSpaceItem *pULSpace = 0;
3237 : 2 : const SvxLRSpaceItem *pLRSpace = 0;
3238 : : const SfxPoolItem *pItem;
3239 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET == rItemSet.GetItemState( RES_LR_SPACE, bDeep, &pItem ) )
3240 : 0 : pLRSpace = (const SvxLRSpaceItem *)pItem;
3241 : :
3242 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET == rItemSet.GetItemState( RES_UL_SPACE, bDeep, &pItem ) )
3243 : 0 : pULSpace = (const SvxULSpaceItem *)pItem;
3244 : :
3245 [ + - ][ - + ]: 2 : if( pLRSpace || pULSpace )
3246 [ # # ]: 0 : OutCSS1_SvxULSpace_SvxLRSpace( rWrt, pULSpace, pLRSpace );
3247 : :
3248 : 2 : return rWrt;
3249 : : }
3250 : :
3251 : 0 : static Writer& OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( Writer& rWrt,
3252 : : const SvxFmtBreakItem *pBreakItem,
3253 : : const SwFmtPageDesc *pPDescItem,
3254 : : const SvxFmtKeepItem *pKeepItem )
3255 : : {
3256 : 0 : SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
3257 : :
3258 [ # # ]: 0 : if( !rHTMLWrt.IsHTMLMode(HTMLMODE_PRINT_EXT) )
3259 : 0 : return rWrt;
3260 : :
3261 : 0 : const sal_Char *pBreakBefore = 0;
3262 : 0 : const sal_Char *pBreakAfter = 0;
3263 : :
3264 [ # # ]: 0 : if( pKeepItem )
3265 : : {
3266 [ # # ]: 0 : pBreakAfter = pKeepItem->GetValue() ? sCSS1_PV_avoid : sCSS1_PV_auto;
3267 : : }
3268 [ # # ]: 0 : if( pBreakItem )
3269 : : {
3270 [ # # # # ]: 0 : switch( pBreakItem->GetBreak() )
3271 : : {
3272 : : case SVX_BREAK_NONE:
3273 : 0 : pBreakBefore = sCSS1_PV_auto;
3274 [ # # ]: 0 : if( !pBreakAfter )
3275 : 0 : pBreakAfter = sCSS1_PV_auto;
3276 : 0 : break;
3277 : :
3278 : : case SVX_BREAK_PAGE_BEFORE:
3279 : 0 : pBreakBefore = sCSS1_PV_always;
3280 : 0 : break;
3281 : :
3282 : : case SVX_BREAK_PAGE_AFTER:
3283 : 0 : pBreakAfter= sCSS1_PV_always;
3284 : 0 : break;
3285 : :
3286 : : default:
3287 : : ;
3288 : : }
3289 : : }
3290 [ # # ]: 0 : if( pPDescItem )
3291 : : {
3292 : 0 : const SwPageDesc *pPDesc = pPDescItem->GetPageDesc();
3293 [ # # ]: 0 : if( pPDesc )
3294 : : {
3295 [ # # # ]: 0 : switch( pPDesc->GetPoolFmtId() )
3296 : : {
3297 : 0 : case RES_POOLPAGE_LEFT: pBreakBefore = sCSS1_PV_left; break;
3298 : 0 : case RES_POOLPAGE_RIGHT: pBreakBefore = sCSS1_PV_right; break;
3299 : 0 : default: pBreakBefore = sCSS1_PV_always; break;
3300 : : }
3301 : : }
3302 [ # # ]: 0 : else if( !pBreakBefore )
3303 : : {
3304 : 0 : pBreakBefore = sCSS1_PV_auto;
3305 : : }
3306 : : }
3307 : :
3308 [ # # ]: 0 : if( pBreakBefore )
3309 : : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_page_break_before,
3310 : 0 : pBreakBefore );
3311 [ # # ]: 0 : if( pBreakAfter )
3312 : : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_page_break_after,
3313 : 0 : pBreakAfter );
3314 : :
3315 : 0 : return rWrt;
3316 : : }
3317 : :
3318 : 2 : static Writer& OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( Writer& rWrt,
3319 : : const SfxItemSet& rItemSet,
3320 : : sal_Bool bDeep )
3321 : : {
3322 : 2 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
3323 : : const SfxPoolItem *pItem;
3324 : 2 : const SvxFmtBreakItem *pBreakItem = 0;
3325 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_BREAK, bDeep, &pItem ))
3326 : 0 : pBreakItem = (const SvxFmtBreakItem *)pItem;
3327 : :
3328 : 2 : const SwFmtPageDesc *pPDescItem = 0;
3329 [ + - ]: 4 : if( ( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) ||
[ + - - + ]
[ # # ][ - + ]
3330 : 2 : !rHTMLWrt.bCSS1IgnoreFirstPageDesc ||
3331 : 2 : rHTMLWrt.pStartNdIdx->GetIndex() !=
3332 : 2 : rHTMLWrt.pCurPam->GetPoint()->nNode.GetIndex() ) &&
3333 [ # # ]: 0 : SFX_ITEM_SET==rItemSet.GetItemState( RES_PAGEDESC, bDeep, &pItem ))
3334 : 0 : pPDescItem = (const SwFmtPageDesc*)pItem;
3335 : :
3336 : 2 : const SvxFmtKeepItem *pKeepItem = 0;
3337 [ + - ][ - + ]: 2 : if( SFX_ITEM_SET==rItemSet.GetItemState( RES_KEEP, bDeep, &pItem ))
3338 : 0 : pKeepItem = (const SvxFmtKeepItem *)pItem;
3339 : :
3340 [ + - ][ + - ]: 2 : if( pBreakItem || pPDescItem || pKeepItem )
[ - + ]
3341 : : OutCSS1_SvxFmtBreak_SwFmtPDesc_SvxFmtKeep( rWrt, pBreakItem,
3342 [ # # ]: 0 : pPDescItem, pKeepItem );
3343 : :
3344 : 2 : return rWrt;
3345 : : }
3346 : :
3347 : : // Wrapper fuer OutCSS1_SfxItemSet etc.
3348 : 0 : static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt )
3349 : : {
3350 : 0 : OutCSS1_SvxBrush( rWrt, rHt, CSS1_BACKGROUND_ATTR, 0 );
3351 : 0 : return rWrt;
3352 : : }
3353 : :
3354 : :
3355 : 0 : static Writer& OutCSS1_SvxBrush( Writer& rWrt, const SfxPoolItem& rHt,
3356 : : sal_uInt16 nMode, const String *pGrfName )
3357 : : {
3358 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
3359 : :
3360 : : // Das Zeichen-Attribut wird nicht ausgegeben, wenn gerade
3361 : : // Optionen ausgegeben werden
3362 [ # # # # ]: 0 : if( rHt.Which() < RES_CHRATR_END &&
[ # # ]
3363 : 0 : rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_PARA ) )
3364 : 0 : return rWrt;
3365 : :
3366 : : // Erstmal ein par Werte holen
3367 : : // const Brush &rBrush = ((const SvxBrushItem &)rHt).GetBrush();
3368 : 0 : const Color & rColor = ((const SvxBrushItem &)rHt).GetColor();
3369 : : const String *pLink = pGrfName ? pGrfName
3370 [ # # ]: 0 : : ((const SvxBrushItem &)rHt).GetGraphicLink();
3371 : 0 : SvxGraphicPosition ePos = ((const SvxBrushItem &)rHt).GetGraphicPos();
3372 : :
3373 [ # # ]: 0 : if( CSS1_BACKGROUND_PAGE==nMode )
3374 : : {
3375 : : // Fuer Seitenvorlagen wurde der Grafik-Name uebergeben. Es wird
3376 : : // nur ein Attribut ausgegeben, wenn die Grafik nicht gekachelt ist.
3377 : : OSL_ENSURE( pLink, "Wo ist der Grafik-Name der Seitenvorlage?" );
3378 [ # # ][ # # ]: 0 : if( !pLink || !pLink->Len() || GPOS_TILED==ePos )
[ # # ][ # # ]
3379 : 0 : return rWrt;
3380 : : }
3381 : :
3382 : : // Erstmal die Farbe holen
3383 : 0 : sal_Bool bColor = sal_False;
3384 : : /// set <bTransparent> to sal_True, if color is "no fill"/"auto fill"
3385 : 0 : sal_Bool bTransparent = (rColor.GetColor() == COL_TRANSPARENT);
3386 : 0 : Color aColor;
3387 [ # # ]: 0 : if( !bTransparent )
3388 : : {
3389 : 0 : aColor = rColor;
3390 : 0 : bColor = sal_True;
3391 : : }
3392 : :
3393 : : // und jetzt eine Grafik
3394 [ # # ]: 0 : String sGrfNm;
3395 : :
3396 [ # # ]: 0 : if( !pLink )
3397 : : {
3398 : : // embeddete Grafik -> WriteEmbedded schreiben
3399 [ # # ]: 0 : const Graphic* pGrf = ((const SvxBrushItem &)rHt).GetGraphic();
3400 [ # # ]: 0 : if( pGrf )
3401 : : {
3402 : : // Grafik als (JPG-)File speichern
3403 : 0 : const String* pTempFileName = rHTMLWrt.GetOrigFileName();
3404 [ # # ]: 0 : if( pTempFileName )
3405 [ # # ]: 0 : sGrfNm = *pTempFileName;
3406 : : sal_uInt16 nErr = XOutBitmap::WriteGraphic( *pGrf, sGrfNm,
3407 : : rtl::OUString("JPG"),
3408 [ # # ][ # # ]: 0 : XOUTBMP_USE_NATIVE_IF_POSSIBLE );
[ # # ]
3409 [ # # ]: 0 : if( !nErr ) // fehlerhaft, da ist nichts auszugeben
3410 : : {
3411 : : sGrfNm = URIHelper::SmartRel2Abs(
3412 : 0 : INetURLObject(rWrt.GetBaseURL()), sGrfNm,
3413 [ # # ]: 0 : URIHelper::GetMaybeFileHdl() );
[ # # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
3414 : 0 : pLink = &sGrfNm;
3415 : : }
3416 : : else
3417 : : {
3418 : 0 : rHTMLWrt.nWarn = WARN_SWG_POOR_LOAD | WARN_SW_WRITE_BASE;
3419 : : }
3420 : : }
3421 : : }
3422 [ # # ][ # # ]: 0 : else if( !pGrfName && rHTMLWrt.bCfgCpyLinkedGrfs )
3423 : : {
3424 [ # # ]: 0 : sGrfNm = *pLink;
3425 [ # # ]: 0 : rWrt.CopyLocalFileToINet( sGrfNm );
3426 : 0 : pLink = &sGrfNm;
3427 : : }
3428 : :
3429 : : // In Tabellen wird nur dann etwas exportiert, wenn eine Grafik
3430 : : // existiert.
3431 [ # # ][ # # ]: 0 : if( CSS1_BACKGROUND_TABLE==nMode && !pLink )
3432 : 0 : return rWrt;
3433 : :
3434 : : // ggf. noch die Ausrichtung der Grafik
3435 : 0 : const sal_Char *pRepeat = 0, *pHori = 0, *pVert = 0;
3436 [ # # ]: 0 : if( pLink )
3437 : : {
3438 [ # # ]: 0 : if( GPOS_TILED==ePos )
3439 : : {
3440 : 0 : pRepeat = sCSS1_PV_repeat;
3441 : : }
3442 : : else
3443 : : {
3444 [ # # # # ]: 0 : switch( ePos )
3445 : : {
3446 : : case GPOS_LT:
3447 : : case GPOS_MT:
3448 : : case GPOS_RT:
3449 : 0 : pHori = sCSS1_PV_top;
3450 : 0 : break;
3451 : :
3452 : : case GPOS_LM:
3453 : : case GPOS_MM:
3454 : : case GPOS_RM:
3455 : 0 : pHori = sCSS1_PV_middle;
3456 : 0 : break;
3457 : :
3458 : : case GPOS_LB:
3459 : : case GPOS_MB:
3460 : : case GPOS_RB:
3461 : 0 : pHori = sCSS1_PV_bottom;
3462 : 0 : break;
3463 : :
3464 : : default:
3465 : : ;
3466 : : }
3467 : :
3468 [ # # # # ]: 0 : switch( ePos )
3469 : : {
3470 : : case GPOS_LT:
3471 : : case GPOS_LM:
3472 : : case GPOS_LB:
3473 : 0 : pVert = sCSS1_PV_left;
3474 : 0 : break;
3475 : :
3476 : : case GPOS_MT:
3477 : : case GPOS_MM:
3478 : : case GPOS_MB:
3479 : 0 : pVert = sCSS1_PV_center;
3480 : 0 : break;
3481 : :
3482 : : case GPOS_RT:
3483 : : case GPOS_RM:
3484 : : case GPOS_RB:
3485 : 0 : pVert = sCSS1_PV_right;
3486 : 0 : break;
3487 : :
3488 : : default:
3489 : : ;
3490 : : }
3491 : :
3492 [ # # ][ # # ]: 0 : if( pHori || pVert )
3493 : 0 : pRepeat = sCSS1_PV_no_repeat;
3494 : : }
3495 : : }
3496 : :
3497 : : // jetzt den String zusammen bauen
3498 [ # # ]: 0 : String sOut;
3499 [ # # ][ # # ]: 0 : if( !pLink && !bColor )
3500 : : {
3501 : : // keine Farbe und kein Link, aber ein transparenter Brush
3502 [ # # ][ # # ]: 0 : if( bTransparent && CSS1_BACKGROUND_FLY != nMode )
3503 [ # # ]: 0 : sOut.AssignAscii( sCSS1_PV_transparent );
3504 : : }
3505 : : else
3506 : : {
3507 [ # # ]: 0 : if( bColor )
3508 : : {
3509 [ # # ]: 0 : rtl::OString sTmp(GetCSS1Color(aColor));
3510 : : sOut += String(rtl::OStringToOUString(sTmp,
3511 [ # # ][ # # ]: 0 : RTL_TEXTENCODING_ASCII_US));
[ # # ][ # # ]
3512 : : }
3513 : :
3514 [ # # ]: 0 : if( pLink )
3515 : : {
3516 [ # # ]: 0 : if( bColor )
3517 [ # # ]: 0 : sOut += ' ';
3518 : :
3519 [ # # ]: 0 : sOut.AppendAscii( sCSS1_url );
3520 [ # # ]: 0 : sOut.Append( '(' );
3521 : 0 : sOut.Append( String(URIHelper::simpleNormalizedMakeRelative(rWrt.GetBaseURL(),
3522 [ # # # # ]: 0 : *pLink)));
[ # # ][ # # ]
[ # # ][ # # ]
3523 : :
3524 [ # # ]: 0 : sOut.Append( ')' );
3525 : :
3526 [ # # ]: 0 : if( pRepeat )
3527 : : {
3528 [ # # ]: 0 : sOut.Append( ' ' );
3529 [ # # ]: 0 : sOut.AppendAscii( pRepeat );
3530 : : }
3531 : :
3532 [ # # ]: 0 : if( pHori )
3533 : : {
3534 [ # # ]: 0 : sOut.Append( ' ' );
3535 [ # # ]: 0 : sOut.AppendAscii( pHori );
3536 : : }
3537 [ # # ]: 0 : if( pVert )
3538 : : {
3539 [ # # ]: 0 : sOut.Append( ' ' );
3540 [ # # ]: 0 : sOut.AppendAscii( pVert );
3541 : : }
3542 : :
3543 [ # # ]: 0 : sOut.Append( ' ' );
3544 [ # # ]: 0 : sOut.AppendAscii( sCSS1_PV_scroll );
3545 : : }
3546 : : }
3547 : :
3548 [ # # ]: 0 : if( sOut.Len() )
3549 [ # # ]: 0 : rHTMLWrt.OutCSS1_Property( sCSS1_P_background, sOut );
3550 : :
3551 [ # # ][ # # ]: 0 : return rWrt;
3552 : : }
3553 : :
3554 : 0 : static void OutCSS1_SvxBorderLine( SwHTMLWriter& rHTMLWrt,
3555 : : const sal_Char *pProperty,
3556 : : const SvxBorderLine *pLine )
3557 : : {
3558 [ # # ][ # # ]: 0 : if( !pLine || pLine->isEmpty() )
[ # # ]
3559 : : {
3560 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii( pProperty, sCSS1_PV_none );
3561 : 0 : return;
3562 : : }
3563 : :
3564 : 0 : sal_Int32 nWidth = pLine->GetWidth();
3565 : :
3566 : 0 : rtl::OStringBuffer sOut;
3567 [ # # # # ]: 0 : if( Application::GetDefaultDevice() &&
[ # # ][ # # ]
3568 : : nWidth <= Application::GetDefaultDevice()->PixelToLogic(
3569 [ # # ][ # # ]: 0 : Size( 1, 1 ), MapMode( MAP_TWIP) ).Width() )
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # #
# # # # ]
3570 : : {
3571 : : // Wenn die Breite kleiner ist als ein Pixel, dann als 1px
3572 : : // ausgeben, damit Netscape und IE die Linie auch darstellen.
3573 [ # # ]: 0 : sOut.append(RTL_CONSTASCII_STRINGPARAM("1px"));
3574 : : }
3575 : : else
3576 : : {
3577 : 0 : nWidth *= 5; // 1/100pt
3578 : :
3579 : : // Breite als n.nn pt
3580 [ # # ]: 0 : sOut.append(static_cast<sal_Int32>(nWidth / 100));
3581 [ # # ][ # # ]: 0 : sOut.append('.').append(static_cast<sal_Int32>((nWidth/10) % 10)).
3582 [ # # ][ # # ]: 0 : append(static_cast<sal_Int32>(nWidth % 10)).append(sCSS1_UNIT_pt);
3583 : : }
3584 : :
3585 : : // Linien-Stil: solid oder double
3586 [ # # ]: 0 : sOut.append(' ');
3587 [ # # # # : 0 : switch (pLine->GetBorderLineStyle())
# # # #
# ]
3588 : : {
3589 : : case table::BorderLineStyle::SOLID:
3590 [ # # ]: 0 : sOut.append(sCSS1_PV_solid);
3591 : 0 : break;
3592 : : case table::BorderLineStyle::DOTTED:
3593 [ # # ]: 0 : sOut.append(sCSS1_PV_dotted);
3594 : 0 : break;
3595 : : case table::BorderLineStyle::DASHED:
3596 [ # # ]: 0 : sOut.append(sCSS1_PV_dashed);
3597 : 0 : break;
3598 : : case table::BorderLineStyle::DOUBLE:
3599 : : case table::BorderLineStyle::THINTHICK_SMALLGAP:
3600 : : case table::BorderLineStyle::THINTHICK_MEDIUMGAP:
3601 : : case table::BorderLineStyle::THINTHICK_LARGEGAP:
3602 : : case table::BorderLineStyle::THICKTHIN_SMALLGAP:
3603 : : case table::BorderLineStyle::THICKTHIN_MEDIUMGAP:
3604 : : case table::BorderLineStyle::THICKTHIN_LARGEGAP:
3605 [ # # ]: 0 : sOut.append(sCSS1_PV_double);
3606 : 0 : break;
3607 : : case table::BorderLineStyle::EMBOSSED:
3608 [ # # ]: 0 : sOut.append(sCSS1_PV_ridge);
3609 : 0 : break;
3610 : : case table::BorderLineStyle::ENGRAVED:
3611 [ # # ]: 0 : sOut.append(sCSS1_PV_groove);
3612 : 0 : break;
3613 : : case table::BorderLineStyle::INSET:
3614 [ # # ]: 0 : sOut.append(sCSS1_PV_inset);
3615 : 0 : break;
3616 : : case table::BorderLineStyle::OUTSET:
3617 [ # # ]: 0 : sOut.append(sCSS1_PV_outset);
3618 : 0 : break;
3619 : : default:
3620 [ # # ]: 0 : sOut.append(sCSS1_PV_none);
3621 : : }
3622 [ # # ]: 0 : sOut.append(' ');
3623 : :
3624 : : // und noch die Farbe
3625 [ # # ][ # # ]: 0 : sOut.append(GetCSS1Color(pLine->GetColor()));
3626 : :
3627 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii(pProperty, sOut.makeStringAndClear());
3628 : : }
3629 : :
3630 : 0 : Writer& OutCSS1_SvxBox( Writer& rWrt, const SfxPoolItem& rHt )
3631 : : {
3632 : 0 : SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
3633 : :
3634 : 0 : const SvxBoxItem& rBoxItem = (const SvxBoxItem&)rHt;
3635 : 0 : const SvxBorderLine *pTop = rBoxItem.GetTop();
3636 : 0 : const SvxBorderLine *pBottom = rBoxItem.GetBottom();
3637 : 0 : const SvxBorderLine *pLeft = rBoxItem.GetLeft();
3638 : 0 : const SvxBorderLine *pRight = rBoxItem.GetRight();
3639 : :
3640 [ # # ][ # # ]: 0 : if( (pTop && pBottom && pLeft && pRight &&
[ # # # #
# # # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
3641 : 0 : *pTop == *pBottom && *pTop == *pLeft && *pTop == *pRight) ||
3642 : : (!pTop && !pBottom && !pLeft && !pRight) )
3643 : : {
3644 : : // alle Linien gesetzt und gleich oder alle Linien nicht gesetzt
3645 : : // => border : ...
3646 : 0 : OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border, pTop );
3647 : : }
3648 : : else
3649 : : {
3650 : : // sonst alle Linien individuell ausgeben
3651 : 0 : OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_top, pTop );
3652 : 0 : OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_bottom, pBottom );
3653 : 0 : OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_left, pLeft );
3654 : 0 : OutCSS1_SvxBorderLine( rHTMLWrt, sCSS1_P_border_right, pRight );
3655 : : }
3656 : :
3657 [ # # ]: 0 : long nTopDist = pTop ? rBoxItem.GetDistance( BOX_LINE_TOP ) : 0;
3658 [ # # ]: 0 : long nBottomDist = pBottom ? rBoxItem.GetDistance( BOX_LINE_BOTTOM ) : 0;
3659 [ # # ]: 0 : long nLeftDist = pLeft ? rBoxItem.GetDistance( BOX_LINE_LEFT ) : 0;
3660 [ # # ]: 0 : long nRightDist = pRight ? rBoxItem.GetDistance( BOX_LINE_RIGHT ) : 0;
3661 : :
3662 [ # # ][ # # ]: 0 : if( nTopDist == nBottomDist && nLeftDist == nRightDist )
3663 : : {
3664 : 0 : rtl::OStringBuffer sVal;
3665 [ # # ]: 0 : AddUnitPropertyValue(sVal, nTopDist, rHTMLWrt.GetCSS1Unit());
3666 [ # # ]: 0 : if( nTopDist != nLeftDist )
3667 : : {
3668 [ # # ]: 0 : sVal.append(' ');
3669 [ # # ]: 0 : AddUnitPropertyValue(sVal, nLeftDist, rHTMLWrt.GetCSS1Unit());
3670 : : }
3671 [ # # ]: 0 : rHTMLWrt.OutCSS1_PropertyAscii(sCSS1_P_padding, sVal.makeStringAndClear());
3672 : : }
3673 : : else
3674 : : {
3675 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_padding_top, nTopDist );
3676 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_padding_bottom, nBottomDist );
3677 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_padding_left, nLeftDist );
3678 : 0 : rHTMLWrt.OutCSS1_UnitProperty( sCSS1_P_padding_right, nRightDist );
3679 : : }
3680 : :
3681 : 0 : return rWrt;
3682 : : }
3683 : :
3684 : 0 : static Writer& OutCSS1_SvxFrameDirection( Writer& rWrt, const SfxPoolItem& rHt )
3685 : : {
3686 : 0 : SwHTMLWriter& rHTMLWrt = static_cast< SwHTMLWriter& >( rWrt );
3687 : :
3688 : : // Language will be exported rules only
3689 [ # # ]: 0 : if( !rHTMLWrt.IsCSS1Source( CSS1_OUTMODE_TEMPLATE ) )
3690 : 0 : return rWrt;
3691 : :
3692 : : sal_uInt16 nDir =
3693 : 0 : static_cast< const SvxFrameDirectionItem& >( rHt ).GetValue();
3694 : 0 : sal_Char *pStr = 0;
3695 [ # # # # ]: 0 : switch( nDir )
3696 : : {
3697 : : case FRMDIR_HORI_LEFT_TOP:
3698 : : case FRMDIR_VERT_TOP_LEFT:
3699 : 0 : pStr = sCSS1_PV_ltr;
3700 : 0 : break;
3701 : : case FRMDIR_HORI_RIGHT_TOP:
3702 : : case FRMDIR_VERT_TOP_RIGHT:
3703 : 0 : pStr = sCSS1_PV_rtl;
3704 : 0 : break;
3705 : : case FRMDIR_ENVIRONMENT:
3706 : 0 : pStr = sCSS1_PV_inherit;
3707 : 0 : break;
3708 : : }
3709 : :
3710 [ # # ]: 0 : if( pStr )
3711 : 0 : rHTMLWrt.OutCSS1_PropertyAscii( sCSS1_P_direction, pStr );
3712 : :
3713 : 0 : return rWrt;
3714 : : }
3715 : :
3716 : : /*
3717 : : * lege hier die Tabellen fuer die HTML-Funktions-Pointer auf
3718 : : * die Ausgabe-Funktionen an.
3719 : : * Es sind lokale Strukturen, die nur innerhalb der HTML-DLL
3720 : : * bekannt sein muessen.
3721 : : */
3722 : :
3723 : :
3724 : : SwAttrFnTab aCSS1AttrFnTab = {
3725 : : /* RES_CHRATR_CASEMAP */ OutCSS1_SvxCaseMap,
3726 : : /* RES_CHRATR_CHARSETCOLOR */ 0,
3727 : : /* RES_CHRATR_COLOR */ OutCSS1_SvxColor,
3728 : : /* RES_CHRATR_CONTOUR */ 0,
3729 : : /* RES_CHRATR_CROSSEDOUT */ OutCSS1_SvxCrossedOut,
3730 : : /* RES_CHRATR_ESCAPEMENT */ 0,
3731 : : /* RES_CHRATR_FONT */ OutCSS1_SvxFont,
3732 : : /* RES_CHRATR_FONTSIZE */ OutCSS1_SvxFontHeight,
3733 : : /* RES_CHRATR_KERNING */ OutCSS1_SvxKerning,
3734 : : /* RES_CHRATR_LANGUAGE */ OutCSS1_SvxLanguage,
3735 : : /* RES_CHRATR_POSTURE */ OutCSS1_SvxPosture,
3736 : : /* RES_CHRATR_PROPORTIONALFONTSIZE*/0,
3737 : : /* RES_CHRATR_SHADOWED */ 0,
3738 : : /* RES_CHRATR_UNDERLINE */ OutCSS1_SvxUnderline,
3739 : : /* RES_CHRATR_WEIGHT */ OutCSS1_SvxFontWeight,
3740 : : /* RES_CHRATR_WORDLINEMODE */ 0,
3741 : : /* RES_CHRATR_AUTOKERN */ 0,
3742 : : /* RES_CHRATR_BLINK */ OutCSS1_SvxBlink,
3743 : : /* RES_CHRATR_NOHYPHEN */ 0, // Neu: nicht trennen
3744 : : /* RES_CHRATR_NOLINEBREAK */ 0, // Neu: nicht umbrechen
3745 : : /* RES_CHRATR_BACKGROUND */ OutCSS1_SvxBrush, // Neu: Zeichenhintergrund
3746 : : /* RES_CHRATR_CJK_FONT */ OutCSS1_SvxFont,
3747 : : /* RES_CHRATR_CJK_FONTSIZE */ OutCSS1_SvxFontHeight,
3748 : : /* RES_CHRATR_CJK_LANGUAGE */ OutCSS1_SvxLanguage,
3749 : : /* RES_CHRATR_CJK_POSTURE */ OutCSS1_SvxPosture,
3750 : : /* RES_CHRATR_CJK_WEIGHT */ OutCSS1_SvxFontWeight,
3751 : : /* RES_CHRATR_CTL_FONT */ OutCSS1_SvxFont,
3752 : : /* RES_CHRATR_CTL_FONTSIZE */ OutCSS1_SvxFontHeight,
3753 : : /* RES_CHRATR_CTL_LANGUAGE */ OutCSS1_SvxLanguage,
3754 : : /* RES_CHRATR_CTL_POSTURE */ OutCSS1_SvxPosture,
3755 : : /* RES_CHRATR_CTL_WEIGHT */ OutCSS1_SvxFontWeight,
3756 : : /* RES_CHRATR_ROTATE */ 0,
3757 : : /* RES_CHRATR_EMPHASIS_MARK */ 0,
3758 : : /* RES_CHRATR_TWO_LINES */ 0,
3759 : : /* RES_CHRATR_SCALEW */ 0,
3760 : : /* RES_CHRATR_RELIEF */ 0,
3761 : : /* RES_CHRATR_HIDDEN */ 0,
3762 : : /* RES_CHRATR_OVERLINE */ OutCSS1_SvxOverline,
3763 : : /* RES_CHRATR_RSID */ 0,
3764 : : /* RES_CHRATR_DUMMY1 */ 0,
3765 : :
3766 : : /* RES_TXTATR_REFMARK */ 0,
3767 : : /* RES_TXTATR_TOXMARK */ 0,
3768 : : /* RES_TXTATR_META */ 0,
3769 : : /* RES_TXTATR_METAFIELD */ 0,
3770 : : /* RES_TXTATR_AUTOFMT */ 0,
3771 : : /* RES_TXTATR_INETFMT */ 0,
3772 : : /* RES_TXTATR_CHARFMT */ 0,
3773 : : /* RES_TXTATR_CJK_RUBY */ 0,
3774 : : /* RES_TXTATR_UNKNOWN_CONTAINER */ 0,
3775 : : /* RES_TXTATR_DUMMY5 */ 0,
3776 : :
3777 : : /* RES_TXTATR_FIELD */ 0,
3778 : : /* RES_TXTATR_FLYCNT */ 0,
3779 : : /* RES_TXTATR_FTN */ 0,
3780 : : /* RES_TXTATR_DUMMY4 */ 0,
3781 : : /* RES_TXTATR_DUMMY3 */ 0,
3782 : : /* RES_TXTATR_DUMMY1 */ 0, // Dummy:
3783 : : /* RES_TXTATR_DUMMY2 */ 0, // Dummy:
3784 : :
3785 : : /* RES_PARATR_LINESPACING */ OutCSS1_SvxLineSpacing,
3786 : : /* RES_PARATR_ADJUST */ OutCSS1_SvxAdjust,
3787 : : /* RES_PARATR_SPLIT */ OutCSS1_SvxFmtSplit,
3788 : : /* RES_PARATR_WIDOWS */ OutCSS1_SvxWidows,
3789 : : /* RES_PARATR_ORPHANS */ OutCSS1_SvxOrphans,
3790 : : /* RES_PARATR_TABSTOP */ 0,
3791 : : /* RES_PARATR_HYPHENZONE*/ 0,
3792 : : /* RES_PARATR_DROP */ OutCSS1_SwFmtDrop,
3793 : : /* RES_PARATR_REGISTER */ 0, // neu: Registerhaltigkeit
3794 : : /* RES_PARATR_NUMRULE */ 0, // Dummy:
3795 : : /* RES_PARATR_SCRIPTSPACE */ 0, // Dummy:
3796 : : /* RES_PARATR_HANGINGPUNCTUATION */ 0, // Dummy:
3797 : : /* RES_PARATR_FORBIDDEN_RULES */ 0, // new
3798 : : /* RES_PARATR_VERTALIGN */ 0, // new
3799 : : /* RES_PARATR_SNAPTOGRID*/ 0, // new
3800 : : /* RES_PARATR_CONNECT_TO_BORDER */ 0, // new
3801 : : /* RES_PARATR_OUTLINELEVEL */ 0, // new since cws outlinelevel
3802 : : /* RES_PARATR_RSID */ 0, // new
3803 : :
3804 : : /* RES_PARATR_LIST_ID */ 0, // new
3805 : : /* RES_PARATR_LIST_LEVEL */ 0, // new
3806 : : /* RES_PARATR_LIST_ISRESTART */ 0, // new
3807 : : /* RES_PARATR_LIST_RESTARTVALUE */ 0, // new
3808 : : /* RES_PARATR_LIST_ISCOUNTED */ 0, // new
3809 : :
3810 : : /* RES_FILL_ORDER */ 0,
3811 : : /* RES_FRM_SIZE */ 0,
3812 : : /* RES_PAPER_BIN */ 0,
3813 : : /* RES_LR_SPACE */ OutCSS1_SvxLRSpace,
3814 : : /* RES_UL_SPACE */ OutCSS1_SvxULSpace,
3815 : : /* RES_PAGEDESC */ 0,
3816 : : /* RES_BREAK */ 0,
3817 : : /* RES_CNTNT */ 0,
3818 : : /* RES_HEADER */ 0,
3819 : : /* RES_FOOTER */ 0,
3820 : : /* RES_PRINT */ 0,
3821 : : /* RES_OPAQUE */ 0,
3822 : : /* RES_PROTECT */ 0,
3823 : : /* RES_SURROUND */ 0,
3824 : : /* RES_VERT_ORIENT */ 0,
3825 : : /* RES_HORI_ORIENT */ 0,
3826 : : /* RES_ANCHOR */ 0,
3827 : : /* RES_BACKGROUND */ OutCSS1_SvxBrush,
3828 : : /* RES_BOX */ OutCSS1_SvxBox,
3829 : : /* RES_SHADOW */ 0,
3830 : : /* RES_FRMMACRO */ 0,
3831 : : /* RES_COL */ 0,
3832 : : /* RES_KEEP */ 0,
3833 : : /* RES_URL */ 0,
3834 : : /* RES_EDIT_IN_READONLY */ 0,
3835 : : /* RES_LAYOUT_SPLIT */ 0,
3836 : : /* RES_CHAIN */ 0,
3837 : : /* RES_TEXTGRID */ 0,
3838 : : /* RES_LINENUMBER */ 0,
3839 : : /* RES_FTN_AT_TXTEND */ 0,
3840 : : /* RES_END_AT_TXTEND */ 0,
3841 : : /* RES_COLUMNBALANCE */ 0,
3842 : : /* RES_FRAMEDIR */ OutCSS1_SvxFrameDirection,
3843 : : /* RES_HEADER_FOOTER_EAT_SPACING */ 0,
3844 : : /* RES_FRMATR_DUMMY9 */ 0, // Dummy:
3845 : : /* RES_FOLLOW_TEXT_FLOW */ 0,
3846 : : /* RES_WRAP_INFLUENCE_ON_OBJPOS */ 0,
3847 : : /* RES_FRMATR_DUMMY2 */ 0, // Dummy:
3848 : : /* RES_AUTO_STYLE */ 0, // Dummy:
3849 : : /* RES_FRMATR_DUMMY4 */ 0, // Dummy:
3850 : : /* RES_FRMATR_DUMMY5 */ 0, // Dummy:
3851 : :
3852 : : /* RES_GRFATR_MIRRORGRF */ 0,
3853 : : /* RES_GRFATR_CROPGRF */ 0,
3854 : : /* RES_GRFATR_ROTATION */ 0,
3855 : : /* RES_GRFATR_LUMINANCE */ 0,
3856 : : /* RES_GRFATR_CONTRAST */ 0,
3857 : : /* RES_GRFATR_CHANNELR */ 0,
3858 : : /* RES_GRFATR_CHANNELG */ 0,
3859 : : /* RES_GRFATR_CHANNELB */ 0,
3860 : : /* RES_GRFATR_GAMMA */ 0,
3861 : : /* RES_GRFATR_INVERT */ 0,
3862 : : /* RES_GRFATR_TRANSPARENCY */ 0,
3863 : : /* RES_GRFATR_DRWAMODE */ 0,
3864 : : /* RES_GRFATR_DUMMY1 */ 0,
3865 : : /* RES_GRFATR_DUMMY2 */ 0,
3866 : : /* RES_GRFATR_DUMMY3 */ 0,
3867 : : /* RES_GRFATR_DUMMY4 */ 0,
3868 : : /* RES_GRFATR_DUMMY5 */ 0,
3869 : :
3870 : : /* RES_BOXATR_FORMAT */ 0,
3871 : : /* RES_BOXATR_FORMULA */ 0,
3872 : : /* RES_BOXATR_VALUE */ 0
3873 : : };
3874 : :
3875 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|