diff options
Diffstat (limited to 'writerfilter/source/resourcemodel/util.cxx')
-rw-r--r-- | writerfilter/source/resourcemodel/util.cxx | 427 |
1 files changed, 427 insertions, 0 deletions
diff --git a/writerfilter/source/resourcemodel/util.cxx b/writerfilter/source/resourcemodel/util.cxx new file mode 100644 index 000000000000..3d041d18c126 --- /dev/null +++ b/writerfilter/source/resourcemodel/util.cxx @@ -0,0 +1,427 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * 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. + * + ************************************************************************/ +#include <stdio.h> +#include <stdlib.h> +#include <fstream> +#include <string> +#include <com/sun/star/awt/Point.hpp> +#include <com/sun/star/awt/Rectangle.hpp> +#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/drawing/BitmapMode.hpp> +#include <com/sun/star/drawing/FillStyle.hpp> +#include <com/sun/star/drawing/HomogenMatrix3.hpp> +#include <com/sun/star/text/TextContentAnchorType.hpp> +#include <resourcemodel/WW8ResourceModel.hxx> +#include <resourcemodel/TagLogger.hxx> +#include <resourcemodel/util.hxx> + +namespace writerfilter +{ +using namespace com::sun::star; +using namespace std; +using text::TextContentAnchorType; + +static string & logger_file() +{ + static string _logger_file = string(getenv("TEMP")?getenv("TEMP"):"/tmp") + "/writerfilter.ooxml.tmp"; + return _logger_file; +} + +static ofstream & logger_stream() +{ + static ofstream _logger_stream(logger_file().c_str()); + return _logger_stream; +} + + +void logger(string prefix, string message) +{ + logger_stream() << prefix << ":" << message << endl; + logger_stream().flush(); +} + + string xmlify(const string & str) + { + string result = ""; + char sBuffer[16]; + + for (string::const_iterator aIt = str.begin(); aIt != str.end(); ++aIt) + { + char c = *aIt; + + if (isprint(c) && c != '\"') + { + if (c == '<') + result += "<"; + else if (c == '>') + result += ">"; + else if (c == '&') + result += "&"; + else + result += c; + } + else + { + snprintf(sBuffer, sizeof(sBuffer), "\\%03d", c); + result += sBuffer; + } + } + + return result; + } + +#ifdef DEBUG +string propertysetToString(uno::Reference<beans::XPropertySet> const & xPropSet) +{ + string sResult; + + static int nAttribNames = 9; + static string sPropertyAttribNames[9] = + { + "MAYBEVOID", + "BOUND", + "CONSTRAINED", + "TRANSIENT", + "READONLY", + "MAYBEAMBIGUOUS", + "MAYBEDEFAULT", + "REMOVEABLE", + "OPTIONAL" + }; + + static const ::rtl::OUString sMetaFile(RTL_CONSTASCII_USTRINGPARAM("MetaFile")); + + uno::Reference<beans::XPropertySetInfo> xPropSetInfo + (xPropSet->getPropertySetInfo()); + + if (xPropSetInfo.is()) + { + uno::Sequence<beans::Property> aProps(xPropSetInfo->getProperties()); + + sResult +="<propertyset>"; + + for (sal_Int32 n = 0; n < aProps.getLength(); n++) + { + ::rtl::OUString sPropName(aProps[n].Name); + + if (xPropSetInfo->hasPropertyByName(sPropName)) + { + bool bPropertyFound = true; + uno::Any aAny; + try + { + if (sPropName == sMetaFile) + bPropertyFound = false; + else + xPropSet->getPropertyValue(sPropName) >>= aAny; + } + catch (beans::UnknownPropertyException) + { + bPropertyFound = false; + } + + if (bPropertyFound) + { + sResult += "<property name=\""; + sResult += OUStringToOString + (sPropName, RTL_TEXTENCODING_ASCII_US).getStr(); + sResult +="\" type=\""; + + ::rtl::OUString sPropType(aProps[n].Type.getTypeName()); + sResult += OUStringToOString + (sPropType, RTL_TEXTENCODING_ASCII_US).getStr(); + + sResult += "\" attribs=\""; + + sal_uInt16 nMask = 1; + bool bFirstAttrib = true; + sal_uInt16 nAttribs = aProps[n].Attributes; + for (int i = 0; i < nAttribNames; i++) + { + if ((nAttribs & nMask) != 0) + { + if (bFirstAttrib) + bFirstAttrib = false; + else + sResult += "|"; + + sResult += sPropertyAttribNames[i]; + } + + nMask <<= 1; + } + + sResult += "\">"; + + char buffer[256]; + if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("byte"))) + { + sal_Int8 nValue = 0; + aAny >>= nValue; + + snprintf(buffer, sizeof(buffer), "%d", nValue); + sResult += buffer; + } + if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("short"))) + { + sal_Int16 nValue = 0; + aAny >>= nValue; + + snprintf(buffer, sizeof(buffer), "%d", nValue); + sResult += buffer; + } + else if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("long"))) + { + sal_Int32 nValue = 0; + aAny >>= nValue; + + snprintf(buffer, sizeof(buffer), "%" SAL_PRIdINT32, nValue); + sResult += buffer; + } + else if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("float"))) + { + float nValue = 0.0; + aAny >>= nValue; + + snprintf(buffer, sizeof(buffer), "%f", nValue); + sResult += buffer; + } + else if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("double"))) + { + double nValue = 0.0; + aAny >>= nValue; + + snprintf(buffer, sizeof(buffer), "%lf", nValue); + sResult += buffer; + } + else if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("boolean"))) + { + sal_Bool nValue = sal_False; + aAny >>= nValue; + + if (nValue) + sResult += "true"; + else + sResult += "false"; + } + else if (sPropType == + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM + ("string"))) + { + ::rtl::OUString sValue; + aAny >>= sValue; + + sResult += OUStringToOString + (sValue, RTL_TEXTENCODING_ASCII_US).getStr(); + } + else if (sPropType == + ::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.text.TextContentAnchorType"))) + { + text::TextContentAnchorType nValue; + aAny >>= nValue; + + switch (nValue) + { + case text::TextContentAnchorType_AT_PARAGRAPH: + sResult += "AT_PARAGRAPH"; + break; + case text::TextContentAnchorType_AS_CHARACTER: + sResult += "AS_CHARACTER"; + break; + case text::TextContentAnchorType_AT_PAGE: + sResult += "AT_PAGE"; + break; + case text::TextContentAnchorType_AT_FRAME: + sResult += "AT_FRAME"; + break; + case text::TextContentAnchorType_AT_CHARACTER: + sResult += "AT_CHARACTER"; + break; + case text::TextContentAnchorType_MAKE_FIXED_SIZE: + sResult += "MAKE_FIXED_SIZE"; + break; + default: + break; + } + } + else if (sPropType == + ::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.awt.Point"))) + { + awt::Point aPoint; + aAny >>= aPoint; + + snprintf(buffer, sizeof(buffer), "(%" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ")", aPoint.X, + aPoint.Y); + + sResult += buffer; + } + else if (sPropType == + ::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.awt.Rectangle"))) + { + awt::Rectangle aRect; + aAny >>= aRect; + + snprintf(buffer, sizeof(buffer), "(%" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ", %" SAL_PRIdINT32 ")", + aRect.X, aRect.Y, aRect.Width, aRect.Height); + sResult += buffer; + } + else if (sPropType == + ::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.drawing.FillStyle"))) + { + drawing::FillStyle nValue; + aAny >>= nValue; + + switch (nValue) + { + case drawing::FillStyle_NONE: + sResult += "NONE"; + break; + case drawing::FillStyle_SOLID: + sResult += "SOLID"; + break; + case drawing::FillStyle_GRADIENT: + sResult += "GRADIENT"; + break; + case drawing::FillStyle_HATCH: + sResult += "HATCH"; + break; + case drawing::FillStyle_BITMAP: + sResult += "BITMAP"; + break; + case drawing::FillStyle_MAKE_FIXED_SIZE: + sResult += "MAKE_FIXED_SIZE"; + break; + } + } + else if (sPropType == + ::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.drawing.BitmapMode"))) + { + drawing::BitmapMode nValue; + aAny >>= nValue; + + switch (nValue) + { + case drawing::BitmapMode_REPEAT: + sResult += "REPEAT"; + break; + case drawing::BitmapMode_STRETCH: + sResult += "STRETCH"; + break; + case drawing::BitmapMode_NO_REPEAT: + sResult += "NO_REPEAT"; + break; + case drawing::BitmapMode_MAKE_FIXED_SIZE: + sResult += "MAKE_FIXED_SIZE"; + break; + } + } + else if (sPropType == + ::rtl::OUString + (RTL_CONSTASCII_USTRINGPARAM + ("com.sun.star.drawing.HomogenMatrix3"))) + { + drawing::HomogenMatrix3 aMatrix; + aAny >>= aMatrix; + + snprintf(buffer, sizeof(buffer), + "((%f %f %f)(%f %f %f)(%f %f %f))", + aMatrix.Line1.Column1, + aMatrix.Line1.Column2, + aMatrix.Line1.Column3, + aMatrix.Line2.Column1, + aMatrix.Line2.Column2, + aMatrix.Line2.Column3, + aMatrix.Line3.Column1, + aMatrix.Line3.Column2, + aMatrix.Line3.Column3); + sResult += buffer; + } + + sResult += "</property>"; + } + } + else + { + sResult += "<unknown-property>"; + sResult += OUStringToOString + (sPropName, RTL_TEXTENCODING_ASCII_US).getStr(); + sResult += "</unknown-property>"; + } + } + sResult += "</propertyset>"; + } + + return sResult; +} + +string toString(uno::Reference< text::XTextRange > textRange) +{ + string result; + + if (textRange.get()) + { + rtl::OUString aOUStr = textRange->getString(); + rtl::OString aOStr(aOUStr.getStr(), aOUStr.getLength(), RTL_TEXTENCODING_ASCII_US ); + + result = aOStr.getStr(); + } + else + { + result="(nil)"; + } + + return result; +} + +string toString(const string & rString) +{ + return rString; +} +#endif +} |