LCOV - code coverage report
Current view: top level - svtools/source/config - htmlcfg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 96 214 44.9 %
Date: 2015-06-13 12:38:46 Functions: 17 32 53.1 %
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             : 
      21             : #include <osl/thread.h>
      22             : #include <svtools/htmlcfg.hxx>
      23             : #include <svtools/parhtml.hxx>
      24             : #include <unotools/syslocale.hxx>
      25             : #include <tools/debug.hxx>
      26             : #include <tools/link.hxx>
      27             : #include <sal/macros.h>
      28             : #include <rtl/instance.hxx>
      29             : #include <list>
      30             : 
      31             : 
      32             : #define HTMLCFG_UNKNOWN_TAGS            0x01
      33             : //#define HTMLCFG_STYLE_SHEETS          0x02
      34             : //#define HTMLCFG_NETSCAPE3             0x04
      35             : #define HTMLCFG_STAR_BASIC              0x08
      36             : #define HTMLCFG_LOCAL_GRF               0x10
      37             : #define HTMLCFG_PRINT_LAYOUT_EXTENSION  0x20
      38             : #define HTMLCFG_IGNORE_FONT_FAMILY      0x40
      39             : #define HTMLCFG_IS_BASIC_WARNING        0x80
      40             : #define HTMLCFG_NUMBERS_ENGLISH_US      0x100
      41             : 
      42             : using namespace utl;
      43             : using namespace com::sun::star::uno;
      44             : 
      45             : 
      46        3133 : struct HtmlOptions_Impl
      47             : {
      48             :     ::std::list<Link<>> aList;
      49             :     sal_Int32   nFlags;
      50             :     sal_Int32   nExportMode;
      51             :     sal_Int32   aFontSizeArr[HTML_FONT_COUNT];
      52             :     sal_Int32   eEncoding;
      53             :     bool        bIsEncodingDefault;
      54             : 
      55        3140 :     HtmlOptions_Impl() :
      56             :         nFlags(HTMLCFG_LOCAL_GRF|HTMLCFG_IS_BASIC_WARNING),
      57             :         nExportMode(HTML_CFG_NS40),
      58        3140 :         eEncoding( osl_getThreadTextEncoding() ),
      59        6280 :         bIsEncodingDefault(true)
      60             :     {
      61        3140 :         aFontSizeArr[0] = HTMLFONTSZ1_DFLT;
      62        3140 :         aFontSizeArr[1] = HTMLFONTSZ2_DFLT;
      63        3140 :         aFontSizeArr[2] = HTMLFONTSZ3_DFLT;
      64        3140 :         aFontSizeArr[3] = HTMLFONTSZ4_DFLT;
      65        3140 :         aFontSizeArr[4] = HTMLFONTSZ5_DFLT;
      66        3140 :         aFontSizeArr[5] = HTMLFONTSZ6_DFLT;
      67        3140 :         aFontSizeArr[6] = HTMLFONTSZ7_DFLT;
      68        3140 :     }
      69             : };
      70             : 
      71        3140 : const Sequence<OUString>& SvxHtmlOptions::GetPropertyNames()
      72             : {
      73        3140 :     static Sequence<OUString> aNames;
      74        3140 :     if(!aNames.getLength())
      75             :     {
      76             :         static const char* aPropNames[] =
      77             :         {
      78             :             "Import/UnknownTag",                    //  0
      79             :             "Import/FontSetting",                   //  1
      80             :             "Import/FontSize/Size_1",               //  2
      81             :             "Import/FontSize/Size_2",               //  3
      82             :             "Import/FontSize/Size_3",               //  4
      83             :             "Import/FontSize/Size_4",               //  5
      84             :             "Import/FontSize/Size_5",               //  6
      85             :             "Import/FontSize/Size_6",               //  7
      86             :             "Import/FontSize/Size_7",               //  8
      87             :             "Export/Browser",                       //  9
      88             :             "Export/Basic",                         //  0
      89             :             "Export/PrintLayout",                   // 11
      90             :             "Export/LocalGraphic",                  // 12
      91             :             "Export/Warning",                       // 13
      92             :             "Export/Encoding",                      // 14
      93             :             "Import/NumbersEnglishUS"               // 15
      94             :         };
      95          94 :         const int nCount = SAL_N_ELEMENTS(aPropNames);
      96          94 :         aNames.realloc(nCount);
      97          94 :         OUString* pNames = aNames.getArray();
      98        1598 :         for(int i = 0; i < nCount; i++)
      99        1504 :             pNames[i] = OUString::createFromAscii(aPropNames[i]);
     100             :     }
     101        3140 :     return aNames;
     102             : }
     103             : 
     104        3140 : SvxHtmlOptions::SvxHtmlOptions() :
     105        3140 :     ConfigItem("Office.Common/Filter/HTML")
     106             : {
     107        3140 :     pImp = new HtmlOptions_Impl;
     108        3140 :     Load( GetPropertyNames() );
     109        3140 : }
     110             : 
     111             : 
     112        6266 : SvxHtmlOptions::~SvxHtmlOptions()
     113             : {
     114        3133 :     delete pImp;
     115        3133 : }
     116             : 
     117        3140 : void SvxHtmlOptions::Load( const Sequence< OUString >& aNames )
     118             : {
     119        3140 :     Sequence<Any> aValues = GetProperties(aNames);
     120        3140 :     const Any* pValues = aValues.getConstArray();
     121             :     DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
     122        3140 :     if(aValues.getLength() == aNames.getLength())
     123             :     {
     124        3140 :         pImp->nFlags = 0;
     125       53380 :         for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     126             :         {
     127       50240 :             if(pValues[nProp].hasValue())
     128             :             {
     129       47100 :                 switch(nProp)
     130             :                 {
     131             :                     case  0:
     132        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     133           0 :                             pImp->nFlags |= HTMLCFG_UNKNOWN_TAGS;
     134        3140 :                     break;//"Import/UnknownTag",
     135             :                     case  1:
     136        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     137           0 :                             pImp->nFlags |= HTMLCFG_IGNORE_FONT_FAMILY;
     138        3140 :                     break;//"Import/FontSetting",
     139        3140 :                     case  2: pValues[nProp] >>= pImp->aFontSizeArr[0]; break;//"Import/FontSize/Size_1",
     140        3140 :                     case  3: pValues[nProp] >>= pImp->aFontSizeArr[1]; break;//"Import/FontSize/Size_2",
     141        3140 :                     case  4: pValues[nProp] >>= pImp->aFontSizeArr[2]; break;//"Import/FontSize/Size_3",
     142        3140 :                     case  5: pValues[nProp] >>= pImp->aFontSizeArr[3]; break;//"Import/FontSize/Size_4",
     143        3140 :                     case  6: pValues[nProp] >>= pImp->aFontSizeArr[4]; break;//"Import/FontSize/Size_5",
     144        3140 :                     case  7: pValues[nProp] >>= pImp->aFontSizeArr[5]; break;//"Import/FontSize/Size_6",
     145        3140 :                     case  8: pValues[nProp] >>= pImp->aFontSizeArr[6]; break;//"Import/FontSize/Size_7",
     146             :                     case  9://"Export/Browser",
     147             :                         {
     148        3140 :                             sal_Int32 nExpMode = 0;
     149        3140 :                             pValues[nProp] >>= nExpMode;
     150        3140 :                             switch( nExpMode )
     151             :                             {
     152           0 :                                 case 1:     nExpMode = HTML_CFG_MSIE;    break;
     153           0 :                                 case 3:     nExpMode = HTML_CFG_WRITER;     break;
     154        3140 :                                 case 4:     nExpMode = HTML_CFG_NS40;       break;
     155           0 :                                 default:    nExpMode = HTML_CFG_NS40;       break;
     156             :                             }
     157             : 
     158        3140 :                             pImp->nExportMode = nExpMode;
     159             :                         }
     160        3140 :                         break;
     161             :                     case 10:
     162        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     163           0 :                             pImp->nFlags |= HTMLCFG_STAR_BASIC;
     164        3140 :                     break;//"Export/Basic",
     165             :                     case 11:
     166        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     167           0 :                             pImp->nFlags |= HTMLCFG_PRINT_LAYOUT_EXTENSION;
     168        3140 :                     break;//"Export/PrintLayout",
     169             :                     case 12:
     170        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     171        3140 :                             pImp->nFlags |= HTMLCFG_LOCAL_GRF;
     172        3140 :                     break;//"Export/LocalGraphic",
     173             :                     case 13:
     174        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     175        3140 :                             pImp->nFlags |= HTMLCFG_IS_BASIC_WARNING;
     176        3140 :                     break;//"Export/Warning"
     177             : 
     178           0 :                     case 14: pValues[nProp] >>= pImp->eEncoding;
     179           0 :                              pImp->bIsEncodingDefault = false;
     180           0 :                     break;//"Export/Encoding"
     181             : 
     182             :                     case 15:
     183        3140 :                         if(*static_cast<sal_Bool const *>(pValues[nProp].getValue()))
     184           0 :                             pImp->nFlags |= HTMLCFG_NUMBERS_ENGLISH_US;
     185        3140 :                     break;//"Import/NumbersEnglishUS"
     186             :                 }
     187             :             }
     188             :         }
     189        3140 :     }
     190        3140 : }
     191             : 
     192             : 
     193           0 : void    SvxHtmlOptions::ImplCommit()
     194             : {
     195           0 :     const Sequence<OUString>& aNames = GetPropertyNames();
     196             : 
     197           0 :     Sequence<Any> aValues(aNames.getLength());
     198           0 :     Any* pValues = aValues.getArray();
     199             : 
     200           0 :     for(int nProp = 0; nProp < aNames.getLength(); nProp++)
     201             :     {
     202           0 :         bool bSet = false;
     203           0 :         switch(nProp)
     204             :         {
     205           0 :             case  0: bSet = 0 != (pImp->nFlags & HTMLCFG_UNKNOWN_TAGS);break;//"Import/UnknownTag",
     206           0 :             case  1: bSet = 0 != (pImp->nFlags & HTMLCFG_IGNORE_FONT_FAMILY);break;//"Import/FontSetting",
     207           0 :             case  2: pValues[nProp] <<= pImp->aFontSizeArr[0];break;//"Import/FontSize/Size_1",
     208           0 :             case  3: pValues[nProp] <<= pImp->aFontSizeArr[1];break;//"Import/FontSize/Size_2",
     209           0 :             case  4: pValues[nProp] <<= pImp->aFontSizeArr[2];break;//"Import/FontSize/Size_3",
     210           0 :             case  5: pValues[nProp] <<= pImp->aFontSizeArr[3];break;//"Import/FontSize/Size_4",
     211           0 :             case  6: pValues[nProp] <<= pImp->aFontSizeArr[4];break;//"Import/FontSize/Size_5",
     212           0 :             case  7: pValues[nProp] <<= pImp->aFontSizeArr[5];break;//"Import/FontSize/Size_6",
     213           0 :             case  8: pValues[nProp] <<= pImp->aFontSizeArr[6];break;//"Import/FontSize/Size_7",
     214             :             case  9:                //"Export/Browser",
     215             :                 {
     216           0 :                     sal_Int32 nExpMode = pImp->nExportMode;
     217             : 
     218           0 :                     switch( nExpMode )
     219             :                     {
     220           0 :                         case HTML_CFG_MSIE:      nExpMode = 1;   break;
     221           0 :                         case HTML_CFG_WRITER:       nExpMode = 3;   break;
     222           0 :                         case HTML_CFG_NS40:         nExpMode = 4;   break;
     223           0 :                         default:                    nExpMode = 4;   break;  // NS40
     224             :                     }
     225             : 
     226           0 :                     pValues[nProp] <<= nExpMode;
     227           0 :                     break;
     228             :                 }
     229           0 :             case 10: bSet = 0 != (pImp->nFlags & HTMLCFG_STAR_BASIC);break;//"Export/Basic",
     230           0 :             case 11: bSet = 0 != (pImp->nFlags & HTMLCFG_PRINT_LAYOUT_EXTENSION);break;//"Export/PrintLayout",
     231           0 :             case 12: bSet = 0 != (pImp->nFlags & HTMLCFG_LOCAL_GRF);break;//"Export/LocalGraphic",
     232           0 :             case 13: bSet = 0 != (pImp->nFlags & HTMLCFG_IS_BASIC_WARNING);break;//"Export/Warning"
     233             :             case 14:
     234           0 :                 if(!pImp->bIsEncodingDefault)
     235           0 :                     pValues[nProp] <<= pImp->eEncoding;
     236           0 :                 break;//"Export/Encoding",
     237           0 :             case 15: bSet = 0 != (pImp->nFlags & HTMLCFG_NUMBERS_ENGLISH_US);break;//"Import/NumbersEnglishUS"
     238             :         }
     239           0 :         if(nProp < 2 || ( nProp > 9 && nProp < 14 ) || nProp == 15)
     240           0 :             pValues[nProp].setValue(&bSet, cppu::UnoType<bool>::get());
     241             :     }
     242           0 :     PutProperties(aNames, aValues);
     243           0 : }
     244             : 
     245           0 : void SvxHtmlOptions::CallListeners()
     246             : {
     247           0 :     for ( ::std::list<Link<>>::const_iterator iter = pImp->aList.begin(); iter != pImp->aList.end(); ++iter )
     248           0 :         iter->Call( this );
     249           0 : }
     250             : 
     251             : 
     252           0 : void SvxHtmlOptions::Notify( const com::sun::star::uno::Sequence< OUString >& )
     253             : {
     254           0 :     Load( GetPropertyNames() );
     255           0 :     CallListeners();
     256           0 : }
     257             : 
     258             : 
     259         245 : sal_uInt16  SvxHtmlOptions::GetFontSize(sal_uInt16 nPos) const
     260             : {
     261         245 :     if(nPos < HTML_FONT_COUNT)
     262         245 :         return (sal_uInt16)pImp->aFontSizeArr[nPos];
     263           0 :     return 0;
     264             : }
     265             : 
     266           0 : void SvxHtmlOptions::SetFontSize(sal_uInt16 nPos, sal_uInt16 nSize)
     267             : {
     268           0 :     if(nPos < HTML_FONT_COUNT)
     269             :     {
     270           0 :         pImp->aFontSizeArr[nPos] = nSize;
     271           0 :         SetModified();
     272             :     }
     273           0 : }
     274             : 
     275             : 
     276             : 
     277             : 
     278             : 
     279             : 
     280          16 : bool SvxHtmlOptions::IsImportUnknown() const
     281             : {
     282          16 :     return 0 != (pImp->nFlags & HTMLCFG_UNKNOWN_TAGS) ;
     283             : }
     284             : 
     285             : 
     286             : 
     287             : 
     288           0 : void SvxHtmlOptions::SetImportUnknown(bool bSet)
     289             : {
     290           0 :     if(bSet)
     291           0 :         pImp->nFlags |= HTMLCFG_UNKNOWN_TAGS;
     292             :     else
     293           0 :         pImp->nFlags &= ~HTMLCFG_UNKNOWN_TAGS;
     294           0 :     SetModified();
     295           0 : }
     296             : 
     297             : 
     298             : 
     299             : 
     300          43 : sal_uInt16  SvxHtmlOptions::GetExportMode() const
     301             : {
     302          43 :     return (sal_uInt16)pImp->nExportMode;
     303             : }
     304             : 
     305             : 
     306             : 
     307             : 
     308           0 : void SvxHtmlOptions::SetExportMode(sal_uInt16 nSet)
     309             : {
     310           0 :     if(nSet <= HTML_CFG_MAX )
     311             :     {
     312           0 :         pImp->nExportMode = nSet;
     313           0 :         SetModified();
     314           0 :         CallListeners();
     315             :     }
     316           0 : }
     317             : 
     318             : 
     319             : 
     320             : 
     321          30 : bool SvxHtmlOptions::IsStarBasic() const
     322             : {
     323          30 :     return 0 != (pImp->nFlags & HTMLCFG_STAR_BASIC) ;
     324             : }
     325             : 
     326             : 
     327             : 
     328             : 
     329           0 : void SvxHtmlOptions::SetStarBasic(bool bSet)
     330             : {
     331           0 :     if(bSet)
     332           0 :         pImp->nFlags |=  HTMLCFG_STAR_BASIC;
     333             :     else
     334           0 :         pImp->nFlags &= ~HTMLCFG_STAR_BASIC;
     335           0 :     SetModified();
     336           0 : }
     337             : 
     338          18 : bool SvxHtmlOptions::IsSaveGraphicsLocal() const
     339             : {
     340          18 :     return 0 != (pImp->nFlags & HTMLCFG_LOCAL_GRF) ;
     341             : }
     342             : 
     343           0 : void SvxHtmlOptions::SetSaveGraphicsLocal(bool bSet)
     344             : {
     345           0 :     if(bSet)
     346           0 :         pImp->nFlags |=  HTMLCFG_LOCAL_GRF;
     347             :     else
     348           0 :         pImp->nFlags &= ~HTMLCFG_LOCAL_GRF;
     349           0 :     SetModified();
     350           0 : }
     351             : 
     352          18 : bool SvxHtmlOptions::IsPrintLayoutExtension() const
     353             : {
     354          18 :     bool bRet = 0 != (pImp->nFlags & HTMLCFG_PRINT_LAYOUT_EXTENSION);
     355          18 :     switch( pImp->nExportMode )
     356             :     {
     357             :         case HTML_CFG_MSIE:
     358             :         case HTML_CFG_NS40  :
     359             :         case HTML_CFG_WRITER :
     360          18 :         break;
     361             :         default:
     362           0 :             bRet = false;
     363             :     }
     364          18 :     return bRet;
     365             : }
     366             : 
     367           0 : void    SvxHtmlOptions::SetPrintLayoutExtension(bool bSet)
     368             : {
     369           0 :     if(bSet)
     370           0 :         pImp->nFlags |=  HTMLCFG_PRINT_LAYOUT_EXTENSION;
     371             :     else
     372           0 :         pImp->nFlags &= ~HTMLCFG_PRINT_LAYOUT_EXTENSION;
     373           0 :     SetModified();
     374           0 : }
     375             : 
     376          16 : bool SvxHtmlOptions::IsIgnoreFontFamily() const
     377             : {
     378          16 :     return 0 != (pImp->nFlags & HTMLCFG_IGNORE_FONT_FAMILY) ;
     379             : }
     380             : 
     381           0 : void SvxHtmlOptions::SetIgnoreFontFamily(bool bSet)
     382             : {
     383           0 :     if(bSet)
     384           0 :         pImp->nFlags |=  HTMLCFG_IGNORE_FONT_FAMILY;
     385             :     else
     386           0 :         pImp->nFlags &= ~HTMLCFG_IGNORE_FONT_FAMILY;
     387           0 :     SetModified();
     388           0 : }
     389             : 
     390          15 : bool SvxHtmlOptions::IsStarBasicWarning() const
     391             : {
     392          15 :     return 0 != (pImp->nFlags & HTMLCFG_IS_BASIC_WARNING) ;
     393             : }
     394             : 
     395           0 : void SvxHtmlOptions::SetStarBasicWarning(bool bSet)
     396             : {
     397           0 :     if(bSet)
     398           0 :         pImp->nFlags |=  HTMLCFG_IS_BASIC_WARNING;
     399             :     else
     400           0 :         pImp->nFlags &= ~HTMLCFG_IS_BASIC_WARNING;
     401           0 :     SetModified();
     402           0 : }
     403             : 
     404          18 : rtl_TextEncoding SvxHtmlOptions::GetTextEncoding() const
     405             : {
     406             :     rtl_TextEncoding eRet;
     407          18 :     if(pImp->bIsEncodingDefault)
     408          18 :         eRet = SvtSysLocale::GetBestMimeEncoding();
     409             :     else
     410           0 :         eRet = (rtl_TextEncoding)pImp->eEncoding;
     411          18 :     return eRet;
     412             : }
     413             : 
     414           0 : void SvxHtmlOptions::SetTextEncoding( rtl_TextEncoding eEnc )
     415             : {
     416           0 :     pImp->eEncoding = eEnc;
     417           0 :     pImp->bIsEncodingDefault = false;
     418           0 :     SetModified();
     419           0 : }
     420             : 
     421           0 : bool SvxHtmlOptions::IsDefaultTextEncoding() const
     422             : {
     423           0 :     return pImp->bIsEncodingDefault;
     424             : }
     425             : 
     426             : namespace
     427             : {
     428             :     class theSvxHtmlOptions : public rtl::Static<SvxHtmlOptions, theSvxHtmlOptions> {};
     429             : }
     430             : 
     431        1742 : SvxHtmlOptions& SvxHtmlOptions::Get()
     432             : {
     433        1742 :     return theSvxHtmlOptions::get();
     434             : }
     435             : 
     436           1 : bool SvxHtmlOptions::IsNumbersEnglishUS() const
     437             : {
     438           1 :     return 0 != (pImp->nFlags & HTMLCFG_NUMBERS_ENGLISH_US) ;
     439             : }
     440             : 
     441           0 : void SvxHtmlOptions::SetNumbersEnglishUS(bool bSet)
     442             : {
     443           0 :     if(bSet)
     444           0 :         pImp->nFlags |=  HTMLCFG_NUMBERS_ENGLISH_US;
     445             :     else
     446           0 :         pImp->nFlags &= ~HTMLCFG_NUMBERS_ENGLISH_US;
     447           0 :     SetModified();
     448           0 : }
     449             : 
     450             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11