LCOV - code coverage report
Current view: top level - sw/source/filter/html - htmlfldw.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 290 0.3 %
Date: 2015-06-13 12:38:46 Functions: 2 5 40.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             : #include <css1atr.hxx>
      37             : 
      38             : using namespace nsSwDocInfoSubType;
      39             : 
      40           0 : const sal_Char *SwHTMLWriter::GetNumFormat( sal_uInt16 nFormat )
      41             : {
      42           0 :     const sal_Char *pFormatStr = 0;
      43             : 
      44           0 :     switch( (SvxExtNumType)nFormat )
      45             :     {
      46           0 :     case SVX_NUM_CHARS_UPPER_LETTER:    pFormatStr = OOO_STRING_SW_HTML_FF_uletter;    break;
      47           0 :     case SVX_NUM_CHARS_LOWER_LETTER:    pFormatStr = OOO_STRING_SW_HTML_FF_lletter;    break;
      48           0 :     case SVX_NUM_ROMAN_UPPER:           pFormatStr = OOO_STRING_SW_HTML_FF_uroman;         break;
      49           0 :     case SVX_NUM_ROMAN_LOWER:           pFormatStr = OOO_STRING_SW_HTML_FF_lroman;         break;
      50           0 :     case SVX_NUM_ARABIC:                pFormatStr = OOO_STRING_SW_HTML_FF_arabic;     break;
      51           0 :     case SVX_NUM_NUMBER_NONE:           pFormatStr = OOO_STRING_SW_HTML_FF_none;       break;
      52           0 :     case SVX_NUM_CHAR_SPECIAL:          pFormatStr = OOO_STRING_SW_HTML_FF_char;       break;
      53           0 :     case SVX_NUM_PAGEDESC:              pFormatStr = OOO_STRING_SW_HTML_FF_page;       break;
      54           0 :     case SVX_NUM_CHARS_UPPER_LETTER_N:  pFormatStr = OOO_STRING_SW_HTML_FF_ulettern;   break;
      55           0 :     case SVX_NUM_CHARS_LOWER_LETTER_N:  pFormatStr = OOO_STRING_SW_HTML_FF_llettern;   break;
      56             :     default:
      57             :         ;
      58             :     }
      59             : 
      60           0 :     return pFormatStr;
      61             : }
      62             : 
      63           0 : static Writer& OutHTML_SwField( Writer& rWrt, const SwField* pField,
      64             :                                  const SwTextNode& rTextNd, sal_Int32 nFieldPos )
      65             : {
      66           0 :     SwHTMLWriter & rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
      67             : 
      68           0 :     const SwFieldType* pFieldTyp = pField->GetTyp();
      69           0 :     sal_uInt16 nField = pFieldTyp->Which();
      70           0 :     sal_uLong nFormat = pField->GetFormat();
      71             : 
      72           0 :     const sal_Char *pTypeStr=0, // TYPE
      73           0 :                       *pSubStr=0,   // SUBTYPE
      74           0 :                    *pFormatStr=0;  // FORMAT (SW)
      75           0 :     OUString aValue;              // VALUE (SW)
      76           0 :     bool bNumFormat=false;         // SDNUM (Number-Formatter-Format)
      77           0 :     bool bNumValue=false;       // SDVAL (Number-Formatter-Value)
      78           0 :     double dNumValue = 0.0;     // SDVAL (Number-Formatter-Value)
      79           0 :     bool bFixed=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)pField->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 = static_cast<const SwExtUserField*>(pField)->IsFixed();
     108           0 :             break;
     109             : 
     110             :         case RES_AUTHORFLD:
     111           0 :             pTypeStr = OOO_STRING_SW_HTML_FT_author;
     112           0 :             switch( (SwAuthorFormat)nFormat & 0xff)
     113             :             {
     114           0 :                 case AF_NAME:     pFormatStr = OOO_STRING_SW_HTML_FF_name;     break;
     115           0 :                 case AF_SHORTCUT:  pFormatStr = OOO_STRING_SW_HTML_FF_shortcut;    break;
     116             :             }
     117             :             OSL_ENSURE( pFormatStr, "ubekanntes Format fuer SwAuthorField" );
     118           0 :             bFixed = static_cast<const SwAuthorField*>(pField)->IsFixed();
     119           0 :             break;
     120             : 
     121             :         case RES_DATETIMEFLD:
     122           0 :             pTypeStr = OOO_STRING_SW_HTML_FT_datetime;
     123           0 :             bNumFormat = true;
     124           0 :             if( static_cast<const SwDateTimeField*>(pField)->IsFixed() )
     125             :             {
     126           0 :                 bNumValue = true;
     127           0 :                 dNumValue = static_cast<const SwDateTimeField*>(pField)->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)pField->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 :                 pFormatStr = SwHTMLWriter::GetNumFormat( static_cast< sal_uInt16 >(nFormat) );
     143             : 
     144           0 :                 if( (SvxExtNumType)nFormat==SVX_NUM_CHAR_SPECIAL )
     145             :                 {
     146           0 :                     aValue = static_cast<const SwPageNumberField *>(pField)->GetUserString();
     147             :                 }
     148             :                 else
     149             :                 {
     150           0 :                     const OUString& rValue = pField->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 = pField->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*>(pField)->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 :                             pFormatStr = OOO_STRING_SW_HTML_FF_author;
     190           0 :                             break;
     191             :                         case DI_SUB_TIME:
     192           0 :                             pFormatStr = OOO_STRING_SW_HTML_FF_time;
     193           0 :                             bNumFormat = true;
     194           0 :                             break;
     195             :                         case DI_SUB_DATE:
     196           0 :                             pFormatStr = OOO_STRING_SW_HTML_FF_date;
     197           0 :                             bNumFormat = true;
     198           0 :                             break;
     199             :                     }
     200             :                 }
     201           0 :                 bFixed = static_cast<const SwDocInfoField*>(pField)->IsFixed();
     202           0 :                 if( bNumFormat )
     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 = static_cast<const SwDocInfoField*>(pField)->GetValue();
     210           0 :                         bNumValue = true;
     211             :                     }
     212           0 :                     else if( !nFormat  )
     213             :                     {
     214             :                         // Nicht fixe Felder muessen kein Zahlenformat haben,
     215             :                         // wenn sie aus 4.0-Dokumenten stammen.
     216           0 :                         bNumFormat = 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 = pField->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 :                 pFormatStr = SwHTMLWriter::GetNumFormat( static_cast< sal_uInt16 >(nFormat) );
     238             :             }
     239           0 :             break;
     240             : 
     241             :         case RES_FILENAMEFLD:
     242           0 :             pTypeStr = OOO_STRING_SW_HTML_FT_filename;
     243           0 :             switch( (SwFileNameFormat)(nFormat & ~FF_FIXED) )
     244             :             {
     245           0 :                 case FF_NAME:       pFormatStr = OOO_STRING_SW_HTML_FF_name;       break;
     246           0 :                 case FF_PATHNAME:   pFormatStr = OOO_STRING_SW_HTML_FF_pathname;   break;
     247           0 :                 case FF_PATH:       pFormatStr = OOO_STRING_SW_HTML_FF_path;       break;
     248           0 :                 case FF_NAME_NOEXT: pFormatStr = OOO_STRING_SW_HTML_FF_name_noext; break;
     249             :                 default:
     250             :                     ;
     251             :             }
     252           0 :             bFixed = static_cast<const SwFileNameField*>(pField)->IsFixed();
     253             :             OSL_ENSURE( pFormatStr, "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( pFormatStr )
     271             :         {
     272           0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_format).
     273           0 :                 append('=').append(pFormatStr);
     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( bNumFormat )
     292             :         {
     293             :             OSL_ENSURE( nFormat, "Zahlenformat ist 0" );
     294             :             sOut.append(HTMLOutFuncs::CreateTableDataOptionsValNum(
     295             :                 bNumValue, dNumValue, nFormat,
     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( pField->ExpandField(true) );
     309           0 :     bool bNeedsCJKProcessing = 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 = 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 :         rTextNd.GetAttr( aScriptItemSet, nFieldPos, nFieldPos+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 = true;
     381             : 
     382             :                 const SfxPoolItem *aItems[5];
     383           0 :                 int nItems = 0;
     384             : 
     385             :                 assert(pWhichIds && pRefWhichIds);
     386           0 :                 if (pWhichIds && pRefWhichIds)
     387             :                 {
     388           0 :                     for( int 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 = 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_SwFormatField( Writer& rWrt, const SfxPoolItem& rHt )
     435             : {
     436           0 :     const SwFormatField & rField = static_cast<const SwFormatField&>(rHt);
     437           0 :     const SwField* pField = rField.GetField();
     438           0 :     const SwFieldType* pFieldTyp = pField->GetTyp();
     439             : 
     440           0 :     if( RES_SETEXPFLD == pFieldTyp->Which() &&
     441           0 :         (nsSwGetSetExpType::GSE_STRING & pField->GetSubType()) )
     442             :     {
     443           0 :         const bool bOn = pFieldTyp->GetName() == "HTML_ON";
     444           0 :         if (!bOn && pFieldTyp->GetName() != "HTML_OFF")
     445           0 :             return rWrt;
     446             : 
     447           0 :         OUString rText(comphelper::string::strip(pField->GetPar2(), ' '));
     448           0 :         rWrt.Strm().WriteChar( '<' );
     449           0 :         if( !bOn )
     450           0 :             rWrt.Strm().WriteChar( '/' );
     451             :         // TODO: HTML-Tags are written without entitities, that for, characters
     452             :         // not contained in the destination encoding are lost!
     453             :         OString sTmp(OUStringToOString(rText,
     454           0 :             static_cast<SwHTMLWriter&>(rWrt).eDestEnc));
     455           0 :         rWrt.Strm().WriteCharPtr( sTmp.getStr() ).WriteChar( '>' );
     456             :     }
     457           0 :     else if( RES_POSTITFLD == pFieldTyp->Which() )
     458             :     {
     459             :         // Kommentare werden im ANSI-Zeichensetz, aber mit System-Zeilen-
     460             :         // Umbruechen gesschrieben.
     461           0 :         const OUString& rComment = pField->GetPar2();
     462           0 :         bool bWritten = false;
     463             : 
     464           0 :         if( (rComment.getLength() >= 6 && rComment.startsWith("<") && rComment.endsWith(">") &&
     465           0 :              rComment.copy( 1, 4 ).equalsIgnoreAsciiCase( OOO_STRING_SVTOOLS_HTML_meta) ) ||
     466           0 :             (rComment.getLength() >= 7 &&
     467           0 :              rComment.startsWith( "<!--" ) &&
     468           0 :              rComment.endsWith( "-->" )) )
     469             :         {
     470             :             // META-Tags direkt ausgeben
     471           0 :             OUString sComment(convertLineEnd(rComment, GetSystemLineEnd()));
     472             :             // TODO: HTML-Tags are written without entitities, that for,
     473             :             // characters not contained in the destination encoding are lost!
     474             :             OString sTmp(OUStringToOString(sComment,
     475           0 :                 static_cast<SwHTMLWriter&>(rWrt).eDestEnc));
     476           0 :             rWrt.Strm().WriteCharPtr( sTmp.getStr() );
     477           0 :             bWritten = true;
     478             :         }
     479           0 :         else if( rComment.getLength() >= 7 &&
     480           0 :                  rComment.endsWith(">") &&
     481           0 :                  rComment.startsWithIgnoreAsciiCase( "HTML:" ) )
     482             :         {
     483           0 :             OUString sComment(comphelper::string::stripStart(rComment.copy(5), ' '));
     484           0 :             if( '<' == sComment[0] )
     485             :             {
     486           0 :                 sComment = convertLineEnd(sComment, GetSystemLineEnd());
     487             :                 // TODO: HTML-Tags are written without entitities, that for,
     488             :                 // characters not contained in the destination encoding are
     489             :                 // lost!
     490             :                 OString sTmp(OUStringToOString(sComment,
     491           0 :                     static_cast<SwHTMLWriter&>(rWrt).eDestEnc));
     492           0 :                 rWrt.Strm().WriteCharPtr( sTmp.getStr() );
     493           0 :                 bWritten = true;
     494           0 :             }
     495             : 
     496             :         }
     497             : 
     498           0 :         if( !bWritten )
     499             :         {
     500           0 :             OUString sComment(convertLineEnd(rComment, GetSystemLineEnd()));
     501           0 :             OStringBuffer sOut;
     502             :             // TODO: ???
     503           0 :             sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_comment)
     504           0 :                 .append(' ').append(OUStringToOString(sComment,
     505           0 :                     static_cast<SwHTMLWriter&>(rWrt).eDestEnc)).append(" -->");
     506           0 :             rWrt.Strm().WriteCharPtr( sOut.getStr() );
     507           0 :         }
     508             :     }
     509           0 :     else if( RES_SCRIPTFLD == pFieldTyp->Which() )
     510             :     {
     511           0 :         SwHTMLWriter& rHTMLWrt = static_cast<SwHTMLWriter&>(rWrt);
     512           0 :         if( rHTMLWrt.bLFPossible )
     513           0 :             rHTMLWrt.OutNewLine( true );
     514             : 
     515           0 :         bool bURL = static_cast<const SwScriptField *>(pField)->IsCodeURL();
     516           0 :         const OUString& rType = pField->GetPar1();
     517           0 :         OUString aContents, aURL;
     518           0 :         if(bURL)
     519           0 :             aURL = pField->GetPar2();
     520             :         else
     521           0 :             aContents = pField->GetPar2();
     522             : 
     523             :         // sonst ist es der Script-Inhalt selbst. Da nur noh JavaScript
     524             :         // in Feldern landet, muss es sich um JavaSrript handeln ...:)
     525           0 :         HTMLOutFuncs::OutScript( rWrt.Strm(), rWrt.GetBaseURL(), aContents, rType, JAVASCRIPT,
     526           0 :                                  aURL, 0, 0, rHTMLWrt.eDestEnc, &rHTMLWrt.aNonConvertableCharacters );
     527             : 
     528           0 :         if( rHTMLWrt.bLFPossible )
     529           0 :             rHTMLWrt.OutNewLine( true );
     530             :     }
     531             :     else
     532             :     {
     533           0 :         const SwTextField *pTextField = rField.GetTextField();
     534             :         OSL_ENSURE( pTextField, "Where is the txt fld?" );
     535           0 :         if( pTextField )
     536           0 :             OutHTML_SwField( rWrt, pField, pTextField->GetTextNode(),
     537           0 :                              pTextField->GetStart()  );
     538             :     }
     539           0 :     return rWrt;
     540         177 : }
     541             : 
     542             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11