LCOV - code coverage report
Current view: top level - sw/source/filter/html - css1atr.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 251 1661 15.1 %
Date: 2012-08-25 Functions: 18 68 26.5 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 186 2311 8.0 %

           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: */

Generated by: LCOV version 1.10