LCOV - code coverage report
Current view: top level - sw/source/filter/html - htmlfldw.cxx (source / functions) Hit Total Coverage
Test: commit 0e63ca4fde4e446f346e35849c756a30ca294aab Lines: 0 291 0.0 %
Date: 2014-04-11 Functions: 0 3 0.0 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10