LCOV - code coverage report
Current view: top level - sfx2/source/bastyp - frmhtmlw.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 151 0.0 %
Date: 2014-04-14 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 <svtools/htmlkywd.hxx>
      21             : 
      22             : #include <rtl/tencinfo.h>
      23             : 
      24             : #include <unotools/configmgr.hxx>
      25             : #include <svl/urihelper.hxx>
      26             : #include <tools/datetime.hxx>
      27             : 
      28             : #include <sfx2/frmhtmlw.hxx>
      29             : #include <sfx2/evntconf.hxx>
      30             : #include <sfx2/frame.hxx>
      31             : #include <sfx2/app.hxx>
      32             : #include <sfx2/viewfrm.hxx>
      33             : #include <sfx2/docfile.hxx>
      34             : #include <sfx2/sfxresid.hxx>
      35             : #include <sfx2/objsh.hxx>
      36             : #include <sfx2/sfx.hrc>
      37             : #include "bastyp.hrc"
      38             : 
      39             : #include <comphelper/processfactory.hxx>
      40             : #include <comphelper/string.hxx>
      41             : 
      42             : #include <com/sun/star/script/Converter.hpp>
      43             : #include <com/sun/star/document/XDocumentProperties.hpp>
      44             : 
      45             : #include <rtl/bootstrap.hxx>
      46             : #include <rtl/strbuf.hxx>
      47             : 
      48             : 
      49             : 
      50             : 
      51             : using namespace ::com::sun::star;
      52             : 
      53             : static sal_Char const sHTML_SC_yes[] =  "YES";
      54             : static sal_Char const sHTML_SC_no[] =       "NO";
      55             : static sal_Char const sHTML_MIME_text_html[] =  "text/html; charset=";
      56             : 
      57           0 : void SfxFrameHTMLWriter::OutMeta( SvStream& rStrm,
      58             :                                   const sal_Char *pIndent,
      59             :                                   const OUString& rName,
      60             :                                   const OUString& rContent,
      61             :                                   bool bHTTPEquiv,
      62             :                                   rtl_TextEncoding eDestEnc,
      63             :                                   OUString *pNonConvertableChars  )
      64             : {
      65           0 :     rStrm.WriteCharPtr( SAL_NEWLINE_STRING );
      66           0 :     if( pIndent )
      67           0 :         rStrm.WriteCharPtr( pIndent );
      68             : 
      69           0 :     OStringBuffer sOut;
      70           0 :     sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_meta).append(' ')
      71           0 :         .append(bHTTPEquiv ? OOO_STRING_SVTOOLS_HTML_O_httpequiv : OOO_STRING_SVTOOLS_HTML_O_name).append("=\"");
      72           0 :     rStrm.WriteCharPtr( sOut.makeStringAndClear().getStr() );
      73             : 
      74           0 :     HTMLOutFuncs::Out_String( rStrm, rName, eDestEnc, pNonConvertableChars );
      75             : 
      76           0 :     sOut.append("\" ").append(OOO_STRING_SVTOOLS_HTML_O_content).append("=\"");
      77           0 :     rStrm.WriteCharPtr( sOut.makeStringAndClear().getStr() );
      78             : 
      79           0 :     HTMLOutFuncs::Out_String( rStrm, rContent, eDestEnc, pNonConvertableChars ).WriteCharPtr( "\">" );
      80           0 : }
      81             : 
      82           0 : void SfxFrameHTMLWriter::Out_DocInfo( SvStream& rStrm, const OUString& rBaseURL,
      83             :         const uno::Reference<document::XDocumentProperties> & i_xDocProps,
      84             :         const sal_Char *pIndent,
      85             :         rtl_TextEncoding eDestEnc,
      86             :         OUString *pNonConvertableChars    )
      87             : {
      88             :     const sal_Char *pCharSet =
      89           0 :                 rtl_getBestMimeCharsetFromTextEncoding( eDestEnc );
      90             : 
      91           0 :     if( pCharSet )
      92             :     {
      93           0 :         OUString aContentType(sHTML_MIME_text_html);
      94           0 :         aContentType += OUString(pCharSet, strlen(pCharSet), RTL_TEXTENCODING_UTF8);
      95             :         OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_content_type, aContentType, true,
      96           0 :                  eDestEnc, pNonConvertableChars );
      97             :     }
      98             : 
      99             :     // Titel (auch wenn er leer ist)
     100           0 :     rStrm.WriteCharPtr( SAL_NEWLINE_STRING );
     101           0 :     if( pIndent )
     102           0 :         rStrm.WriteCharPtr( pIndent );
     103           0 :     HTMLOutFuncs::Out_AsciiTag( rStrm, OOO_STRING_SVTOOLS_HTML_title );
     104           0 :     if( i_xDocProps.is() )
     105             :     {
     106           0 :         const OUString& rTitle = i_xDocProps->getTitle();
     107           0 :         if( !rTitle.isEmpty() )
     108           0 :             HTMLOutFuncs::Out_String( rStrm, rTitle, eDestEnc, pNonConvertableChars );
     109             :     }
     110           0 :     HTMLOutFuncs::Out_AsciiTag( rStrm, OOO_STRING_SVTOOLS_HTML_title, false );
     111             : 
     112             :     // Target-Frame
     113           0 :     if( i_xDocProps.is() )
     114             :     {
     115           0 :         const OUString& rTarget = i_xDocProps->getDefaultTarget();
     116           0 :         if( !rTarget.isEmpty() )
     117             :         {
     118           0 :             rStrm.WriteCharPtr( SAL_NEWLINE_STRING );
     119           0 :             if( pIndent )
     120           0 :                 rStrm.WriteCharPtr( pIndent );
     121             : 
     122           0 :             OStringBuffer sOut;
     123           0 :             sOut.append('<').append(OOO_STRING_SVTOOLS_HTML_base).append(' ')
     124           0 :                 .append(OOO_STRING_SVTOOLS_HTML_O_target).append("=\"");
     125           0 :             rStrm.WriteCharPtr( sOut.makeStringAndClear().getStr() );
     126           0 :             HTMLOutFuncs::Out_String( rStrm, rTarget, eDestEnc, pNonConvertableChars )
     127           0 :                .WriteCharPtr( "\">" );
     128           0 :         }
     129             :     }
     130             : 
     131             :     // Who we are
     132           0 :     OUString sGenerator( SfxResId(STR_HTML_GENERATOR).toString() );
     133           0 :     OUString os( "$_OS" );
     134           0 :     ::rtl::Bootstrap::expandMacros(os);
     135           0 :     sGenerator = sGenerator.replaceFirst( "%1", os );
     136           0 :     OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_generator, sGenerator, false, eDestEnc, pNonConvertableChars );
     137             : 
     138           0 :     if( i_xDocProps.is() )
     139             :     {
     140             :         // Reload
     141           0 :         if( (i_xDocProps->getAutoloadSecs() != 0) ||
     142           0 :             !i_xDocProps->getAutoloadURL().isEmpty() )
     143             :         {
     144             :             OUString sContent = OUString::number(
     145           0 :                                 i_xDocProps->getAutoloadSecs() );
     146             : 
     147           0 :             const OUString &rReloadURL = i_xDocProps->getAutoloadURL();
     148           0 :             if( !rReloadURL.isEmpty() )
     149             :             {
     150           0 :                 sContent += ";URL=";
     151           0 :                 sContent += URIHelper::simpleNormalizedMakeRelative(
     152           0 :                               rBaseURL, rReloadURL);
     153             :             }
     154             : 
     155             :             OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_refresh, sContent, true,
     156           0 :                      eDestEnc, pNonConvertableChars );
     157             :         }
     158             : 
     159             :         // Author
     160           0 :         const OUString& rAuthor = i_xDocProps->getAuthor();
     161           0 :         if( !rAuthor.isEmpty() )
     162             :             OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_author, rAuthor, false,
     163           0 :                      eDestEnc, pNonConvertableChars );
     164             : 
     165             :         // created
     166           0 :         ::util::DateTime uDT = i_xDocProps->getCreationDate();
     167           0 :         Date aD(uDT.Day, uDT.Month, uDT.Year);
     168           0 :         Time aT(uDT.Hours, uDT.Minutes, uDT.Seconds, uDT.NanoSeconds);
     169           0 :         OUString sOut = OUString::number(aD.GetDate());
     170           0 :         sOut += ";";
     171           0 :         sOut += OUString::number(aT.GetTime());
     172             :         OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_created, sOut, false,
     173           0 :                  eDestEnc, pNonConvertableChars );
     174             : 
     175             :         // changedby
     176           0 :         const OUString& rChangedBy = i_xDocProps->getModifiedBy();
     177           0 :         if( !rChangedBy.isEmpty() )
     178             :             OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_changedby, rChangedBy, false,
     179           0 :                      eDestEnc, pNonConvertableChars );
     180             : 
     181             :         // changed
     182           0 :         uDT = i_xDocProps->getModificationDate();
     183           0 :         Date aD2(uDT.Day, uDT.Month, uDT.Year);
     184           0 :         Time aT2(uDT.Hours, uDT.Minutes, uDT.Seconds, uDT.NanoSeconds);
     185           0 :         sOut = OUString::number(aD2.GetDate());
     186           0 :         sOut += ";";
     187           0 :         sOut += OUString::number(aT2.GetTime());
     188             :         OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_changed, sOut, false,
     189           0 :                  eDestEnc, pNonConvertableChars );
     190             : 
     191             :         // Subject
     192           0 :         const OUString& rTheme = i_xDocProps->getSubject();
     193           0 :         if( !rTheme.isEmpty() )
     194             :             OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_classification, rTheme, false,
     195           0 :                      eDestEnc, pNonConvertableChars );
     196             : 
     197             :         // Description
     198           0 :         const OUString& rComment = i_xDocProps->getDescription();
     199           0 :         if( !rComment.isEmpty() )
     200             :             OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_description, rComment, false,
     201           0 :                      eDestEnc, pNonConvertableChars);
     202             : 
     203             :         // Keywords
     204             :         OUString Keywords = ::comphelper::string::convertCommaSeparated(
     205           0 :             i_xDocProps->getKeywords());
     206           0 :         if( !Keywords.isEmpty() )
     207             :             OutMeta( rStrm, pIndent, OOO_STRING_SVTOOLS_HTML_META_keywords, Keywords, false,
     208           0 :                      eDestEnc, pNonConvertableChars);
     209             : 
     210             :         uno::Reference < script::XTypeConverter > xConverter( script::Converter::create(
     211           0 :             ::comphelper::getProcessComponentContext() ) );
     212             :         uno::Reference<beans::XPropertySet> xUserDefinedProps(
     213           0 :             i_xDocProps->getUserDefinedProperties(), uno::UNO_QUERY_THROW);
     214             :         DBG_ASSERT(xUserDefinedProps.is(), "UserDefinedProperties is null");
     215             :         uno::Reference<beans::XPropertySetInfo> xPropInfo =
     216           0 :             xUserDefinedProps->getPropertySetInfo();
     217             :         DBG_ASSERT(xPropInfo.is(), "UserDefinedProperties Info is null");
     218           0 :         uno::Sequence<beans::Property> props = xPropInfo->getProperties();
     219           0 :         for (sal_Int32 i = 0; i < props.getLength(); ++i)
     220             :         {
     221             :             try
     222             :             {
     223           0 :                 OUString name = props[i].Name;
     224           0 :                 uno::Any aStr = xConverter->convertToSimpleType(
     225           0 :                         xUserDefinedProps->getPropertyValue(name),
     226           0 :                         uno::TypeClass_STRING);
     227           0 :                 OUString str;
     228           0 :                 aStr >>= str;
     229           0 :                 OUString valstr(comphelper::string::stripEnd(str, ' '));
     230             :                 OutMeta( rStrm, pIndent, name, valstr, false,
     231           0 :                          eDestEnc, pNonConvertableChars );
     232             :             }
     233           0 :             catch (const uno::Exception&)
     234             :             {
     235             :                 // may happen with concurrent modification...
     236             :                 DBG_WARNING("SfxFrameHTMLWriter::Out_DocInfo: exception");
     237             :             }
     238           0 :         }
     239           0 :     }
     240           0 : }
     241             : 
     242           0 : void SfxFrameHTMLWriter::Out_FrameDescriptor(
     243             :     SvStream& rOut, const OUString& rBaseURL, const uno::Reference < beans::XPropertySet >& xSet,
     244             :     rtl_TextEncoding eDestEnc, OUString *pNonConvertableChars )
     245             : {
     246             :     try
     247             :     {
     248           0 :         OStringBuffer sOut;
     249           0 :         OUString aStr;
     250           0 :         uno::Any aAny = xSet->getPropertyValue("FrameURL");
     251           0 :         if ( (aAny >>= aStr) && !aStr.isEmpty() )
     252             :         {
     253           0 :             OUString aURL = INetURLObject( aStr ).GetMainURL( INetURLObject::DECODE_TO_IURI );
     254           0 :             if( !aURL.isEmpty() )
     255             :             {
     256           0 :                 aURL = URIHelper::simpleNormalizedMakeRelative(
     257           0 :                     rBaseURL, aURL );
     258           0 :                 sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_src)
     259           0 :                     .append("=\"");
     260           0 :                 rOut.WriteCharPtr( sOut.makeStringAndClear().getStr() );
     261           0 :                 HTMLOutFuncs::Out_String( rOut, aURL, eDestEnc, pNonConvertableChars );
     262           0 :                 sOut.append('\"');
     263           0 :             }
     264             :         }
     265             : 
     266           0 :         aAny = xSet->getPropertyValue("FrameName");
     267           0 :         if ( (aAny >>= aStr) && !aStr.isEmpty() )
     268             :         {
     269           0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_name)
     270           0 :                 .append("=\"");
     271           0 :             rOut.WriteCharPtr( sOut.makeStringAndClear().getStr() );
     272           0 :             HTMLOutFuncs::Out_String( rOut, aStr, eDestEnc, pNonConvertableChars );
     273           0 :             sOut.append('\"');
     274             :         }
     275             : 
     276           0 :         sal_Int32 nVal = SIZE_NOT_SET;
     277           0 :         aAny = xSet->getPropertyValue("FrameMarginWidth");
     278           0 :         if ( (aAny >>= nVal) && nVal != SIZE_NOT_SET )
     279             :         {
     280           0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_marginwidth)
     281           0 :                 .append('=').append(nVal);
     282             :         }
     283           0 :         aAny = xSet->getPropertyValue("FrameMarginHeight");
     284           0 :         if ( (aAny >>= nVal) && nVal != SIZE_NOT_SET )
     285             :         {
     286           0 :             sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_marginheight)
     287           0 :                 .append('=').append(nVal);
     288             :         }
     289             : 
     290           0 :         bool bVal = true;
     291           0 :         aAny = xSet->getPropertyValue("FrameIsAutoScroll");
     292           0 :         if ( (aAny >>= bVal) && !bVal )
     293             :         {
     294           0 :             aAny = xSet->getPropertyValue("FrameIsScrollingMode");
     295           0 :             if ( aAny >>= bVal )
     296             :             {
     297           0 :                 const sal_Char *pStr = bVal ? sHTML_SC_yes : sHTML_SC_no;
     298           0 :                 sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_scrolling)
     299           0 :                     .append(pStr);
     300             :             }
     301             :         }
     302             : 
     303             :         // frame border (MS+Netscape-Extension)
     304           0 :         aAny = xSet->getPropertyValue("FrameIsAutoBorder");
     305           0 :         if ( (aAny >>= bVal) && !bVal )
     306             :         {
     307           0 :             aAny = xSet->getPropertyValue("FrameIsBorder");
     308           0 :             if ( aAny >>= bVal )
     309             :             {
     310           0 :                 const char* pStr = bVal ? sHTML_SC_yes : sHTML_SC_no;
     311           0 :                 sOut.append(' ').append(OOO_STRING_SVTOOLS_HTML_O_frameborder)
     312           0 :                     .append('=').append(pStr);
     313             :             }
     314             :         }
     315           0 :         rOut.WriteCharPtr( sOut.getStr() );
     316             :     }
     317           0 :     catch (const uno::Exception&)
     318             :     {
     319             :     }
     320           0 : }
     321             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10