summaryrefslogtreecommitdiffstats
path: root/include/xmloff/xmluconv.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/xmloff/xmluconv.hxx')
-rw-r--r--include/xmloff/xmluconv.hxx331
1 files changed, 331 insertions, 0 deletions
diff --git a/include/xmloff/xmluconv.hxx b/include/xmloff/xmluconv.hxx
new file mode 100644
index 0000000000..c9e1bea3c9
--- /dev/null
+++ b/include/xmloff/xmluconv.hxx
@@ -0,0 +1,331 @@
+/* -*- 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 .
+ */
+
+#ifndef INCLUDED_XMLOFF_XMLUCONV_HXX
+#define INCLUDED_XMLOFF_XMLUCONV_HXX
+
+#include <sal/config.h>
+#include <xmloff/dllapi.h>
+#include <sal/types.h>
+
+#include <memory>
+
+#include <rtl/ustring.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <xmloff/xmltoken.hxx>
+
+#include <unotools/saveopt.hxx>
+
+#include <tools/fldunit.hxx>
+
+namespace com::sun::star {
+ namespace text { class XNumberingTypeInfo; }
+}
+
+namespace basegfx
+{
+ class B3DVector;
+}
+
+namespace com::sun::star::beans { class XPropertySet; }
+namespace com::sun::star::beans { struct PropertyValue; }
+namespace com::sun::star::drawing { struct Position3D; }
+namespace com::sun::star::frame { class XModel; }
+namespace com::sun::star::uno { class XComponentContext; }
+namespace com::sun::star::uno { template <class E> class Sequence; }
+namespace com::sun::star::util { struct Date; }
+template <typename EnumT> struct SvXMLEnumMapEntry;
+template <typename EnumT> struct SvXMLEnumStringMapEntry;
+
+class XMLOFF_DLLPUBLIC SvXMLTokenEnumerator
+{
+private:
+ std::u16string_view maTokenString;
+ size_t mnNextTokenPos;
+ sal_Unicode mcSeparator;
+
+public:
+ SvXMLTokenEnumerator( std::u16string_view rString, sal_Unicode cSeparator = u' ' );
+ /** just so no-one accidentally passes a temporary to this, and ends up with this class
+ * accessing the temporary after the temporary has been deleted. */
+ SvXMLTokenEnumerator( OUString&& , sal_Unicode cSeparator = u' ' ) = delete;
+
+ bool getNextToken( std::u16string_view& rToken );
+};
+
+/** the SvXMLTypeConverter converts values of various types from
+ their internal representation to the textual form used in xml
+ and back.
+ Most of the methods are static but the SvXMLTypeConverter can
+ also store default units for both numerical and textual measures.
+
+ @attention:
+ a lot of the methods here have been moved to <sax/tools/converter.hxx>!
+*/
+
+class XMLOFF_DLLPUBLIC SvXMLUnitConverter final
+{
+private:
+ SvXMLUnitConverter(const SvXMLUnitConverter&) = delete;
+ SvXMLUnitConverter& operator=(const SvXMLUnitConverter&) = delete;
+
+ struct SAL_DLLPRIVATE Impl;
+ ::std::unique_ptr<Impl> m_pImpl;
+
+public:
+ /** constructs a SvXMLUnitConverter. The core measure unit is the
+ default unit for numerical measures, the XML measure unit is
+ the default unit for textual measures */
+ SvXMLUnitConverter(
+ const css::uno::Reference< css::uno::XComponentContext >& xContext,
+ sal_Int16 eCoreMeasureUnit /*css::util::MeasureUnit*/,
+ sal_Int16 eXMLMeasureUnit /*css::util::MeasureUnit*/,
+ SvtSaveOptions::ODFSaneDefaultVersion const nODFVersion);
+
+ ~SvXMLUnitConverter();
+
+ static sal_Int16 GetMeasureUnit(FieldUnit const nFieldUnit);
+
+ /** sets the default unit for numerical measures */
+ void SetCoreMeasureUnit( sal_Int16 const eCoreMeasureUnit /*css::util::MeasureUnit*/);
+
+ /** sets the default unit for textual measures */
+ void SetXMLMeasureUnit( sal_Int16 const eXMLMeasureUnit /*css::util::MeasureUnit*/);
+
+ /** gets the default unit for textual measures */
+ sal_Int16 GetXMLMeasureUnit() const;
+
+ /// ODF version, only when exporting
+ SvtSaveOptions::ODFSaneDefaultVersion getSaneDefaultVersion() const;
+ void overrideSaneDefaultVersion(SvtSaveOptions::ODFSaneDefaultVersion const);
+
+ /** gets XNumberingTypeInfo */
+ const css::uno::Reference< css::text::XNumberingTypeInfo >& getNumTypeInfo() const;
+
+ /** convert string to measure with meCoreMeasureUnit,
+ using optional min and max values*/
+ bool convertMeasureToCore( sal_Int32& rValue,
+ std::u16string_view rString,
+ sal_Int32 nMin = SAL_MIN_INT32,
+ sal_Int32 nMax = SAL_MAX_INT32) const;
+
+ /** convert string to measure with meCoreMeasureUnit,
+ using optional min and max values*/
+ bool convertMeasureToCore( sal_Int32& rValue,
+ std::string_view rString,
+ sal_Int32 nMin = SAL_MIN_INT32,
+ sal_Int32 nMax = SAL_MAX_INT32) const;
+
+ /** convert measure to string: from meCoreMeasureUnit to meXMLMeasureUnit */
+ void convertMeasureToXML( OUStringBuffer& rBuffer,
+ sal_Int32 nMeasure ) const;
+
+ /** convert measure to string: from meCoreMeasureUnit to meXMLMeasureUnit */
+ OUString convertMeasureToXML( sal_Int32 nMeasure ) const;
+
+ /** convert string to enum using given enum map, if the enum is
+ not found in the map, this method will return false */
+ template<typename EnumT>
+ static bool convertEnum( EnumT& rEnum,
+ std::u16string_view rValue,
+ const SvXMLEnumMapEntry<EnumT> *pMap )
+ {
+ sal_uInt16 nTmp;
+ bool bRet = convertEnumImpl(nTmp, rValue,
+ reinterpret_cast<const SvXMLEnumMapEntry<sal_uInt16>*>(pMap));
+ if (bRet)
+ rEnum = static_cast<EnumT>(nTmp);
+ return bRet;
+ }
+
+ /** convert string to enum using given enum map, if the enum is
+ not found in the map, this method will return false */
+ template<typename EnumT>
+ static bool convertEnum( EnumT& rEnum,
+ std::string_view rValue,
+ const SvXMLEnumMapEntry<EnumT> *pMap )
+ {
+ sal_uInt16 nTmp;
+ bool bRet = convertEnumImpl(nTmp, rValue,
+ reinterpret_cast<const SvXMLEnumMapEntry<sal_uInt16>*>(pMap));
+ if (bRet)
+ rEnum = static_cast<EnumT>(nTmp);
+ return bRet;
+ }
+
+ /** convert string to enum using given token map, if the enum is
+ not found in the map, this method will return false */
+ template<typename EnumT>
+ static bool convertEnum( EnumT& rEnum,
+ std::u16string_view rValue,
+ const SvXMLEnumStringMapEntry<EnumT> *pMap )
+ {
+ sal_uInt16 nTmp;
+ bool bRet = convertEnumImpl(nTmp, rValue,
+ reinterpret_cast<const SvXMLEnumStringMapEntry<sal_uInt16>*>(pMap));
+ if (bRet)
+ rEnum = static_cast<EnumT>(nTmp);
+ return bRet;
+ }
+
+ /** convert string to enum using given token map, if the enum is
+ not found in the map, this method will return false */
+ template<typename EnumT>
+ static bool convertEnum( EnumT& rEnum,
+ std::string_view rValue,
+ const SvXMLEnumStringMapEntry<EnumT> *pMap )
+ {
+ sal_uInt16 nTmp;
+ bool bRet = convertEnumImpl(nTmp, rValue,
+ reinterpret_cast<const SvXMLEnumStringMapEntry<sal_uInt16>*>(pMap));
+ if (bRet)
+ rEnum = static_cast<EnumT>(nTmp);
+ return bRet;
+ }
+
+ /** convert enum to string using given enum map with an optional
+ default token. If the enum is not found in the map,
+ this method will either use the given default or return
+ false if not default is set */
+ template<typename EnumT>
+ static bool convertEnum( OUStringBuffer& rBuffer,
+ EnumT nValue,
+ const SvXMLEnumMapEntry<EnumT> *pMap,
+ enum ::xmloff::token::XMLTokenEnum eDefault =
+ ::xmloff::token::XML_TOKEN_INVALID )
+ {
+ return convertEnumImpl(rBuffer, static_cast<sal_uInt16>(nValue),
+ reinterpret_cast<const SvXMLEnumMapEntry<sal_uInt16>*>(pMap), eDefault);
+ }
+
+ /** convert double number to string (using ::rtl::math) and DO
+ convert to export MapUnit using meCoreMeasureUnit/meXMLMeasureUnit */
+ void convertDouble(OUStringBuffer& rBuffer,
+ double fNumber) const;
+
+ /** convert string to double number (using ::rtl::math) and DO convert. */
+ bool convertDouble(double& rValue, std::u16string_view rString) const;
+
+ /** convert string to double number (using ::rtl::math) and DO convert. */
+ bool convertDouble(double& rValue, std::string_view rString) const;
+
+ /** get the Null Date of the XModel and set it to the UnitConverter */
+ bool setNullDate (
+ const css::uno::Reference <css::frame::XModel>& xModel);
+
+ /** convert double to ISO Date Time String */
+ void convertDateTime( OUStringBuffer& rBuffer,
+ const double& fDateTime,
+ bool const bAddTimeIf0AM = false);
+
+ /** convert ISO Date Time String to double */
+ bool convertDateTime(double& fDateTime,
+ std::u16string_view rString) const;
+
+ /** convert ISO Date Time String to double */
+ bool convertDateTime(double& fDateTime,
+ std::string_view rString) const;
+
+ /// these 2 functions use tools Date, so they're not yet moved to sax
+
+ /** convert double to ISO Date Time String */
+ static void convertDateTime( OUStringBuffer& rBuffer,
+ const double& fDateTime,
+ const css::util::Date& aNullDate,
+ bool bAddTimeIf0AM = false);
+ /** convert ISO Date Time String to double */
+ static bool convertDateTime( double& fDateTime,
+ std::u16string_view rString,
+ const css::util::Date& aNullDate);
+ /** convert ISO Date Time String to double */
+ static bool convertDateTime( double& fDateTime,
+ std::string_view rString,
+ const css::util::Date& aNullDate);
+
+ /** convert string to ::basegfx::B3DVector */
+ static bool convertB3DVector( ::basegfx::B3DVector& rVector,
+ std::string_view rValue );
+
+ /** convert B3DVector to string */
+ static void convertB3DVector( OUStringBuffer &rBuffer,
+ const ::basegfx::B3DVector& rVector );
+
+ /** convert string to Position3D */
+ bool convertPosition3D( css::drawing::Position3D& rPosition,
+ std::string_view rValue ) const;
+
+ /** convert Position3D to string */
+ void convertPosition3D( OUStringBuffer &rBuffer,
+ const css::drawing::Position3D& rVector );
+
+
+ /** convert num-format and num-letter-sync values to NumberingType */
+ bool convertNumFormat( sal_Int16& rType,
+ const OUString& rNumFormat,
+ std::u16string_view rNumLetterSync,
+ bool bNumberNone = false ) const;
+
+ /** convert NumberingType to num-format and num-letter-sync values */
+ void convertNumFormat( OUStringBuffer& rBuffer,
+ sal_Int16 nType ) const;
+ static void convertNumLetterSync( OUStringBuffer& rBuffer,
+ sal_Int16 nType );
+
+ static void convertPropertySet(css::uno::Sequence<css::beans::PropertyValue>& rProps,
+ const css::uno::Reference<css::beans::XPropertySet>& aProperties,
+ const std::initializer_list<std::u16string_view>* pOmitFalseValues = nullptr);
+ static void convertPropertySet(css::uno::Reference<css::beans::XPropertySet> const & rProperties,
+ const css::uno::Sequence<css::beans::PropertyValue>& aProps);
+
+ OUString encodeStyleName( const OUString& rName,
+ bool *pEncoded=nullptr ) const;
+ /** convert string (hex) to number (sal_uInt32) */
+ static bool convertHex( sal_uInt32& nVal,
+ std::u16string_view rValue );
+
+ /** convert number (sal_uInt32) to string (hex) */
+ static void convertHex( OUStringBuffer& rBuffer,
+ sal_uInt32 nVal );
+
+private:
+ static bool convertEnumImpl( sal_uInt16& rEnum,
+ std::u16string_view rValue,
+ const SvXMLEnumMapEntry<sal_uInt16> *pMap );
+
+ static bool convertEnumImpl( sal_uInt16& rEnum,
+ std::u16string_view rValue,
+ const SvXMLEnumStringMapEntry<sal_uInt16> *pMap );
+
+ static bool convertEnumImpl( sal_uInt16& rEnum,
+ std::string_view rValue,
+ const SvXMLEnumMapEntry<sal_uInt16> *pMap );
+
+ static bool convertEnumImpl( sal_uInt16& rEnum,
+ std::string_view rValue,
+ const SvXMLEnumStringMapEntry<sal_uInt16> *pMap );
+
+ static bool convertEnumImpl( OUStringBuffer& rBuffer,
+ sal_uInt16 nValue,
+ const SvXMLEnumMapEntry<sal_uInt16> *pMap,
+ enum ::xmloff::token::XMLTokenEnum eDefault );
+};
+
+#endif // INCLUDED_XMLOFF_XMLUCONV_HXX
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */