summaryrefslogtreecommitdiff
path: root/xmloff/inc/xmloff/xmluconv.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'xmloff/inc/xmloff/xmluconv.hxx')
-rw-r--r--xmloff/inc/xmloff/xmluconv.hxx448
1 files changed, 448 insertions, 0 deletions
diff --git a/xmloff/inc/xmloff/xmluconv.hxx b/xmloff/inc/xmloff/xmluconv.hxx
new file mode 100644
index 000000000000..607a0771e291
--- /dev/null
+++ b/xmloff/inc/xmloff/xmluconv.hxx
@@ -0,0 +1,448 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: xmluconv.hxx,v $
+ * $Revision: 1.3 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#ifndef _XMLOFF_XMLUCONV_HXX
+#define _XMLOFF_XMLUCONV_HXX
+
+#include "sal/config.h"
+#include "xmloff/dllapi.h"
+#include "sal/types.h"
+
+#include <limits.h>
+#include <tools/solar.h>
+#include <tools/color.hxx>
+#include <tools/mapunit.hxx>
+#include <xmloff/xmlement.hxx>
+#include <xmloff/xmltoken.hxx>
+#include <com/sun/star/util/Date.hpp>
+#include <com/sun/star/frame/XModel.hpp>
+#include <com/sun/star/beans/XPropertySet.hpp>
+#include <com/sun/star/drawing/Position3D.hpp>
+
+// #110680#
+#include <com/sun/star/lang/XMultiServiceFactory.hpp>
+
+//////////////////////////////////////////////////////////////////////////////
+// predeclarations
+
+class Time;
+namespace rtl
+{
+class OUString;
+class OUStringBuffer;
+}
+
+namespace com { namespace sun { namespace star {
+ namespace util { struct DateTime; }
+ namespace text { class XNumberingTypeInfo; }
+ namespace i18n { class XCharacterClassification; }
+}}}
+
+namespace basegfx
+{
+ class B3DVector;
+} // end of namespace basegfx
+
+class XMLOFF_DLLPUBLIC SvXMLTokenEnumerator
+{
+private:
+ const ::rtl::OUString& maTokenString;
+ sal_Int32 mnNextTokenPos;
+ sal_Unicode mcSeperator;
+
+public:
+ SvXMLTokenEnumerator( const ::rtl::OUString& rString, sal_Unicode cSeperator = sal_Unicode(' ') );
+
+ sal_Bool getNextToken( ::rtl::OUString& rToken );
+};
+
+/** the SvXMLTypeConverter converts values of various types from
+ their internal represantation 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.
+*/
+
+class XMLOFF_DLLPUBLIC SvXMLUnitConverter
+{
+private:
+ MapUnit meCoreMeasureUnit;
+ MapUnit meXMLMeasureUnit;
+ com::sun::star::util::Date aNullDate;
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::text::XNumberingTypeInfo > xNumTypeInfo;
+ ::com::sun::star::uno::Reference<
+ ::com::sun::star::i18n::XCharacterClassification > xCharClass;
+ // #110680#
+ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > mxServiceFactory;
+
+ SAL_DLLPRIVATE static ::rtl::OUString msXML_false;
+ SAL_DLLPRIVATE static ::rtl::OUString msXML_true;
+
+ SAL_DLLPRIVATE static void initXMLStrings();
+
+ SAL_DLLPRIVATE void createNumTypeInfo() const;
+
+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 */
+ // #110680#
+ // SvXMLUnitConverter( MapUnit eCoreMeasureUnit, MapUnit eXMLMeasureUnit );
+ SvXMLUnitConverter(
+ MapUnit eCoreMeasureUnit,
+ MapUnit eXMLMeasureUnit,
+ const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >& xServiceFactory );
+
+ virtual ~SvXMLUnitConverter();
+
+ static MapUnit GetMapUnit(sal_Int16 nFieldUnit);
+
+ /** sets the default unit for numerical measures */
+ inline void setCoreMeasureUnit( MapUnit eCoreMeasureUnit );
+
+ /** gets the default unit for numerical measures */
+ inline MapUnit getCoreMeasureUnit() const;
+
+ /** sets the default unit for textual measures */
+ void setXMLMeasureUnit( MapUnit eXMLMeasureUnit );
+
+ /** gets the default unit for textual measures */
+ MapUnit getXMLMeasureUnit() const;
+
+ /** gets XNumberingTypeInfo */
+ const ::com::sun::star::uno::Reference<
+ ::com::sun::star::text::XNumberingTypeInfo >& getNumTypeInfo() const
+ {
+ if( !xNumTypeInfo.is() )
+ createNumTypeInfo();
+ return xNumTypeInfo;
+ }
+
+ /** convert string to measure using optional min and max values*/
+ sal_Bool convertMeasure( sal_Int32& rValue,
+ const ::rtl::OUString& rString,
+ sal_Int32 nMin = SAL_MIN_INT32,
+ sal_Int32 nMax = SAL_MAX_INT32) const;
+
+ /** convert measure to string */
+ void convertMeasure( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int32 nMeasure ) const;
+
+ /** convert measure with given unit to string */
+ void convertMeasure( ::rtl::OUStringBuffer&,
+ sal_Int32 nMeasure,
+ MapUnit eSrcUnit ) const;
+
+ /** convert string to measure in given unit
+ using optional min and max values */
+ static sal_Bool convertMeasure( sal_Int32& rVal,
+ const ::rtl::OUString& rString,
+ MapUnit eDstUnit,
+ sal_Int32 nMin = SAL_MIN_INT32,
+ sal_Int32 nMax = SAL_MAX_INT32);
+
+ /** convert measure in given unit to string with given unit */
+ static void convertMeasure( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int32 nMeasure,
+ MapUnit eSrcUnit,
+ MapUnit eDstUnit );
+
+ /** convert string to boolean */
+ static sal_Bool convertBool( sal_Bool& rBool,
+ const ::rtl::OUString& rString );
+
+ /** convert boolean to string */
+ static void convertBool( ::rtl::OUStringBuffer& rBuffer,
+ sal_Bool bValue );
+
+ /** convert string to percent */
+ static sal_Bool convertPercent( sal_Int32& rValue,
+ const ::rtl::OUString& rString );
+
+ /** convert percent to string */
+ static void convertPercent( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int32 nValue );
+
+ /** convert string to pixel measure unite */
+ static sal_Bool convertMeasurePx( sal_Int32& rValue,
+ const ::rtl::OUString& rString );
+
+ /** convert pixel measure unit to string */
+ static void convertMeasurePx( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int32 nValue );
+
+ /** convert string to enum using given enum map, if the enum is
+ not found in the map, this method will return false */
+ static sal_Bool convertEnum( sal_uInt16& rEnum,
+ const ::rtl::OUString& rValue,
+ const SvXMLEnumMapEntry *pMap );
+
+ /** convert string to enum using given token map, if the enum is
+ not found in the map, this method will return false */
+ static sal_Bool convertEnum( sal_uInt16& rEnum,
+ const ::rtl::OUString& rValue,
+ const SvXMLEnumStringMapEntry *pMap );
+
+ /** 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 */
+ static sal_Bool convertEnum( ::rtl::OUStringBuffer& rBuffer,
+ unsigned int nValue,
+ const SvXMLEnumMapEntry *pMap,
+ enum ::xmloff::token::XMLTokenEnum eDefault =
+ ::xmloff::token::XML_TOKEN_INVALID );
+
+ /** convert enum to string using given token 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 */
+ static sal_Bool convertEnum( ::rtl::OUStringBuffer& rBuffer,
+ USHORT nValue,
+ const SvXMLEnumStringMapEntry *pMap,
+ sal_Char* pDefault = NULL );
+
+ /** convert string to color */
+ static sal_Bool convertColor( Color& rColor,
+ const ::rtl::OUString&rValue );
+
+ /** convert color to string */
+ static void convertColor( ::rtl::OUStringBuffer &rBuffer,
+ const Color& rCol );
+
+ /** convert number to string */
+ static void convertNumber( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int32 nNumber );
+
+ /** convert string to number with optional min and max values */
+ static sal_Bool convertNumber( sal_Int32& rValue,
+ const ::rtl::OUString& rString,
+ sal_Int32 nMin = SAL_MIN_INT32,
+ sal_Int32 nMax = SAL_MAX_INT32);
+
+ /** convert number to string */
+ static void convertNumber64( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int64 nNumber );
+
+ /** convert string to number with optional min and max values */
+ static sal_Bool convertNumber64( sal_Int64& rValue,
+ const ::rtl::OUString& rString,
+ sal_Int64 nMin = SAL_MIN_INT64,
+ sal_Int64 nMax = SAL_MAX_INT64);
+
+ /** convert double number to string (using ::rtl::math) and DO
+ convert to export MapUnit */
+ void convertDouble(::rtl::OUStringBuffer& rBuffer,
+ double fNumber, BOOL bWriteUnits) const;
+
+ /** convert double number to string (using ::rtl::math) and
+ DO convert from eSrcUnit to export MapUnit */
+ static void convertDouble( ::rtl::OUStringBuffer& rBuffer,
+ double fNumber, BOOL bWriteUnits, MapUnit eCoreUnit, MapUnit eDstUnit);
+
+ /** convert double number to string (using ::rtl::math) without unit conversion */
+ static void convertDouble( ::rtl::OUStringBuffer& rBuffer, double fNumber);
+
+ /** convert string to double number (using ::rtl::math) and DO convert. */
+ sal_Bool convertDouble(double& rValue, const ::rtl::OUString& rString, BOOL bLookForUnits) const;
+
+ /** convert string to double number (using ::rtl::math) and DO convert from
+ SrcUnit to DstUnit. */
+ static sal_Bool convertDouble(double& rValue,
+ const ::rtl::OUString& rString, MapUnit eSrcUnit, MapUnit eCoreUnit);
+
+ /** convert string to double number (using ::rtl::math) without unit conversion */
+ static sal_Bool convertDouble(double& rValue, const ::rtl::OUString& rString);
+
+ /** get the Null Date of the XModel and set it to the UnitConverter */
+ sal_Bool setNullDate (
+ const com::sun::star::uno::Reference <com::sun::star::frame::XModel>& xModel);
+
+ /** Set the Null Date of the UnitConverter */
+ void setNullDate ( const com::sun::star::util::Date& aTempNullDate ) { aNullDate = aTempNullDate; }
+
+ /** convert double to ISO Time String */
+ static void convertTime( ::rtl::OUStringBuffer& rBuffer,
+ const double& fTime);
+
+ /** convert util::DateTime to ISO Time String */
+ static void convertTime( ::rtl::OUStringBuffer& rBuffer,
+ const ::com::sun::star::util::DateTime& rDateTime );
+
+ /** convert ISO Time String to double */
+ static sal_Bool convertTime( double& fTime,
+ const ::rtl::OUString& rString);
+
+ /** convert ISO Time String to util::DateTime */
+ static sal_Bool convertTime( ::com::sun::star::util::DateTime& rDateTime,
+ const ::rtl::OUString& rString );
+
+ /** convert double to ISO Date Time String */
+ void convertDateTime( ::rtl::OUStringBuffer& rBuffer,
+ const double& fDateTime,
+ sal_Bool bAddTimeIf0AM=sal_False) { convertDateTime(rBuffer, fDateTime, aNullDate, bAddTimeIf0AM); }
+
+ /** convert ISO Date Time String to double */
+ sal_Bool convertDateTime( double& fDateTime,
+ const ::rtl::OUString& rString) { return convertDateTime(fDateTime, rString, aNullDate); }
+
+ /** convert double to ISO Date Time String */
+ static void convertDateTime( ::rtl::OUStringBuffer& rBuffer,
+ const double& fDateTime,
+ const com::sun::star::util::Date& aNullDate,
+ sal_Bool bAddTimeIf0AM=sal_False);
+ /** convert ISO Date Time String to double */
+ static sal_Bool convertDateTime( double& fDateTime,
+ const ::rtl::OUString& rString,
+ const com::sun::star::util::Date& aNullDate);
+
+ /** converts the given time value into an ISO-conform duration string
+
+ @param rTime
+ the time value to convert. This parameter is evaluated only down to the seconds - in particular,
+ "100th seconds" are ignored.
+ @param nSecondsFraction
+ Additional milleseconds to add to the time. Must be smaller than 1000.
+ This parameter is necessary since neither <type>Time</type> nor <type scope="com::sun::star::util">Time</type>
+ have a sufficient resolution to transport milliseconds.
+ @see http://www.w3.org/TR/xmlschema-2/#duration
+ */
+ static ::rtl::OUString convertTimeDuration( const ::Time& rTime, sal_Int32 nSecondsFraction = 0 );
+
+ /** converts the given ISO-conform duration string into a time value
+
+ @param rTime
+ the converted time value. Fractions of seconds of this object are not filled, even if present in
+ the string. See <arg>nSecondsFraction</arg>
+
+ @param pSecondsFraction
+ recieves fractions of whole seconds, in milliseconds. May be <NULL/>
+ This parameter is necessary since neither <type>Time</type> nor <type scope="com::sun::star::util">Time</type>
+ have a sufficient resolution to transport milliseconds.
+ @see http://www.w3.org/TR/xmlschema-2/#duration
+ */
+ static bool convertTimeDuration( const rtl::OUString& rString, ::Time& rTime, sal_Int32* pSecondsFraction = NULL );
+
+ /** convert string to ::basegfx::B3DVector */
+ static sal_Bool convertB3DVector( ::basegfx::B3DVector& rVector,
+ const ::rtl::OUString& rValue );
+
+ /** convert B3DVector to string */
+ static void convertB3DVector( ::rtl::OUStringBuffer &rBuffer,
+ const ::basegfx::B3DVector& rVector );
+
+ /** convert string to Position3D */
+ sal_Bool convertPosition3D( com::sun::star::drawing::Position3D& rPosition,
+ const ::rtl::OUString& rValue );
+
+ /** convert Position3D to string */
+ void convertPosition3D( ::rtl::OUStringBuffer &rBuffer,
+ const com::sun::star::drawing::Position3D& rVector );
+
+ /** convert util::DateTime to ISO Date String */
+ static void convertDateTime( ::rtl::OUStringBuffer& rBuffer,
+ const com::sun::star::util::DateTime& rDateTime,
+ sal_Bool bAddTimeIf0AM=sal_False );
+
+ /** convert ISO Date String to util::DateTime */
+ static sal_Bool convertDateTime( com::sun::star::util::DateTime& rDateTime,
+ const ::rtl::OUString& rString );
+
+ /** gets the position of the first comma after npos in the string
+ rStr. Commas inside '"' pairs are not matched */
+ static sal_Int32 indexOfComma( const ::rtl::OUString& rStr,
+ sal_Int32 nPos );
+
+ static void encodeBase64(rtl::OUStringBuffer& aStrBuffer, const com::sun::star::uno::Sequence<sal_Int8>& aPass);
+
+ // Decode a base 64 encoded string into a sequence of bytes. The first
+ // version can be used for attribute values only, bacause it does not
+ // return any chars left from conversion.
+ // For text submitted throgh the SAX characters call, the later method
+ // must be used!
+ static void decodeBase64(com::sun::star::uno::Sequence<sal_Int8>& aPass, const rtl::OUString& sBuffer);
+
+ static sal_Int32 decodeBase64SomeChars(com::sun::star::uno::Sequence<sal_Int8>& aPass, const rtl::OUString& sBuffer);
+
+ /** convert num-forat and num-letter-sync values to NumberingType */
+ sal_Bool convertNumFormat( sal_Int16& rType,
+ const ::rtl::OUString& rNumFormat,
+ const ::rtl::OUString& rNumLetterSync,
+ sal_Bool bNumberNone = sal_False ) const;
+
+ /** convert NumberingType to num-forat and num-letter-sync values */
+ void convertNumFormat( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int16 nType ) const;
+ void convertNumLetterSync( ::rtl::OUStringBuffer& rBuffer,
+ sal_Int16 nType ) const;
+
+ static void convertPropertySet(com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& rProps,
+ const com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& aProperties);
+ static void convertPropertySet(com::sun::star::uno::Reference<com::sun::star::beans::XPropertySet>& rProperties,
+ const com::sun::star::uno::Sequence<com::sun::star::beans::PropertyValue>& aProps);
+
+ static void clearUndefinedChars(rtl::OUString& rTarget, const rtl::OUString& rSource);
+
+ ::rtl::OUString encodeStyleName( const ::rtl::OUString& rName,
+ sal_Bool *pEncoded=0 ) const;
+
+ /** convert an Any to string (typesafe) */
+ static sal_Bool convertAny( ::rtl::OUStringBuffer& sValue,
+ ::rtl::OUStringBuffer& sType ,
+ const com::sun::star::uno::Any& aValue);
+
+ /** convert a string to Any (typesafe) */
+ static sal_Bool convertAny( com::sun::star::uno::Any& aValue,
+ const ::rtl::OUString& sType ,
+ const ::rtl::OUString& sValue);
+};
+
+inline void SvXMLUnitConverter::setCoreMeasureUnit( MapUnit eCoreMeasureUnit )
+{
+ meCoreMeasureUnit = eCoreMeasureUnit;
+}
+
+inline MapUnit SvXMLUnitConverter::getCoreMeasureUnit() const
+{
+ return meCoreMeasureUnit;
+}
+
+inline void SvXMLUnitConverter::setXMLMeasureUnit( MapUnit eXMLMeasureUnit )
+{
+ meXMLMeasureUnit = eXMLMeasureUnit;
+}
+
+inline MapUnit SvXMLUnitConverter::getXMLMeasureUnit() const
+{
+ return meXMLMeasureUnit;
+}
+
+#endif // _XMLOFF_XMLUCONV_HXX