summaryrefslogtreecommitdiffstats
path: root/svtools/source/config/htmlcfg.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'svtools/source/config/htmlcfg.cxx')
-rw-r--r--svtools/source/config/htmlcfg.cxx415
1 files changed, 415 insertions, 0 deletions
diff --git a/svtools/source/config/htmlcfg.cxx b/svtools/source/config/htmlcfg.cxx
new file mode 100644
index 000000000..fbd7f57e2
--- /dev/null
+++ b/svtools/source/config/htmlcfg.cxx
@@ -0,0 +1,415 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+
+#include <sal/config.h>
+
+#include <o3tl/any.hxx>
+#include <osl/thread.h>
+#include <svtools/htmlcfg.hxx>
+#include <svtools/parhtml.hxx>
+#include <unotools/syslocale.hxx>
+#include <tools/debug.hxx>
+#include <rtl/instance.hxx>
+#include <o3tl/typed_flags_set.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+
+namespace {
+
+enum class HtmlCfgFlags {
+ NONE = 0x000,
+ UnknownTags = 0x001,
+ StarBasic = 0x008,
+ LocalGrf = 0x010,
+ PrintLayoutExtension = 0x020,
+ IgnoreFontFamily = 0x040,
+ IsBasicWarning = 0x080,
+ NumbersEnglishUS = 0x100,
+};
+
+}
+
+namespace o3tl {
+ template<> struct typed_flags<HtmlCfgFlags> : is_typed_flags<HtmlCfgFlags, 0x1f9> {};
+}
+
+using namespace utl;
+using namespace com::sun::star::uno;
+
+
+struct HtmlOptions_Impl
+{
+ HtmlCfgFlags nFlags;
+ sal_Int32 nExportMode;
+ sal_Int32 aFontSizeArr[HTML_FONT_COUNT];
+ sal_Int32 eEncoding;
+ bool bIsEncodingDefault;
+
+ HtmlOptions_Impl() :
+ nFlags(HtmlCfgFlags::LocalGrf|HtmlCfgFlags::IsBasicWarning),
+ nExportMode(HTML_CFG_NS40),
+ eEncoding( osl_getThreadTextEncoding() ),
+ bIsEncodingDefault(true)
+ {
+ aFontSizeArr[0] = HTMLFONTSZ1_DFLT;
+ aFontSizeArr[1] = HTMLFONTSZ2_DFLT;
+ aFontSizeArr[2] = HTMLFONTSZ3_DFLT;
+ aFontSizeArr[3] = HTMLFONTSZ4_DFLT;
+ aFontSizeArr[4] = HTMLFONTSZ5_DFLT;
+ aFontSizeArr[5] = HTMLFONTSZ6_DFLT;
+ aFontSizeArr[6] = HTMLFONTSZ7_DFLT;
+ }
+};
+
+const Sequence<OUString>& SvxHtmlOptions::GetPropertyNames()
+{
+ static Sequence<OUString> const aNames
+ {
+ "Import/UnknownTag", // 0
+ "Import/FontSetting", // 1
+ "Import/FontSize/Size_1", // 2
+ "Import/FontSize/Size_2", // 3
+ "Import/FontSize/Size_3", // 4
+ "Import/FontSize/Size_4", // 5
+ "Import/FontSize/Size_5", // 6
+ "Import/FontSize/Size_6", // 7
+ "Import/FontSize/Size_7", // 8
+ "Export/Browser", // 9
+ "Export/Basic", // 0
+ "Export/PrintLayout", // 11
+ "Export/LocalGraphic", // 12
+ "Export/Warning", // 13
+ "Export/Encoding", // 14
+ "Import/NumbersEnglishUS" // 15
+ };
+ return aNames;
+}
+
+SvxHtmlOptions::SvxHtmlOptions() :
+ ConfigItem("Office.Common/Filter/HTML"),
+ pImpl( new HtmlOptions_Impl )
+{
+ Load( GetPropertyNames() );
+}
+
+
+SvxHtmlOptions::~SvxHtmlOptions()
+{
+}
+
+void SvxHtmlOptions::Load( const Sequence< OUString >& aNames )
+{
+ Sequence<Any> aValues = GetProperties(aNames);
+ const Any* pValues = aValues.getConstArray();
+ DBG_ASSERT(aValues.getLength() == aNames.getLength(), "GetProperties failed");
+ if(aValues.getLength() != aNames.getLength())
+ return;
+
+ pImpl->nFlags = HtmlCfgFlags::NONE;
+ for(int nProp = 0; nProp < aNames.getLength(); nProp++)
+ {
+ if(pValues[nProp].hasValue())
+ {
+ switch(nProp)
+ {
+ case 0:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::UnknownTags;
+ break;//"Import/UnknownTag",
+ case 1:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::IgnoreFontFamily;
+ break;//"Import/FontSetting",
+ case 2: pValues[nProp] >>= pImpl->aFontSizeArr[0]; break;//"Import/FontSize/Size_1",
+ case 3: pValues[nProp] >>= pImpl->aFontSizeArr[1]; break;//"Import/FontSize/Size_2",
+ case 4: pValues[nProp] >>= pImpl->aFontSizeArr[2]; break;//"Import/FontSize/Size_3",
+ case 5: pValues[nProp] >>= pImpl->aFontSizeArr[3]; break;//"Import/FontSize/Size_4",
+ case 6: pValues[nProp] >>= pImpl->aFontSizeArr[4]; break;//"Import/FontSize/Size_5",
+ case 7: pValues[nProp] >>= pImpl->aFontSizeArr[5]; break;//"Import/FontSize/Size_6",
+ case 8: pValues[nProp] >>= pImpl->aFontSizeArr[6]; break;//"Import/FontSize/Size_7",
+ case 9://"Export/Browser",
+ {
+ sal_Int32 nExpMode = 0;
+ pValues[nProp] >>= nExpMode;
+ switch( nExpMode )
+ {
+ case 1: nExpMode = HTML_CFG_MSIE; break;
+ case 3: nExpMode = HTML_CFG_WRITER; break;
+ case 4: nExpMode = HTML_CFG_NS40; break;
+ default: nExpMode = HTML_CFG_NS40; break;
+ }
+
+ pImpl->nExportMode = nExpMode;
+ }
+ break;
+ case 10:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::StarBasic;
+ break;//"Export/Basic",
+ case 11:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::PrintLayoutExtension;
+ break;//"Export/PrintLayout",
+ case 12:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::LocalGrf;
+ break;//"Export/LocalGraphic",
+ case 13:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::IsBasicWarning;
+ break;//"Export/Warning"
+
+ case 14: pValues[nProp] >>= pImpl->eEncoding;
+ pImpl->bIsEncodingDefault = false;
+ break;//"Export/Encoding"
+
+ case 15:
+ if(*o3tl::doAccess<bool>(pValues[nProp]))
+ pImpl->nFlags |= HtmlCfgFlags::NumbersEnglishUS;
+ break;//"Import/NumbersEnglishUS"
+ }
+ }
+ }
+}
+
+
+void SvxHtmlOptions::ImplCommit()
+{
+ const Sequence<OUString>& aNames = GetPropertyNames();
+
+ Sequence<Any> aValues(aNames.getLength());
+ Any* pValues = aValues.getArray();
+
+ for(int nProp = 0; nProp < aNames.getLength(); nProp++)
+ {
+ bool bSet = false;
+ switch(nProp)
+ {
+ case 0: bSet = bool(pImpl->nFlags & HtmlCfgFlags::UnknownTags);break;//"Import/UnknownTag",
+ case 1: bSet = bool(pImpl->nFlags & HtmlCfgFlags::IgnoreFontFamily);break;//"Import/FontSetting",
+ case 2: pValues[nProp] <<= pImpl->aFontSizeArr[0];break;//"Import/FontSize/Size_1",
+ case 3: pValues[nProp] <<= pImpl->aFontSizeArr[1];break;//"Import/FontSize/Size_2",
+ case 4: pValues[nProp] <<= pImpl->aFontSizeArr[2];break;//"Import/FontSize/Size_3",
+ case 5: pValues[nProp] <<= pImpl->aFontSizeArr[3];break;//"Import/FontSize/Size_4",
+ case 6: pValues[nProp] <<= pImpl->aFontSizeArr[4];break;//"Import/FontSize/Size_5",
+ case 7: pValues[nProp] <<= pImpl->aFontSizeArr[5];break;//"Import/FontSize/Size_6",
+ case 8: pValues[nProp] <<= pImpl->aFontSizeArr[6];break;//"Import/FontSize/Size_7",
+ case 9: //"Export/Browser",
+ {
+ sal_Int32 nExpMode = pImpl->nExportMode;
+
+ switch( nExpMode )
+ {
+ case HTML_CFG_MSIE: nExpMode = 1; break;
+ case HTML_CFG_WRITER: nExpMode = 3; break;
+ case HTML_CFG_NS40: nExpMode = 4; break;
+ default: nExpMode = 4; break; // NS40
+ }
+
+ pValues[nProp] <<= nExpMode;
+ break;
+ }
+ case 10: bSet = bool(pImpl->nFlags & HtmlCfgFlags::StarBasic);break;//"Export/Basic",
+ case 11: bSet = bool(pImpl->nFlags & HtmlCfgFlags::PrintLayoutExtension);break;//"Export/PrintLayout",
+ case 12: bSet = bool(pImpl->nFlags & HtmlCfgFlags::LocalGrf);break;//"Export/LocalGraphic",
+ case 13: bSet = bool(pImpl->nFlags & HtmlCfgFlags::IsBasicWarning);break;//"Export/Warning"
+ case 14:
+ if(!pImpl->bIsEncodingDefault)
+ pValues[nProp] <<= pImpl->eEncoding;
+ break;//"Export/Encoding",
+ case 15: bSet = bool(pImpl->nFlags & HtmlCfgFlags::NumbersEnglishUS);break;//"Import/NumbersEnglishUS"
+ }
+ if(nProp < 2 || ( nProp > 9 && nProp < 14 ) || nProp == 15)
+ pValues[nProp] <<= bSet;
+ }
+ PutProperties(aNames, aValues);
+}
+
+void SvxHtmlOptions::Notify( const css::uno::Sequence< OUString >& )
+{
+ Load( GetPropertyNames() );
+}
+
+
+sal_uInt16 SvxHtmlOptions::GetFontSize(sal_uInt16 nPos) const
+{
+ if(nPos < HTML_FONT_COUNT)
+ return static_cast<sal_uInt16>(pImpl->aFontSizeArr[nPos]);
+ return 0;
+}
+
+void SvxHtmlOptions::SetFontSize(sal_uInt16 nPos, sal_uInt16 nSize)
+{
+ if(nPos < HTML_FONT_COUNT)
+ {
+ pImpl->aFontSizeArr[nPos] = nSize;
+ SetModified();
+ }
+}
+
+
+bool SvxHtmlOptions::IsImportUnknown() const
+{
+ return bool(pImpl->nFlags & HtmlCfgFlags::UnknownTags) ;
+}
+
+
+void SvxHtmlOptions::SetImportUnknown(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::UnknownTags;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::UnknownTags;
+ SetModified();
+}
+
+
+sal_uInt16 SvxHtmlOptions::GetExportMode() const
+{
+ return static_cast<sal_uInt16>(pImpl->nExportMode);
+}
+
+
+bool SvxHtmlOptions::IsStarBasic() const
+{
+ return bool(pImpl->nFlags & HtmlCfgFlags::StarBasic) ;
+}
+
+
+void SvxHtmlOptions::SetStarBasic(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::StarBasic;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::StarBasic;
+ SetModified();
+}
+
+bool SvxHtmlOptions::IsSaveGraphicsLocal() const
+{
+ return bool(pImpl->nFlags & HtmlCfgFlags::LocalGrf) ;
+}
+
+void SvxHtmlOptions::SetSaveGraphicsLocal(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::LocalGrf;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::LocalGrf;
+ SetModified();
+}
+
+bool SvxHtmlOptions::IsPrintLayoutExtension() const
+{
+ bool bRet(pImpl->nFlags & HtmlCfgFlags::PrintLayoutExtension);
+ switch( pImpl->nExportMode )
+ {
+ case HTML_CFG_MSIE:
+ case HTML_CFG_NS40 :
+ case HTML_CFG_WRITER :
+ break;
+ default:
+ bRet = false;
+ }
+ return bRet;
+}
+
+void SvxHtmlOptions::SetPrintLayoutExtension(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::PrintLayoutExtension;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::PrintLayoutExtension;
+ SetModified();
+}
+
+bool SvxHtmlOptions::IsIgnoreFontFamily() const
+{
+ return bool(pImpl->nFlags & HtmlCfgFlags::IgnoreFontFamily) ;
+}
+
+void SvxHtmlOptions::SetIgnoreFontFamily(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::IgnoreFontFamily;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::IgnoreFontFamily;
+ SetModified();
+}
+
+bool SvxHtmlOptions::IsStarBasicWarning() const
+{
+ return bool(pImpl->nFlags & HtmlCfgFlags::IsBasicWarning) ;
+}
+
+void SvxHtmlOptions::SetStarBasicWarning(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::IsBasicWarning;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::IsBasicWarning;
+ SetModified();
+}
+
+rtl_TextEncoding SvxHtmlOptions::GetTextEncoding() const
+{
+ rtl_TextEncoding eRet;
+ if(pImpl->bIsEncodingDefault)
+ eRet = SvtSysLocale::GetBestMimeEncoding();
+ else
+ eRet = static_cast<rtl_TextEncoding>(pImpl->eEncoding);
+ return eRet;
+}
+
+void SvxHtmlOptions::SetTextEncoding( rtl_TextEncoding eEnc )
+{
+ pImpl->eEncoding = eEnc;
+ pImpl->bIsEncodingDefault = false;
+ SetModified();
+}
+
+bool SvxHtmlOptions::IsDefaultTextEncoding() const
+{
+ return pImpl->bIsEncodingDefault;
+}
+
+namespace
+{
+ class theSvxHtmlOptions : public rtl::Static<SvxHtmlOptions, theSvxHtmlOptions> {};
+}
+
+SvxHtmlOptions& SvxHtmlOptions::Get()
+{
+ return theSvxHtmlOptions::get();
+}
+
+bool SvxHtmlOptions::IsNumbersEnglishUS() const
+{
+ return bool(pImpl->nFlags & HtmlCfgFlags::NumbersEnglishUS) ;
+}
+
+void SvxHtmlOptions::SetNumbersEnglishUS(bool bSet)
+{
+ if(bSet)
+ pImpl->nFlags |= HtmlCfgFlags::NumbersEnglishUS;
+ else
+ pImpl->nFlags &= ~HtmlCfgFlags::NumbersEnglishUS;
+ SetModified();
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */