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

Generated by: LCOV version 1.10