LCOV - code coverage report
Current view: top level - sw/source/filter/html - htmlfldw.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 0 287 0.0 %
Date: 2012-08-25 Functions: 0 3 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 579 0.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 <com/sun/star/i18n/ScriptType.hpp>
      30                 :            : #include <comphelper/string.hxx>
      31                 :            : #include <tools/string.hxx>
      32                 :            : #include <svtools/htmlkywd.hxx>
      33                 :            : #include <svtools/htmlout.hxx>
      34                 :            : #include <svtools/htmltokn.h>
      35                 :            : #include <fmtfld.hxx>
      36                 :            : #include <doc.hxx>
      37                 :            : #include <breakit.hxx>
      38                 :            : #include <ndtxt.hxx>
      39                 :            : #include <txtfld.hxx>
      40                 :            : #include "fldbas.hxx"
      41                 :            : #include "docufld.hxx"
      42                 :            : #include "flddat.hxx"
      43                 :            : #include "htmlfld.hxx"
      44                 :            : #include "wrthtml.hxx"
      45                 :            : #include <rtl/strbuf.hxx>
      46                 :            : 
      47                 :            : using namespace nsSwDocInfoSubType;
      48                 :            : 
      49                 :          0 : const sal_Char *SwHTMLWriter::GetNumFormat( sal_uInt16 nFmt )
      50                 :            : {
      51                 :          0 :     const sal_Char *pFmtStr = 0;
      52                 :            : 
      53   [ #  #  #  #  :          0 :     switch( (SvxExtNumType)nFmt )
          #  #  #  #  #  
                   #  # ]
      54                 :            :     {
      55                 :          0 :     case SVX_NUM_CHARS_UPPER_LETTER:    pFmtStr = OOO_STRING_SW_HTML_FF_uletter;    break;
      56                 :          0 :     case SVX_NUM_CHARS_LOWER_LETTER:    pFmtStr = OOO_STRING_SW_HTML_FF_lletter;    break;
      57                 :          0 :     case SVX_NUM_ROMAN_UPPER:           pFmtStr = OOO_STRING_SW_HTML_FF_uroman;         break;
      58                 :          0 :     case SVX_NUM_ROMAN_LOWER:           pFmtStr = OOO_STRING_SW_HTML_FF_lroman;         break;
      59                 :          0 :     case SVX_NUM_ARABIC:                pFmtStr = OOO_STRING_SW_HTML_FF_arabic;     break;
      60                 :          0 :     case SVX_NUM_NUMBER_NONE:           pFmtStr = OOO_STRING_SW_HTML_FF_none;       break;
      61                 :          0 :     case SVX_NUM_CHAR_SPECIAL:          pFmtStr = OOO_STRING_SW_HTML_FF_char;       break;
      62                 :          0 :     case SVX_NUM_PAGEDESC:              pFmtStr = OOO_STRING_SW_HTML_FF_page;       break;
      63                 :          0 :     case SVX_NUM_CHARS_UPPER_LETTER_N:  pFmtStr = OOO_STRING_SW_HTML_FF_ulettern;   break;
      64                 :          0 :     case SVX_NUM_CHARS_LOWER_LETTER_N:  pFmtStr = OOO_STRING_SW_HTML_FF_llettern;   break;
      65                 :            :     default:
      66                 :            :         ;
      67                 :            :     }
      68                 :            : 
      69                 :          0 :     return pFmtStr;
      70                 :            : }
      71                 :            : 
      72                 :            : extern sal_Bool lcl_css1atr_equalFontItems( const SfxPoolItem& r1, const SfxPoolItem& r2 );
      73                 :          0 : static Writer& OutHTML_SwField( Writer& rWrt, const SwField* pFld,
      74                 :            :                                  const SwTxtNode& rTxtNd, xub_StrLen nFldPos )
      75                 :            : {
      76                 :          0 :     SwHTMLWriter & rHTMLWrt = (SwHTMLWriter&)rWrt;
      77                 :            : 
      78                 :          0 :     const SwFieldType* pFldTyp = pFld->GetTyp();
      79                 :          0 :     sal_uInt16 nField = pFldTyp->Which();
      80                 :          0 :     sal_uLong nFmt = pFld->GetFormat();
      81                 :            : 
      82                 :          0 :     const sal_Char *pTypeStr=0, // TYPE
      83                 :          0 :                       *pSubStr=0,   // SUBTYPE
      84                 :          0 :                    *pFmtStr=0;  // FORMAT (SW)
      85         [ #  # ]:          0 :     String aValue;              // VALUE (SW)
      86                 :          0 :     sal_Bool bNumFmt=sal_False;         // SDNUM (Number-Formatter-Format)
      87                 :          0 :     sal_Bool bNumValue=sal_False;       // SDVAL (Number-Formatter-Value)
      88                 :          0 :     double dNumValue = 0.0;     // SDVAL (Number-Formatter-Value)
      89                 :          0 :     sal_Bool bFixed=sal_False;          // SDFIXED
      90         [ #  # ]:          0 :     String aName;               // NAME (CUSTOM)
      91                 :            : 
      92   [ #  #  #  #  :          0 :     switch( nField )
             #  #  #  # ]
      93                 :            :     {
      94                 :            :         case RES_EXTUSERFLD:
      95                 :          0 :             pTypeStr = OOO_STRING_SW_HTML_FT_sender;
      96 [ #  # ][ #  #  :          0 :             switch( (SwExtUserSubType)pFld->GetSubType() )
          #  #  #  #  #  
          #  #  #  #  #  
             #  #  #  # ]
      97                 :            :             {
      98                 :          0 :                 case EU_COMPANY:    pSubStr = OOO_STRING_SW_HTML_FS_company;        break;
      99                 :          0 :                 case EU_FIRSTNAME:  pSubStr = OOO_STRING_SW_HTML_FS_firstname;  break;
     100                 :          0 :                 case EU_NAME:       pSubStr = OOO_STRING_SW_HTML_FS_name;       break;
     101                 :          0 :                 case EU_SHORTCUT:   pSubStr = OOO_STRING_SW_HTML_FS_shortcut;   break;
     102                 :          0 :                 case EU_STREET:     pSubStr = OOO_STRING_SW_HTML_FS_street;     break;
     103                 :          0 :                 case EU_COUNTRY:    pSubStr = OOO_STRING_SW_HTML_FS_country;     break;
     104                 :          0 :                 case EU_ZIP:        pSubStr = OOO_STRING_SW_HTML_FS_zip;         break;
     105                 :          0 :                 case EU_CITY:       pSubStr = OOO_STRING_SW_HTML_FS_city;        break;
     106                 :          0 :                 case EU_TITLE:      pSubStr = OOO_STRING_SW_HTML_FS_title;       break;
     107                 :          0 :                 case EU_POSITION:   pSubStr = OOO_STRING_SW_HTML_FS_position;    break;
     108                 :          0 :                 case EU_PHONE_PRIVATE:  pSubStr = OOO_STRING_SW_HTML_FS_pphone;      break;
     109                 :          0 :                 case EU_PHONE_COMPANY:  pSubStr = OOO_STRING_SW_HTML_FS_cphone;      break;
     110                 :          0 :                 case EU_FAX:        pSubStr = OOO_STRING_SW_HTML_FS_fax;         break;
     111                 :          0 :                 case EU_EMAIL:      pSubStr = OOO_STRING_SW_HTML_FS_email;       break;
     112                 :          0 :                 case EU_STATE:      pSubStr = OOO_STRING_SW_HTML_FS_state;       break;
     113                 :            :                 default:
     114                 :            :                     ;
     115                 :            :             }
     116                 :            :             OSL_ENSURE( pSubStr, "ubekannter Subtyp fuer SwExtUserField" );
     117         [ #  # ]:          0 :             bFixed = ((const SwExtUserField*)pFld)->IsFixed();
     118                 :          0 :             break;
     119                 :            : 
     120                 :            :         case RES_AUTHORFLD:
     121                 :          0 :             pTypeStr = OOO_STRING_SW_HTML_FT_author;
     122      [ #  #  # ]:          0 :             switch( (SwAuthorFormat)nFmt & 0xff)
     123                 :            :             {
     124                 :          0 :                 case AF_NAME:     pFmtStr = OOO_STRING_SW_HTML_FF_name;     break;
     125                 :          0 :                 case AF_SHORTCUT:  pFmtStr = OOO_STRING_SW_HTML_FF_shortcut;    break;
     126                 :            :             }
     127                 :            :             OSL_ENSURE( pFmtStr, "ubekanntes Format fuer SwAuthorField" );
     128         [ #  # ]:          0 :             bFixed = ((const SwAuthorField*)pFld)->IsFixed();
     129                 :          0 :             break;
     130                 :            : 
     131                 :            :         case RES_DATETIMEFLD:
     132                 :          0 :             pTypeStr = OOO_STRING_SW_HTML_FT_datetime;
     133                 :          0 :             bNumFmt = sal_True;
     134 [ #  # ][ #  # ]:          0 :             if( ((SwDateTimeField*)pFld)->IsFixed() )
     135                 :            :             {
     136                 :          0 :                 bNumValue = sal_True;
     137         [ #  # ]:          0 :                 dNumValue = ((SwDateTimeField*)pFld)->GetValue();
     138                 :            :             }
     139                 :          0 :             break;
     140                 :            : 
     141                 :            :         case RES_PAGENUMBERFLD:
     142                 :            :             {
     143                 :          0 :                 pTypeStr = OOO_STRING_SW_HTML_FT_page;
     144         [ #  # ]:          0 :                 SwPageNumSubType eSubType = (SwPageNumSubType)pFld->GetSubType();
     145   [ #  #  #  # ]:          0 :                 switch( eSubType )
     146                 :            :                 {
     147                 :          0 :                     case PG_RANDOM:     pSubStr = OOO_STRING_SW_HTML_FS_random;     break;
     148                 :          0 :                     case PG_NEXT:       pSubStr = OOO_STRING_SW_HTML_FS_next;       break;
     149                 :          0 :                     case PG_PREV:       pSubStr = OOO_STRING_SW_HTML_FS_prev;       break;
     150                 :            :                 }
     151                 :            :                 OSL_ENSURE( pSubStr, "ubekannter Subtyp fuer SwPageNumberField" );
     152                 :          0 :                 pFmtStr = SwHTMLWriter::GetNumFormat( static_cast< sal_uInt16 >(nFmt) );
     153                 :            : 
     154         [ #  # ]:          0 :                 if( (SvxExtNumType)nFmt==SVX_NUM_CHAR_SPECIAL )
     155                 :            :                 {
     156         [ #  # ]:          0 :                     aValue = ((const SwPageNumberField *)pFld)->GetUserString();
     157                 :            :                 }
     158                 :            :                 else
     159                 :            :                 {
     160 [ #  # ][ #  # ]:          0 :                     const String& rValue = pFld->GetPar2();
     161         [ #  # ]:          0 :                     short nValue = (short)rValue.ToInt32();
     162 [ #  # ][ #  # ]:          0 :                     if( (eSubType == PG_NEXT && nValue!=1) ||
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     163                 :            :                         (eSubType == PG_PREV && nValue!=-1) ||
     164                 :            :                         (eSubType == PG_RANDOM && nValue!=0) )
     165                 :            :                     {
     166         [ #  # ]:          0 :                         aValue = rValue;
     167         [ #  # ]:          0 :                     }
     168                 :            :                 }
     169                 :            :             }
     170                 :          0 :             break;
     171                 :            :         case RES_DOCINFOFLD:
     172                 :            :             {
     173         [ #  # ]:          0 :                 sal_uInt16 nSubType = pFld->GetSubType();
     174                 :          0 :                 pTypeStr = OOO_STRING_SW_HTML_FT_docinfo;
     175                 :          0 :                 sal_uInt16 nExtSubType = nSubType & 0x0f00;
     176                 :          0 :                 nSubType &= 0x00ff;
     177                 :            : 
     178   [ #  #  #  #  :          0 :                 switch( nSubType )
             #  #  #  # ]
     179                 :            :                 {
     180                 :          0 :                     case DI_TITEL:      pSubStr = OOO_STRING_SW_HTML_FS_title;  break;
     181                 :          0 :                     case DI_THEMA:      pSubStr = OOO_STRING_SW_HTML_FS_theme;  break;
     182                 :          0 :                     case DI_KEYS:       pSubStr = OOO_STRING_SW_HTML_FS_keys;   break;
     183                 :          0 :                     case DI_COMMENT:    pSubStr = OOO_STRING_SW_HTML_FS_comment; break;
     184                 :          0 :                     case DI_CREATE:     pSubStr = OOO_STRING_SW_HTML_FS_create;     break;
     185                 :          0 :                     case DI_CHANGE:     pSubStr = OOO_STRING_SW_HTML_FS_change;     break;
     186                 :          0 :                     case DI_CUSTOM:     pSubStr = OOO_STRING_SW_HTML_FS_custom;     break;
     187                 :          0 :                     default:            pTypeStr = 0;               break;
     188                 :            :                 }
     189                 :            : 
     190         [ #  # ]:          0 :                 if( DI_CUSTOM == nSubType ) {
     191 [ #  # ][ #  # ]:          0 :                     aName = static_cast<const SwDocInfoField*>(pFld)->GetName();
                 [ #  # ]
     192                 :            :                 }
     193                 :            : 
     194 [ #  # ][ #  # ]:          0 :                 if( DI_CREATE == nSubType || DI_CHANGE == nSubType )
     195                 :            :                 {
     196   [ #  #  #  # ]:          0 :                     switch( nExtSubType )
     197                 :            :                     {
     198                 :            :                         case DI_SUB_AUTHOR:
     199                 :          0 :                             pFmtStr = OOO_STRING_SW_HTML_FF_author;
     200                 :          0 :                             break;
     201                 :            :                         case DI_SUB_TIME:
     202                 :          0 :                             pFmtStr = OOO_STRING_SW_HTML_FF_time;
     203                 :          0 :                             bNumFmt = sal_True;
     204                 :          0 :                             break;
     205                 :            :                         case DI_SUB_DATE:
     206                 :          0 :                             pFmtStr = OOO_STRING_SW_HTML_FF_date;
     207                 :          0 :                             bNumFmt = sal_True;
     208                 :          0 :                             break;
     209                 :            :                     }
     210                 :            :                 }
     211         [ #  # ]:          0 :                 bFixed = ((const SwDocInfoField*)pFld)->IsFixed();
     212         [ #  # ]:          0 :                 if( bNumFmt )
     213                 :            :                 {
     214         [ #  # ]:          0 :                     if( bFixed )
     215                 :            :                     {
     216                 :            :                         // Fuer ein fixes Feld och den Num-Value ausgeben.
     217                 :            :                         // Fixe Felder ohne Zahlenformate sollte es
     218                 :            :                         // eigentlich nicht geben. OSL_ENSURE(ist unten.
     219         [ #  # ]:          0 :                         dNumValue = ((const SwDocInfoField*)pFld)->GetValue();
     220                 :          0 :                         bNumValue = sal_True;
     221                 :            :                     }
     222         [ #  # ]:          0 :                     else if( !nFmt  )
     223                 :            :                     {
     224                 :            :                         // Nicht fixe Felder muessen kein Zahlenformat haben,
     225                 :            :                         // wenn sie aus 4.0-Dokumenten stammen.
     226                 :          0 :                         bNumFmt = sal_False;
     227                 :            :                     }
     228                 :            :                 }
     229                 :            :             }
     230                 :          0 :             break;
     231                 :            : 
     232                 :            :         case RES_DOCSTATFLD:
     233                 :            :             {
     234                 :          0 :                 pTypeStr = OOO_STRING_SW_HTML_FT_docstat;
     235         [ #  # ]:          0 :                 sal_uInt16 nSubType = pFld->GetSubType();
     236   [ #  #  #  #  :          0 :                 switch( nSubType )
             #  #  #  # ]
     237                 :            :                 {
     238                 :          0 :                     case DS_PAGE:       pSubStr = OOO_STRING_SW_HTML_FS_page;   break;
     239                 :          0 :                     case DS_PARA:       pSubStr = OOO_STRING_SW_HTML_FS_para;   break;
     240                 :          0 :                     case DS_WORD:       pSubStr = OOO_STRING_SW_HTML_FS_word;   break;
     241                 :          0 :                     case DS_CHAR:       pSubStr = OOO_STRING_SW_HTML_FS_char;   break;
     242                 :          0 :                     case DS_TBL:        pSubStr = OOO_STRING_SW_HTML_FS_tbl;    break;
     243                 :          0 :                     case DS_GRF:        pSubStr = OOO_STRING_SW_HTML_FS_grf;    break;
     244                 :          0 :                     case DS_OLE:        pSubStr = OOO_STRING_SW_HTML_FS_ole;    break;
     245                 :          0 :                     default:            pTypeStr = 0;               break;
     246                 :            :                 }
     247                 :          0 :                 pFmtStr = SwHTMLWriter::GetNumFormat( static_cast< sal_uInt16 >(nFmt) );
     248                 :            :             }
     249                 :          0 :             break;
     250                 :            : 
     251                 :            :         case RES_FILENAMEFLD:
     252                 :          0 :             pTypeStr = OOO_STRING_SW_HTML_FT_filename;
     253   [ #  #  #  #  :          0 :             switch( (SwFileNameFormat)(nFmt & ~FF_FIXED) )
                      # ]
     254                 :            :             {
     255                 :          0 :                 case FF_NAME:       pFmtStr = OOO_STRING_SW_HTML_FF_name;       break;
     256                 :          0 :                 case FF_PATHNAME:   pFmtStr = OOO_STRING_SW_HTML_FF_pathname;   break;
     257                 :          0 :                 case FF_PATH:       pFmtStr = OOO_STRING_SW_HTML_FF_path;       break;
     258                 :          0 :                 case FF_NAME_NOEXT: pFmtStr = OOO_STRING_SW_HTML_FF_name_noext; break;
     259                 :            :                 default:
     260                 :            :                     ;
     261                 :            :             }
     262         [ #  # ]:          0 :             bFixed = ((const SwFileNameField*)pFld)->IsFixed();
     263                 :            :             OSL_ENSURE( pFmtStr, "unbekanntes Format fuer SwFileNameField" );
     264                 :          0 :             break;
     265                 :            :     }
     266                 :            : 
     267                 :            :     // <SDFIELD>-Tag ausgeben
     268         [ #  # ]:          0 :     if( pTypeStr )
     269                 :            :     {
     270                 :          0 :         rtl::OStringBuffer sOut;
     271         [ #  # ]:          0 :         sOut.append('<');
     272 [ #  # ][ #  # ]:          0 :         sOut.append(OOO_STRING_SVTOOLS_HTML_sdfield).append(' ').
     273 [ #  # ][ #  # ]:          0 :             append(OOO_STRING_SVTOOLS_HTML_O_type).append('=').
     274         [ #  # ]:          0 :             append(pTypeStr);
     275         [ #  # ]:          0 :         if( pSubStr )
     276                 :            :         {
     277 [ #  # ][ #  # ]:          0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_subtype).
     278 [ #  # ][ #  # ]:          0 :                 append('=').append(pSubStr);
     279                 :            :         }
     280         [ #  # ]:          0 :         if( pFmtStr )
     281                 :            :         {
     282 [ #  # ][ #  # ]:          0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_format).
     283 [ #  # ][ #  # ]:          0 :                 append('=').append(pFmtStr);
     284                 :            :         }
     285         [ #  # ]:          0 :         if( aName.Len() )
     286                 :            :         {
     287 [ #  # ][ #  # ]:          0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_name).
     288         [ #  # ]:          0 :                 append(RTL_CONSTASCII_STRINGPARAM("=\""));
     289 [ #  # ][ #  # ]:          0 :             rWrt.Strm() << sOut.makeStringAndClear().getStr();
     290 [ #  # ][ #  # ]:          0 :             HTMLOutFuncs::Out_String( rWrt.Strm(), aName, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
     291         [ #  # ]:          0 :             sOut.append('\"');
     292                 :            :         }
     293         [ #  # ]:          0 :         if( aValue.Len() )
     294                 :            :         {
     295 [ #  # ][ #  # ]:          0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_value).
     296         [ #  # ]:          0 :                 append(RTL_CONSTASCII_STRINGPARAM("=\""));
     297 [ #  # ][ #  # ]:          0 :             rWrt.Strm() << sOut.makeStringAndClear().getStr();
     298 [ #  # ][ #  # ]:          0 :             HTMLOutFuncs::Out_String( rWrt.Strm(), aValue, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
     299         [ #  # ]:          0 :             sOut.append('\"');
     300                 :            :         }
     301         [ #  # ]:          0 :         if( bNumFmt )
     302                 :            :         {
     303                 :            :             OSL_ENSURE( nFmt, "Zahlenformat ist 0" );
     304                 :            :             sOut.append(HTMLOutFuncs::CreateTableDataOptionsValNum(
     305                 :            :                 bNumValue, dNumValue, nFmt,
     306         [ #  # ]:          0 :                 *rHTMLWrt.pDoc->GetNumberFormatter(), rHTMLWrt.eDestEnc,
     307 [ #  # ][ #  # ]:          0 :                 &rHTMLWrt.aNonConvertableCharacters));
     308                 :            :         }
     309         [ #  # ]:          0 :         if( bFixed )
     310                 :            :         {
     311 [ #  # ][ #  # ]:          0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_sdfixed);
     312                 :            :         }
     313         [ #  # ]:          0 :         sOut.append('>');
     314 [ #  # ][ #  # ]:          0 :         rWrt.Strm() << sOut.makeStringAndClear().getStr();
     315                 :            :     }
     316                 :            : 
     317                 :            :     // Inhalt des Feldes ausgeben
     318         [ #  # ]:          0 :     String const sExpand( pFld->ExpandField(true) );
     319                 :          0 :     sal_Bool bNeedsCJKProcessing = sal_False;
     320         [ #  # ]:          0 :     if( sExpand.Len() )
     321                 :            :     {
     322 [ #  # ][ #  # ]:          0 :         sal_uInt16 nScriptType = pBreakIt->GetBreakIter()->getScriptType( sExpand, 0 );
         [ #  # ][ #  # ]
     323 [ #  # ][ #  # ]:          0 :         xub_StrLen nPos = (xub_StrLen)pBreakIt->GetBreakIter()->endOfScript( sExpand, 0,
     324 [ #  # ][ #  # ]:          0 :                                                           nScriptType );
     325                 :            : 
     326                 :            :         sal_uInt16 nScript =
     327         [ #  # ]:          0 :             SwHTMLWriter::GetCSS1ScriptForScriptType( nScriptType );
     328 [ #  # ][ #  # ]:          0 :         if( nPos < sExpand.Len() || nScript != rHTMLWrt.nCSS1Script )
                 [ #  # ]
     329                 :            :         {
     330                 :          0 :             bNeedsCJKProcessing = sal_True;
     331                 :            :         }
     332                 :            :     }
     333                 :            : 
     334         [ #  # ]:          0 :     if( bNeedsCJKProcessing )
     335                 :            :     {
     336                 :          0 :         SfxItemSet aScriptItemSet( rWrt.pDoc->GetAttrPool(),
     337                 :            :                                    RES_CHRATR_FONT, RES_CHRATR_FONTSIZE,
     338                 :            :                                    RES_CHRATR_POSTURE, RES_CHRATR_WEIGHT,
     339                 :            :                                    RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONTSIZE,
     340                 :            :                                    RES_CHRATR_CJK_POSTURE, RES_CHRATR_CJK_WEIGHT,
     341                 :            :                                    RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONTSIZE,
     342                 :            :                                    RES_CHRATR_CTL_POSTURE, RES_CHRATR_CTL_WEIGHT,
     343         [ #  # ]:          0 :                                    0 );
     344         [ #  # ]:          0 :         rTxtNd.GetAttr( aScriptItemSet, nFldPos, nFldPos+1 );
     345                 :            : 
     346                 :            :         sal_uInt16 aWesternWhichIds[4] =
     347                 :            :             { RES_CHRATR_FONT, RES_CHRATR_FONTSIZE,
     348                 :          0 :               RES_CHRATR_POSTURE, RES_CHRATR_WEIGHT };
     349                 :            :         sal_uInt16 aCJKWhichIds[4] =
     350                 :            :             { RES_CHRATR_CJK_FONT, RES_CHRATR_CJK_FONTSIZE,
     351                 :          0 :               RES_CHRATR_CJK_POSTURE, RES_CHRATR_CJK_WEIGHT };
     352                 :            :         sal_uInt16 aCTLWhichIds[4] =
     353                 :            :             { RES_CHRATR_CTL_FONT, RES_CHRATR_CTL_FONTSIZE,
     354                 :          0 :               RES_CHRATR_CTL_POSTURE, RES_CHRATR_CTL_WEIGHT };
     355                 :            : 
     356                 :          0 :         sal_uInt16 *pRefWhichIds = 0;
     357   [ #  #  #  # ]:          0 :         switch( rHTMLWrt.nCSS1Script )
     358                 :            :         {
     359                 :            :         case CSS1_OUTMODE_WESTERN:
     360                 :          0 :             pRefWhichIds = aWesternWhichIds;
     361                 :          0 :             break;
     362                 :            :         case CSS1_OUTMODE_CJK:
     363                 :          0 :             pRefWhichIds = aCJKWhichIds;
     364                 :          0 :             break;
     365                 :            :         case CSS1_OUTMODE_CTL:
     366                 :          0 :             pRefWhichIds = aCTLWhichIds;
     367                 :          0 :             break;
     368                 :            :         }
     369                 :            : 
     370                 :          0 :         xub_StrLen nPos = 0;
     371         [ #  # ]:          0 :         do
     372                 :            :         {
     373 [ #  # ][ #  # ]:          0 :             sal_uInt16 nScriptType = pBreakIt->GetBreakIter()->getScriptType( sExpand, nPos );
         [ #  # ][ #  # ]
     374                 :            :             sal_uInt16 nScript =
     375         [ #  # ]:          0 :                 SwHTMLWriter::GetCSS1ScriptForScriptType( nScriptType );
     376 [ #  # ][ #  # ]:          0 :             xub_StrLen nEndPos = (xub_StrLen)pBreakIt->GetBreakIter()->endOfScript(
     377 [ #  # ][ #  # ]:          0 :                                     sExpand, nPos, nScriptType );
     378 [ #  # ][ #  # ]:          0 :             if( nScript != CSS1_OUTMODE_ANY_SCRIPT &&
     379                 :            :                 /* #108791# */ nScript != rHTMLWrt.nCSS1Script )
     380                 :            :             {
     381                 :          0 :                 sal_uInt16 *pWhichIds = 0;
     382   [ #  #  #  # ]:          0 :                 switch( nScript )
     383                 :            :                 {
     384                 :          0 :                 case CSS1_OUTMODE_WESTERN:  pWhichIds = aWesternWhichIds; break;
     385                 :          0 :                 case CSS1_OUTMODE_CJK:      pWhichIds = aCJKWhichIds; break;
     386                 :          0 :                 case CSS1_OUTMODE_CTL:      pWhichIds = aCTLWhichIds; break;
     387                 :            :                 }
     388                 :            : 
     389                 :          0 :                 rHTMLWrt.bTagOn = sal_True;
     390                 :            :                 const SfxPoolItem *aItems[5];
     391                 :          0 :                 sal_uInt16 nItems = 0;
     392         [ #  # ]:          0 :                 for( sal_uInt16 i=0; i<4; i++ )
     393                 :            :                 {
     394                 :            :                     const SfxPoolItem *pRefItem =
     395         [ #  # ]:          0 :                         aScriptItemSet.GetItem( pRefWhichIds[i] );
     396                 :            :                     const SfxPoolItem *pItem =
     397         [ #  # ]:          0 :                         aScriptItemSet.GetItem( pWhichIds[i] );
     398 [ #  # ][ #  # ]:          0 :                     if( pRefItem && pItem &&
         [ #  # ][ #  # ]
                 [ #  # ]
     399         [ #  # ]:          0 :                         !(0==i ? lcl_css1atr_equalFontItems( *pRefItem, *pItem )
     400 [ #  # ][ #  # ]:          0 :                                : *pRefItem == *pItem) )
     401                 :            :                     {
     402         [ #  # ]:          0 :                         Out( aHTMLAttrFnTab, *pItem, rHTMLWrt );
     403                 :          0 :                         aItems[nItems++] = pItem;
     404                 :            :                     }
     405                 :            :                 }
     406                 :            : 
     407         [ #  # ]:          0 :                 HTMLOutFuncs::Out_String( rWrt.Strm(), sExpand.Copy( nPos, nEndPos ),
     408 [ #  # ][ #  # ]:          0 :                     rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
                 [ #  # ]
     409                 :            : 
     410                 :          0 :                 rHTMLWrt.bTagOn = sal_False;
     411         [ #  # ]:          0 :                 while( nItems )
     412         [ #  # ]:          0 :                     Out( aHTMLAttrFnTab, *aItems[--nItems], rHTMLWrt );
     413                 :            : 
     414                 :            :             }
     415                 :            :             else
     416                 :            :             {
     417         [ #  # ]:          0 :                 HTMLOutFuncs::Out_String( rWrt.Strm(), sExpand.Copy( nPos, nEndPos ),
     418 [ #  # ][ #  # ]:          0 :                     rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
                 [ #  # ]
     419                 :            :             }
     420                 :          0 :             nPos = nEndPos;
     421                 :            :         }
     422         [ #  # ]:          0 :         while( nPos < sExpand.Len() );
     423                 :            :     }
     424                 :            :     else
     425                 :            :     {
     426         [ #  # ]:          0 :         HTMLOutFuncs::Out_String( rWrt.Strm(), sExpand,
     427         [ #  # ]:          0 :               rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
     428                 :            :     }
     429                 :            : 
     430                 :            :     // Off-Tag ausgeben
     431         [ #  # ]:          0 :     if( pTypeStr )
     432 [ #  # ][ #  # ]:          0 :         HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_sdfield, sal_False );
     433                 :            : 
     434 [ #  # ][ #  # ]:          0 :     return rWrt;
                 [ #  # ]
     435                 :            : }
     436                 :            : 
     437                 :            : 
     438                 :          0 : Writer& OutHTML_SwFmtFld( Writer& rWrt, const SfxPoolItem& rHt )
     439                 :            : {
     440                 :          0 :     SwFmtFld & rFld = (SwFmtFld&)rHt;
     441                 :          0 :     const SwField* pFld = rFld.GetFld();
     442                 :          0 :     const SwFieldType* pFldTyp = pFld->GetTyp();
     443                 :            : 
     444         [ #  # ]:          0 :     if( RES_SETEXPFLD == pFldTyp->Which() &&
           [ #  #  #  # ]
     445                 :          0 :         (nsSwGetSetExpType::GSE_STRING & pFld->GetSubType()) )
     446                 :            :     {
     447                 :          0 :         int bOn = sal_False;
     448 [ #  # ][ #  # ]:          0 :         if (pFldTyp->GetName() == "HTML_ON")
     449                 :          0 :             bOn = sal_True;
     450 [ #  # ][ #  # ]:          0 :         else if (pFldTyp->GetName() != "HTML_OFF")
     451                 :          0 :             return rWrt;
     452                 :            : 
     453 [ #  # ][ #  # ]:          0 :         String rTxt(comphelper::string::strip(pFld->GetPar2(), ' '));
                 [ #  # ]
     454 [ #  # ][ #  # ]:          0 :         rWrt.Strm() << '<';
     455         [ #  # ]:          0 :         if( !bOn )
     456 [ #  # ][ #  # ]:          0 :             rWrt.Strm() << '/';
     457                 :            :         // TODO: HTML-Tags are written without entitities, that for, characters
     458                 :            :         // not contained in the destination encoding are lost!
     459                 :            :         rtl::OString sTmp(rtl::OUStringToOString(rTxt,
     460 [ #  # ][ #  # ]:          0 :             ((SwHTMLWriter&)rWrt).eDestEnc));
     461 [ #  # ][ #  # ]:          0 :         rWrt.Strm() << sTmp.getStr() << '>';
         [ #  # ][ #  # ]
     462                 :            :     }
     463         [ #  # ]:          0 :     else if( RES_POSTITFLD == pFldTyp->Which() )
     464                 :            :     {
     465                 :            :         // Kommentare werden im ANSI-Zeichensetz, aber mit System-Zeilen-
     466                 :            :         // Umbruechen gesschrieben.
     467         [ #  # ]:          0 :         const String& rComment = pFld->GetPar2();
     468                 :          0 :         sal_Bool bWritten = sal_False;
     469                 :            : 
     470   [ #  #  #  # ]:          0 :         if( (rComment.Len() >= 6 && '<' == rComment.GetChar(0) &&
           [ #  #  #  # ]
         [ #  # ][ #  # ]
         [ #  # ][ #  # ]
     471                 :          0 :             '>' == rComment.GetChar(rComment.Len()-1) &&
     472 [ #  # ][ #  # ]:          0 :             rComment.Copy( 1, 4 ).EqualsIgnoreCaseAscii(OOO_STRING_SVTOOLS_HTML_meta)) ||
         [ #  # ][ #  # ]
                 [ #  # ]
     473                 :          0 :               (rComment.Len() >= 7 &&
     474 [ #  # ][ #  # ]:          0 :              rComment.Copy( 0, 4 ).EqualsAscii( "<!--" ) &&
         [ #  # ][ #  # ]
                 [ #  # ]
     475 [ #  # ][ #  # ]:          0 :              rComment.Copy( rComment.Len()-3, 3 ).EqualsAscii( "-->" )) )
         [ #  # ][ #  # ]
                 [ #  # ]
     476                 :            :         {
     477                 :            :             // META-Tags direkt ausgeben
     478 [ #  # ][ #  # ]:          0 :             String sComment(convertLineEnd(rComment, GetSystemLineEnd()));
                 [ #  # ]
     479                 :            :             // TODO: HTML-Tags are written without entitities, that for,
     480                 :            :             // characters not contained in the destination encoding are lost!
     481                 :            :             rtl::OString sTmp(rtl::OUStringToOString(sComment,
     482 [ #  # ][ #  # ]:          0 :                 ((SwHTMLWriter&)rWrt).eDestEnc));
     483 [ #  # ][ #  # ]:          0 :             rWrt.Strm() << sTmp.getStr();
     484         [ #  # ]:          0 :             bWritten = sal_True;
     485                 :            :         }
     486   [ #  #  #  # ]:          0 :         else if( rComment.Len() >= 7 &&
         [ #  # ][ #  # ]
     487                 :          0 :                  '>' == rComment.GetChar(rComment.Len()-1) &&
     488 [ #  # ][ #  # ]:          0 :                  rComment.Copy(0,5).EqualsIgnoreCaseAscii("HTML:") )
         [ #  # ][ #  # ]
                 [ #  # ]
     489                 :            :         {
     490 [ #  # ][ #  # ]:          0 :             String sComment(comphelper::string::stripStart(rComment.Copy(5), ' '));
         [ #  # ][ #  # ]
                 [ #  # ]
     491         [ #  # ]:          0 :             if( '<' == sComment.GetChar(0) )
     492                 :            :             {
     493 [ #  # ][ #  # ]:          0 :                 sComment = convertLineEnd(sComment, GetSystemLineEnd());
                 [ #  # ]
     494                 :            :                 // TODO: HTML-Tags are written without entitities, that for,
     495                 :            :                 // characters not contained in the destination encoding are
     496                 :            :                 // lost!
     497                 :            :                 rtl::OString sTmp(rtl::OUStringToOString(sComment,
     498 [ #  # ][ #  # ]:          0 :                     ((SwHTMLWriter&)rWrt).eDestEnc));
     499 [ #  # ][ #  # ]:          0 :                 rWrt.Strm() << sTmp.getStr();
     500                 :          0 :                 bWritten = sal_True;
     501         [ #  # ]:          0 :             }
     502                 :            : 
     503                 :            :         }
     504                 :            : 
     505         [ #  # ]:          0 :         if( !bWritten )
     506                 :            :         {
     507 [ #  # ][ #  # ]:          0 :             String sComment(convertLineEnd(rComment, GetSystemLineEnd()));
                 [ #  # ]
     508                 :          0 :             rtl::OStringBuffer sOut;
     509                 :            :             // TODO: ???
     510 [ #  # ][ #  # ]:          0 :             sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_comment)
     511         [ #  # ]:          0 :                 .append(' ').append(rtl::OUStringToOString(sComment,
     512 [ #  # ][ #  # ]:          0 :                     ((SwHTMLWriter&)rWrt).eDestEnc)).append(" -->");
         [ #  # ][ #  # ]
     513 [ #  # ][ #  # ]:          0 :             rWrt.Strm() << sOut.getStr();
                 [ #  # ]
     514                 :          0 :         }
     515                 :            :     }
     516         [ #  # ]:          0 :     else if( RES_SCRIPTFLD == pFldTyp->Which() )
     517                 :            :     {
     518                 :          0 :         SwHTMLWriter& rHTMLWrt = (SwHTMLWriter&)rWrt;
     519         [ #  # ]:          0 :         if( rHTMLWrt.bLFPossible )
     520         [ #  # ]:          0 :             rHTMLWrt.OutNewLine( sal_True );
     521                 :            : 
     522                 :          0 :         sal_Bool bURL = ((const SwScriptField *)pFld)->IsCodeURL();
     523 [ #  # ][ #  # ]:          0 :         const String& rType = pFld->GetPar1();
     524 [ #  # ][ #  # ]:          0 :         String aContents, aURL;
     525         [ #  # ]:          0 :         if(bURL)
     526 [ #  # ][ #  # ]:          0 :             aURL = pFld->GetPar2();
     527                 :            :         else
     528 [ #  # ][ #  # ]:          0 :             aContents = pFld->GetPar2();
     529                 :            : 
     530                 :            :         // sonst ist es der Script-Inhalt selbst. Da nur noh JavaScript
     531                 :            :         // in Feldern landet, muss es sich um JavaSrript handeln ...:)
     532         [ #  # ]:          0 :         HTMLOutFuncs::OutScript( rWrt.Strm(), rWrt.GetBaseURL(), aContents, rType, JAVASCRIPT,
     533         [ #  # ]:          0 :                                  aURL, 0, 0, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
     534                 :            : 
     535         [ #  # ]:          0 :         if( rHTMLWrt.bLFPossible )
     536 [ #  # ][ #  # ]:          0 :             rHTMLWrt.OutNewLine( sal_True );
         [ #  # ][ #  # ]
     537                 :            :     }
     538                 :            :     else
     539                 :            :     {
     540                 :          0 :         const SwTxtFld *pTxtFld = rFld.GetTxtFld();
     541                 :            :         OSL_ENSURE( pTxtFld, "Where is the txt fld?" );
     542         [ #  # ]:          0 :         if( pTxtFld )
     543                 :          0 :             OutHTML_SwField( rWrt, pFld, pTxtFld->GetTxtNode(),
     544                 :          0 :                              *pTxtFld->GetStart()  );
     545                 :            :     }
     546                 :          0 :     return rWrt;
     547                 :            : }
     548                 :            : 
     549                 :            : 
     550                 :            : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10