summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorMiklos Vajna <vmiklos@collabora.com>2019-01-03 11:41:53 +0100
committerMiklos Vajna <vmiklos@collabora.com>2019-01-03 15:08:06 +0100
commit66b919c8674066871a06e7cdf5595dc6951524e0 (patch)
treeaa81dd89166ed3346929a2c36bd849f795fdb8a0 /test
parentf90ec6941c745cd4478aff825e175fde0b873a12 (diff)
svm xml dumper: move this from test to vcl
This is very useful functionality, this way it can be invoked from the debugger and/or nested into an outer xml dump (sw/sd doc model dump) more easily. Change-Id: If6c83b11d0f3e65fcce71e8d820c6bc354f64d68 Reviewed-on: https://gerrit.libreoffice.org/65834 Reviewed-by: Miklos Vajna <vmiklos@collabora.com> Tested-by: Jenkins
Diffstat (limited to 'test')
-rw-r--r--test/Library_test.mk1
-rw-r--r--test/source/mtfxmldump.cxx1062
-rw-r--r--test/source/xmltesttools.cxx10
3 files changed, 10 insertions, 1063 deletions
diff --git a/test/Library_test.mk b/test/Library_test.mk
index 1e4a013e1e4b..d7b3641ef6f3 100644
--- a/test/Library_test.mk
+++ b/test/Library_test.mk
@@ -49,7 +49,6 @@ $(eval $(call gb_Library_add_exception_objects,test,\
test/source/callgrind \
test/source/xmltesttools \
test/source/htmltesttools \
- test/source/mtfxmldump \
test/source/primitive2dxmldump \
test/source/screenshot_test \
test/source/unoapi_property_testers \
diff --git a/test/source/mtfxmldump.cxx b/test/source/mtfxmldump.cxx
deleted file mode 100644
index 593123054329..000000000000
--- a/test/source/mtfxmldump.cxx
+++ /dev/null
@@ -1,1062 +0,0 @@
-/* -*- 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/.
- */
-
-#include <test/mtfxmldump.hxx>
-#include <test/xmltesttools.hxx>
-#include <tools/XmlWriter.hxx>
-#include<tools/fract.hxx>
-
-#include <vcl/metaact.hxx>
-#include <vcl/outdev.hxx>
-#include <rtl/string.hxx>
-#include <rtl/strbuf.hxx>
-
-#include <memory>
-#include <numeric>
-
-namespace
-{
-
-OUString collectPushFlags(PushFlags nFlags)
-{
- if ((nFlags & PushFlags::ALL) == PushFlags::ALL)
- return OUString("PushAll");
- else if ((nFlags & PUSH_ALLFONT) == PUSH_ALLFONT)
- return OUString("PushAllFont");
- else if ((nFlags & PUSH_ALLTEXT) == PUSH_ALLTEXT)
- return OUString("PushAllText");
-
- std::vector<OUString> aStrings;
-
- if (nFlags & PushFlags::LINECOLOR)
- aStrings.emplace_back("PushLineColor");
- if (nFlags & PushFlags::FILLCOLOR)
- aStrings.emplace_back("PushFillColor");
- if (nFlags & PushFlags::FONT)
- aStrings.emplace_back("PushFont");
- if (nFlags & PushFlags::TEXTCOLOR)
- aStrings.emplace_back("PushTextColor");
- if (nFlags & PushFlags::MAPMODE)
- aStrings.emplace_back("PushMapMode");
- if (nFlags & PushFlags::CLIPREGION)
- aStrings.emplace_back("PushClipRegion");
- if (nFlags & PushFlags::RASTEROP)
- aStrings.emplace_back("PushRasterOp");
- if (nFlags & PushFlags::TEXTFILLCOLOR)
- aStrings.emplace_back("PushTextFillColor");
- if (nFlags & PushFlags::TEXTALIGN)
- aStrings.emplace_back("PushTextAlign");
- if (nFlags & PushFlags::REFPOINT)
- aStrings.emplace_back("PushRefPoint");
- if (nFlags & PushFlags::TEXTLINECOLOR)
- aStrings.emplace_back("PushTextLineColor");
- if (nFlags & PushFlags::TEXTLAYOUTMODE)
- aStrings.emplace_back("PushTextLayoutMode");
- if (nFlags & PushFlags::TEXTLANGUAGE)
- aStrings.emplace_back("PushTextLanguage");
- if (nFlags & PushFlags::OVERLINECOLOR)
- aStrings.emplace_back("PushOverlineColor");
-
- OUString aString;
-
- if (aStrings.empty())
- return aString;
-
- aString = aStrings[0];
- for (size_t i = 1; i < aStrings.size(); ++i)
- {
- aString = aString + ", " + aStrings[i];
- }
- return aString;
-}
-
-OUString convertDrawTextFlagsToString(DrawTextFlags eDrawTextFlags)
-{
- std::vector<OUString> aStrings;
- if (eDrawTextFlags & DrawTextFlags::Disable)
- aStrings.emplace_back("Disable");
- if (eDrawTextFlags & DrawTextFlags::Mnemonic)
- aStrings.emplace_back("Mnemonic");
- if (eDrawTextFlags & DrawTextFlags::Mono)
- aStrings.emplace_back("Mono");
- if (eDrawTextFlags & DrawTextFlags::Clip)
- aStrings.emplace_back("Clip");
- if (eDrawTextFlags & DrawTextFlags::Left)
- aStrings.emplace_back("Left");
- if (eDrawTextFlags & DrawTextFlags::Center)
- aStrings.emplace_back("Center");
- if (eDrawTextFlags & DrawTextFlags::Right)
- aStrings.emplace_back("Right");
- if (eDrawTextFlags & DrawTextFlags::Top)
- aStrings.emplace_back("Top");
- if (eDrawTextFlags & DrawTextFlags::VCenter)
- aStrings.emplace_back("VCenter");
- if (eDrawTextFlags & DrawTextFlags::Bottom)
- aStrings.emplace_back("Bottom");
- if (eDrawTextFlags & DrawTextFlags::EndEllipsis)
- aStrings.emplace_back("EndEllipsis");
- if (eDrawTextFlags & DrawTextFlags::PathEllipsis)
- aStrings.emplace_back("PathEllipsis");
- if (eDrawTextFlags & DrawTextFlags::MultiLine)
- aStrings.emplace_back("MultiLine");
- if (eDrawTextFlags & DrawTextFlags::WordBreak)
- aStrings.emplace_back("WordBreak");
- if (eDrawTextFlags & DrawTextFlags::NewsEllipsis)
- aStrings.emplace_back("NewsEllipsis");
- if (eDrawTextFlags & DrawTextFlags::WordBreakHyphenation)
- aStrings.emplace_back("WordBreakHyphenation");
- if (eDrawTextFlags & DrawTextFlags::CenterEllipsis)
- aStrings.emplace_back("CenterEllipsis");
- if (eDrawTextFlags & DrawTextFlags::HideMnemonic)
- aStrings.emplace_back("HideMnemonic");
-
- OUString aString;
-
- if (aStrings.empty())
- return OUString("None");
-
- aString = aStrings[0];
- for (size_t i = 1; i < aStrings.size(); ++i)
- {
- aString = aString + " " + aStrings[i];
- }
- return aString;
-};
-
-OUString convertRopToString(RasterOp eRop)
-{
- switch (eRop)
- {
- case RasterOp::OverPaint: return OUString("overpaint");
- case RasterOp::Xor: return OUString("xor");
- case RasterOp::N0: return OUString("0");
- case RasterOp::N1: return OUString("1");
- case RasterOp::Invert: return OUString("invert");
- }
- return OUString();
-}
-
-OUString convertTextAlignToString(TextAlign eAlign)
-{
- switch (eAlign)
- {
- case ALIGN_BASELINE: return OUString("baseline");
- case ALIGN_BOTTOM: return OUString("bottom");
- case ALIGN_TOP: return OUString("top");
- case TextAlign_FORCE_EQUAL_SIZE: return OUString("equalsize");
- }
- return OUString();
-}
-
-OUString convertColorToString(Color aColor)
-{
- OUString aRGBString = aColor.AsRGBHexString();
- return "#" + aRGBString;
-}
-
-OUString convertLineStyleToString(LineStyle eAlign)
-{
- switch (eAlign)
- {
- case LineStyle::NONE: return OUString("none");
- case LineStyle::Solid: return OUString("solid");
- case LineStyle::Dash: return OUString("dash");
- default: break;
- }
- return OUString();
-}
-
-OUString convertLineJoinToString(basegfx::B2DLineJoin eJoin)
-{
- switch (eJoin)
- {
- default:
- case basegfx::B2DLineJoin::NONE: return OUString("none");
- case basegfx::B2DLineJoin::Bevel: return OUString("bevel");
- case basegfx::B2DLineJoin::Miter: return OUString("miter");
- case basegfx::B2DLineJoin::Round: return OUString("round");
- }
-}
-
-OUString convertLineCapToString(css::drawing::LineCap eCap)
-{
- switch (eCap)
- {
- default:
- case css::drawing::LineCap_BUTT: return OUString("butt");
- case css::drawing::LineCap_ROUND: return OUString("round");
- case css::drawing::LineCap_SQUARE: return OUString("square");
- }
-}
-
-OUString convertPolygonFlags(PolyFlags eFlags)
-{
- switch (eFlags)
- {
- default:
- case PolyFlags::Normal: return OUString("normal");
- case PolyFlags::Control: return OUString("control");
- case PolyFlags::Smooth: return OUString("smooth");
- case PolyFlags::Symmetric: return OUString("symmetric");
- }
-}
-
-OUString convertFontWeigthToString(FontWeight eFontWeight)
-{
- switch (eFontWeight)
- {
- case WEIGHT_DONTKNOW: return OUString("unknown");
- case WEIGHT_THIN: return OUString("thin");
- case WEIGHT_ULTRALIGHT: return OUString("ultralight");
- case WEIGHT_LIGHT: return OUString("light");
- case WEIGHT_SEMILIGHT: return OUString("semilight");
- case WEIGHT_NORMAL: return OUString("normal");
- case WEIGHT_MEDIUM: return OUString("medium");
- case WEIGHT_SEMIBOLD: return OUString("semibold");
- case WEIGHT_BOLD: return OUString("bold");
- case WEIGHT_ULTRABOLD: return OUString("ultrabold");
- case WEIGHT_BLACK: return OUString("black");
- case FontWeight_FORCE_EQUAL_SIZE: return OUString("equalsize");
- }
- return OUString();
-}
-
-OUString convertFontStrikeoutToString(FontStrikeout eFontStrikeout)
-{
- switch (eFontStrikeout)
- {
- case STRIKEOUT_NONE: return OUString("none");
- case STRIKEOUT_SINGLE: return OUString("single");
- case STRIKEOUT_DOUBLE: return OUString("double");
- case STRIKEOUT_DONTKNOW: return OUString("dontknow");
- case STRIKEOUT_BOLD: return OUString("bold");
- case STRIKEOUT_SLASH: return OUString("slash");
- case STRIKEOUT_X: return OUString("x");
- case FontStrikeout_FORCE_EQUAL_SIZE: return OUString("equalsize");
- }
- return OUString();
-}
-
-OUString convertFontLineStyleToString(FontLineStyle eFontLineStyle)
-{
- switch (eFontLineStyle)
- {
- case LINESTYLE_NONE: return OUString("none");
- case LINESTYLE_SINGLE: return OUString("single");
- case LINESTYLE_DOUBLE: return OUString("double");
- case LINESTYLE_DOTTED: return OUString("dotted");
- case LINESTYLE_DONTKNOW: return OUString("dontknow");
- case LINESTYLE_DASH: return OUString("dash");
- case LINESTYLE_LONGDASH: return OUString("longdash");
- case LINESTYLE_DASHDOT: return OUString("dashdot");
- case LINESTYLE_DASHDOTDOT: return OUString("dashdotdot");
- case LINESTYLE_SMALLWAVE: return OUString("smallwave");
- case LINESTYLE_WAVE: return OUString("wave");
- case LINESTYLE_DOUBLEWAVE: return OUString("doublewave");
- case LINESTYLE_BOLD: return OUString("bold");
- case LINESTYLE_BOLDDOTTED: return OUString("bolddotted");
- case LINESTYLE_BOLDDASH: return OUString("bolddash");
- case LINESTYLE_BOLDLONGDASH: return OUString("boldlongdash");
- case LINESTYLE_BOLDDASHDOT: return OUString("bolddashdot");
- case LINESTYLE_BOLDDASHDOTDOT: return OUString("bolddashdotdot");
- case LINESTYLE_BOLDWAVE: return OUString("boldwave");
- case FontLineStyle_FORCE_EQUAL_SIZE: return OUString("equalsize");
- }
- return OUString();
-}
-
-OString convertLineStyleToString(const MetaActionType nActionType)
-{
- switch (nActionType)
- {
- case MetaActionType::NONE: return "null";
- case MetaActionType::PIXEL: return "pixel";
- case MetaActionType::POINT: return "point";
- case MetaActionType::LINE: return "line";
- case MetaActionType::RECT: return "rect";
- case MetaActionType::ROUNDRECT: return "roundrect";
- case MetaActionType::ELLIPSE: return "ellipse";
- case MetaActionType::ARC: return "arc";
- case MetaActionType::PIE: return "pie";
- case MetaActionType::CHORD: return "chord";
- case MetaActionType::POLYLINE: return "polyline";
- case MetaActionType::POLYGON: return "polygon";
- case MetaActionType::POLYPOLYGON: return "polypolygon";
- case MetaActionType::TEXT: return "text";
- case MetaActionType::TEXTARRAY: return "textarray";
- case MetaActionType::STRETCHTEXT: return "stretchtext";
- case MetaActionType::TEXTRECT: return "textrect";
- case MetaActionType::TEXTLINE: return "textline";
- case MetaActionType::BMP: return "bmp";
- case MetaActionType::BMPSCALE: return "bmpscale";
- case MetaActionType::BMPSCALEPART: return "bmpscalepart";
- case MetaActionType::BMPEX: return "bmpex";
- case MetaActionType::BMPEXSCALE: return "bmpexscale";
- case MetaActionType::BMPEXSCALEPART: return "bmpexscalepart";
- case MetaActionType::MASK: return "mask";
- case MetaActionType::MASKSCALE: return "maskscale";
- case MetaActionType::MASKSCALEPART: return "maskscalepart";
- case MetaActionType::GRADIENT: return "gradient";
- case MetaActionType::GRADIENTEX: return "gradientex";
- case MetaActionType::HATCH: return "hatch";
- case MetaActionType::WALLPAPER: return "wallpaper";
- case MetaActionType::CLIPREGION: return "clipregion";
- case MetaActionType::ISECTRECTCLIPREGION: return "sectrectclipregion";
- case MetaActionType::ISECTREGIONCLIPREGION: return "sectregionclipregion";
- case MetaActionType::MOVECLIPREGION: return "moveclipregion";
- case MetaActionType::LINECOLOR: return "linecolor";
- case MetaActionType::FILLCOLOR: return "fillcolor";
- case MetaActionType::TEXTCOLOR: return "textcolor";
- case MetaActionType::TEXTFILLCOLOR: return "textfillcolor";
- case MetaActionType::TEXTLINECOLOR: return "textlinecolor";
- case MetaActionType::OVERLINECOLOR: return "overlinecolor";
- case MetaActionType::TEXTALIGN: return "textalign";
- case MetaActionType::MAPMODE: return "mapmode";
- case MetaActionType::FONT: return "font";
- case MetaActionType::PUSH: return "push";
- case MetaActionType::POP: return "pop";
- case MetaActionType::RASTEROP: return "rasterop";
- case MetaActionType::Transparent: return "transparent";
- case MetaActionType::FLOATTRANSPARENT: return "floattransparent";
- case MetaActionType::EPS: return "eps";
- case MetaActionType::REFPOINT: return "refpoint";
- case MetaActionType::COMMENT: return "comment";
- case MetaActionType::LAYOUTMODE: return "layoutmode";
- case MetaActionType::TEXTLANGUAGE: return "textlanguage";
- }
- return "";
-}
-
-OUString convertBitmapExTransparentType(TransparentType eType)
-{
- switch (eType)
- {
- default:
- case TransparentType::NONE: return OUString("none");
- case TransparentType::Bitmap: return OUString("bitmap");
- case TransparentType::Color: return OUString("color");
- }
-}
-
-OUString convertMapUnitToString(MapUnit eUnit)
-{
- switch (eUnit)
- {
- default:
- case MapUnit::LASTENUMDUMMY: return OUString("LASTENUMDUMMY");
- case MapUnit::Map1000thInch: return OUString("Map1000thInch");
- case MapUnit::Map100thInch: return OUString("Map100thInch");
- case MapUnit::Map100thMM: return OUString("Map100thMM");
- case MapUnit::Map10thInch: return OUString("Map10thInch");
- case MapUnit::Map10thMM: return OUString("Map10thMM");
- case MapUnit::MapAppFont: return OUString("MapAppFont");
- case MapUnit::MapCM: return OUString("MapCM");
- case MapUnit::MapInch: return OUString("MapInch");
- case MapUnit::MapMM: return OUString("MapMM");
- case MapUnit::MapPixel: return OUString("MapPixel");
- case MapUnit::MapPoint: return OUString("MapPoint");
- case MapUnit::MapRelative: return OUString("MapRelative");
- case MapUnit::MapSysFont: return OUString("MapSysFont");
- case MapUnit::MapTwip: return OUString("MapTwip");
- }
-}
-
-OUString convertFractionToString(const Fraction& aFraction)
-{
- std::stringstream ss;
-
- ss << aFraction;
-
- return OUString::createFromAscii(ss.str().c_str());
-}
-
-
-OUString hex32(sal_uInt32 nNumber)
-{
- std::stringstream ss;
- ss << std::hex << std::setfill ('0') << std::setw(8) << nNumber;
- return OUString::createFromAscii(ss.str().c_str());
-}
-
-void writePoint(tools::XmlWriter& rWriter, Point const& rPoint)
-{
- rWriter.attribute("x", rPoint.X());
- rWriter.attribute("y", rPoint.Y());
-}
-
-void writeStartPoint(tools::XmlWriter& rWriter, Point const& rPoint)
-{
- rWriter.attribute("startx", rPoint.X());
- rWriter.attribute("starty", rPoint.Y());
-}
-
-void writeEndPoint(tools::XmlWriter& rWriter, Point const& rPoint)
-{
- rWriter.attribute("endx", rPoint.X());
- rWriter.attribute("endy", rPoint.Y());
-}
-
-void writeSize(tools::XmlWriter& rWriter, Size const& rSize)
-{
- rWriter.attribute("width", rSize.Width());
- rWriter.attribute("height", rSize.Height());
-}
-
-void writeRectangle(tools::XmlWriter& rWriter, tools::Rectangle const& rRectangle)
-{
- rWriter.attribute("left", rRectangle.Left());
- rWriter.attribute("top", rRectangle.Top());
- rWriter.attribute("right", rRectangle.Right());
- rWriter.attribute("bottom", rRectangle.Bottom());
-}
-
-void writeLineInfo(tools::XmlWriter& rWriter, LineInfo const& rLineInfo)
-{
- rWriter.attribute("style", convertLineStyleToString(rLineInfo.GetStyle()));
- rWriter.attribute("width", rLineInfo.GetWidth());
- rWriter.attribute("dashlen", rLineInfo.GetDashLen());
- rWriter.attribute("dashcount", rLineInfo.GetDashCount());
- rWriter.attribute("dotlen", rLineInfo.GetDotLen());
- rWriter.attribute("dotcount", rLineInfo.GetDotCount());
- rWriter.attribute("distance", rLineInfo.GetDistance());
- rWriter.attribute("join", convertLineJoinToString(rLineInfo.GetLineJoin()));
- rWriter.attribute("cap", convertLineCapToString(rLineInfo.GetLineCap()));
-}
-
-} // anonymous namespace
-
-MetafileXmlDump::MetafileXmlDump()
-{
- maFilter.fill(false);
-}
-
-MetafileXmlDump::~MetafileXmlDump()
-{}
-
-void MetafileXmlDump::filterActionType(const MetaActionType nActionType, bool bShouldFilter)
-{
- maFilter[nActionType] = bShouldFilter;
-}
-
-void MetafileXmlDump::filterAllActionTypes()
-{
- maFilter.fill(true);
-}
-
-xmlDocPtr MetafileXmlDump::dumpAndParse(const GDIMetaFile& rMetaFile, const OUString& rTempStreamName)
-{
- std::unique_ptr<SvStream> pStream;
-
- if (rTempStreamName.isEmpty())
- pStream.reset(new SvMemoryStream());
- else
- pStream.reset(new SvFileStream(rTempStreamName, StreamMode::STD_READWRITE | StreamMode::TRUNC));
-
- tools::XmlWriter aWriter(pStream.get());
- aWriter.startDocument();
- aWriter.startElement("metafile");
-
- writeXml(rMetaFile, aWriter);
-
- aWriter.endElement();
- aWriter.endDocument();
-
- pStream->Seek(STREAM_SEEK_TO_BEGIN);
-
- xmlDocPtr pDoc = XmlTestTools::parseXmlStream(pStream.get());
-
- return pDoc;
-}
-
-void MetafileXmlDump::writeXml(const GDIMetaFile& rMetaFile, tools::XmlWriter& rWriter)
-{
- for(size_t nAction = 0; nAction < rMetaFile.GetActionSize(); ++nAction)
- {
- MetaAction* pAction = rMetaFile.GetAction(nAction);
- const MetaActionType nActionType = pAction->GetType();
- if (maFilter[nActionType])
- continue;
-
- OString sCurrentElementTag = convertLineStyleToString(nActionType);
-
- switch (nActionType)
- {
- case MetaActionType::PIXEL:
- {
- auto* pMetaAction = static_cast<MetaPixelAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMetaAction->GetPoint());
- rWriter.attribute("color", convertColorToString(pMetaAction->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::POINT:
- {
- auto* pMetaAction = static_cast<MetaPointAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMetaAction->GetPoint());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::RECT:
- {
- MetaRectAction* pMetaAction = static_cast<MetaRectAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMetaAction->GetRect());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::ROUNDRECT:
- {
- auto pMetaAction = static_cast<MetaRoundRectAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMetaAction->GetRect());
- rWriter.attribute("horizontalround", pMetaAction->GetHorzRound());
- rWriter.attribute("verticalround", pMetaAction->GetVertRound());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::ELLIPSE:
- {
- auto pMetaAction = static_cast<MetaEllipseAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMetaAction->GetRect());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::ARC:
- {
- auto pMetaAction = static_cast<MetaArcAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMetaAction->GetRect());
- writeStartPoint(rWriter, pMetaAction->GetStartPoint());
- writeEndPoint(rWriter, pMetaAction->GetEndPoint());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::PIE:
- {
- auto pMetaAction = static_cast<MetaPieAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMetaAction->GetRect());
- writeStartPoint(rWriter, pMetaAction->GetStartPoint());
- writeEndPoint(rWriter, pMetaAction->GetEndPoint());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::CHORD:
- {
- auto pMetaAction = static_cast<MetaChordAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMetaAction->GetRect());
- writeStartPoint(rWriter, pMetaAction->GetStartPoint());
- writeEndPoint(rWriter, pMetaAction->GetEndPoint());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::LINE:
- {
- MetaLineAction* pMetaLineAction = static_cast<MetaLineAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeStartPoint(rWriter, pMetaLineAction->GetStartPoint());
- writeEndPoint(rWriter, pMetaLineAction->GetEndPoint());
-
- writeLineInfo(rWriter, pMetaLineAction->GetLineInfo());
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::PUSH:
- {
- MetaPushAction* pMetaPushAction = static_cast<MetaPushAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- rWriter.attribute("flags", collectPushFlags(pMetaPushAction->GetFlags()));
- }
- break;
-
- case MetaActionType::POP:
- {
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::RASTEROP:
- {
- MetaRasterOpAction* pMetaRasterOpAction = static_cast<MetaRasterOpAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- if (pMetaRasterOpAction->GetRasterOp() != RasterOp::OverPaint)
- {
- rWriter.attribute("operation", convertRopToString(pMetaRasterOpAction->GetRasterOp()));
- }
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTLINECOLOR:
- {
- MetaTextLineColorAction* pMetaTextLineColorAction = static_cast<MetaTextLineColorAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- rWriter.attribute("color", convertColorToString(pMetaTextLineColorAction->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTFILLCOLOR:
- {
- MetaTextFillColorAction* pMetaTextFillColorAction = static_cast<MetaTextFillColorAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- rWriter.attribute("color", convertColorToString(pMetaTextFillColorAction->GetColor()));
-
- if (pMetaTextFillColorAction->IsSetting())
- rWriter.attribute("setting", OUString("true"));
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::FONT:
- {
- MetaFontAction* pMetaFontAction = static_cast<MetaFontAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- vcl::Font aFont = pMetaFontAction->GetFont();
-
- rWriter.attribute("color", convertColorToString(aFont.GetColor()));
- rWriter.attribute("fillcolor", convertColorToString(aFont.GetFillColor()));
- rWriter.attribute("name", aFont.GetFamilyName());
- rWriter.attribute("stylename", aFont.GetStyleName());
- rWriter.attribute("width", aFont.GetFontSize().Width());
- rWriter.attribute("height", aFont.GetFontSize().Height());
- rWriter.attribute("orientation", aFont.GetOrientation());
- rWriter.attribute("weight", convertFontWeigthToString(aFont.GetWeight()));
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTALIGN:
- {
- MetaTextAlignAction* pMetaTextAlignAction = static_cast<MetaTextAlignAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- OUString sAlign = convertTextAlignToString(pMetaTextAlignAction->GetTextAlign());
- if (!sAlign.isEmpty())
- rWriter.attribute("align", sAlign);
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTCOLOR:
- {
- MetaTextColorAction* pMetaTextColorAction = static_cast<MetaTextColorAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- rWriter.attribute("color", convertColorToString(pMetaTextColorAction->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXT:
- {
- auto* pMeta = static_cast<MetaTextAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- rWriter.attribute("index", pMeta->GetIndex());
- rWriter.attribute("length", pMeta->GetLen());
- rWriter.startElement("textcontent");
- rWriter.content(pMeta->GetText());
- rWriter.endElement();
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTARRAY:
- {
- MetaTextArrayAction* pMetaTextArrayAction = static_cast<MetaTextArrayAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- sal_Int32 aIndex = pMetaTextArrayAction->GetIndex();
- sal_Int32 aLength = pMetaTextArrayAction->GetLen();
-
- writePoint(rWriter, pMetaTextArrayAction->GetPoint());
- rWriter.attribute("index", aIndex);
- rWriter.attribute("length", aLength);
-
- if (pMetaTextArrayAction->GetDXArray())
- {
- rWriter.startElement("dxarray");
- OUStringBuffer sDxLengthString;
- for (sal_Int32 i = 0; i < aLength - aIndex; ++i)
- {
- sDxLengthString.append(OUString::number(pMetaTextArrayAction->GetDXArray()[aIndex + i]));
- sDxLengthString.append(" ");
- }
- rWriter.content(sDxLengthString.makeStringAndClear());
- rWriter.endElement();
- }
-
- rWriter.startElement("text");
- rWriter.content(pMetaTextArrayAction->GetText());
- rWriter.endElement();
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::STRETCHTEXT:
- {
- auto* pMeta = static_cast<MetaStretchTextAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- writePoint(rWriter, pMeta->GetPoint());
- rWriter.attribute("index", pMeta->GetIndex());
- rWriter.attribute("length", pMeta->GetLen());
- rWriter.attribute("width", pMeta->GetWidth());
-
- rWriter.startElement("textcontent");
- rWriter.content(pMeta->GetText());
- rWriter.endElement();
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTRECT:
- {
- auto* pMeta = static_cast<MetaTextRectAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writeRectangle(rWriter, pMeta->GetRect());
- rWriter.startElement("textcontent");
- rWriter.content(pMeta->GetText());
- rWriter.endElement();
-
- rWriter.startElement("style");
- rWriter.content(convertDrawTextFlagsToString(pMeta->GetStyle()));
- rWriter.endElement();
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::TEXTLINE:
- {
- auto* pMeta = static_cast<MetaTextLineAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetStartPoint());
- rWriter.attribute("width", pMeta->GetWidth());
- rWriter.attribute("strikeout", convertFontStrikeoutToString(pMeta->GetStrikeout()));
- rWriter.attribute("underline", convertFontLineStyleToString(pMeta->GetUnderline()));
- rWriter.attribute("overline", convertFontLineStyleToString(pMeta->GetOverline()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::LINECOLOR:
- {
- MetaLineColorAction* pMetaLineColorAction = static_cast<MetaLineColorAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- rWriter.attribute("color", convertColorToString(pMetaLineColorAction->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::FILLCOLOR:
- {
- MetaFillColorAction* pMetaFillColorAction = static_cast<MetaFillColorAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- rWriter.attribute("color", convertColorToString(pMetaFillColorAction->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::CLIPREGION:
- {
- const MetaClipRegionAction* pA = static_cast< const MetaClipRegionAction* >(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- // FIXME for now we dump only the bounding box; this is
- // enough for the tests we have, but may need extending to
- // dumping the real polypolygon in the future
- tools::Rectangle aRectangle = pA->GetRegion().GetBoundRect();
- writeRectangle(rWriter, aRectangle);
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::ISECTRECTCLIPREGION:
- {
- MetaISectRectClipRegionAction* pMetaISectRectClipRegionAction = static_cast<MetaISectRectClipRegionAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- tools::Rectangle aRectangle = pMetaISectRectClipRegionAction->GetRect();
- writeRectangle(rWriter, aRectangle);
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::ISECTREGIONCLIPREGION:
- {
- MetaISectRegionClipRegionAction* pMetaISectRegionClipRegionAction = static_cast<MetaISectRegionClipRegionAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- // FIXME for now we dump only the bounding box; this is
- // enough for the tests we have, but may need extending to
- // dumping the real polypolygon in the future
- tools::Rectangle aRectangle = pMetaISectRegionClipRegionAction->GetRegion().GetBoundRect();
- writeRectangle(rWriter, aRectangle);
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::POLYLINE:
- {
- MetaPolyLineAction* pMetaPolyLineAction = static_cast<MetaPolyLineAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- writeLineInfo(rWriter, pMetaPolyLineAction->GetLineInfo());
-
- tools::Polygon aPolygon = pMetaPolyLineAction->GetPolygon();
- bool bFlags = aPolygon.HasFlags();
- for (sal_uInt16 i = 0; i < aPolygon.GetSize(); i++)
- {
- rWriter.startElement("point");
- writePoint(rWriter, aPolygon[i]);
- if (bFlags)
- rWriter.attribute("flags", convertPolygonFlags(aPolygon.GetFlags(i)));
- rWriter.endElement();
- }
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::POLYGON:
- {
- MetaPolygonAction* pMetaPolygonAction = static_cast<MetaPolygonAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- tools::Polygon aPolygon = pMetaPolygonAction->GetPolygon();
- bool bFlags = aPolygon.HasFlags();
- for (sal_uInt16 i = 0; i < aPolygon.GetSize(); i++)
- {
- rWriter.startElement("point");
- writePoint(rWriter, aPolygon[i]);
- if (bFlags)
- rWriter.attribute("flags", convertPolygonFlags(aPolygon.GetFlags(i)));
- rWriter.endElement();
- }
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::POLYPOLYGON:
- {
- MetaPolyPolygonAction *const pMetaPolyPolygonAction = static_cast<MetaPolyPolygonAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- tools::PolyPolygon const& rPolyPolygon(pMetaPolyPolygonAction->GetPolyPolygon());
-
- for (sal_uInt16 j = 0; j < rPolyPolygon.Count(); ++j)
- {
- rWriter.startElement("polygon");
- tools::Polygon const& rPolygon = rPolyPolygon[j];
- bool bFlags = rPolygon.HasFlags();
- for (sal_uInt16 i = 0; i < rPolygon.GetSize(); ++i)
- {
- rWriter.startElement("point");
- writePoint(rWriter, rPolygon[i]);
- if (bFlags)
- rWriter.attribute("flags", convertPolygonFlags(rPolygon.GetFlags(i)));
- rWriter.endElement();
- }
- rWriter.endElement();
- }
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::COMMENT:
- {
- MetaCommentAction* pMetaCommentAction = static_cast<MetaCommentAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
-
- if (pMetaCommentAction->GetDataSize() > 0)
- {
- rWriter.attribute("datasize", pMetaCommentAction->GetDataSize());
- }
- if (!pMetaCommentAction->GetComment().isEmpty())
- {
- rWriter.startElement("comment");
- rWriter.content(pMetaCommentAction->GetComment());
- rWriter.endElement();
- }
-
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::BMP:
- {
- auto pMeta = static_cast<MetaBmpAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- rWriter.attribute("crc", hex32(pMeta->GetBitmap().GetChecksum()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::BMPSCALE:
- {
- auto pMeta = static_cast<MetaBmpScaleAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- writeSize(rWriter, pMeta->GetSize());
- rWriter.attribute("crc", hex32(pMeta->GetBitmap().GetChecksum()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::BMPSCALEPART:
- {
- auto pMeta = static_cast<MetaBmpScalePartAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- rWriter.attribute("destx", pMeta->GetDestPoint().X());
- rWriter.attribute("desty", pMeta->GetDestPoint().Y());
- rWriter.attribute("destwidth", pMeta->GetDestSize().Width());
- rWriter.attribute("destheight", pMeta->GetDestSize().Height());
- rWriter.attribute("srcx", pMeta->GetSrcPoint().X());
- rWriter.attribute("srcy", pMeta->GetSrcPoint().Y());
- rWriter.attribute("srcwidth", pMeta->GetSrcSize().Width());
- rWriter.attribute("srcheight", pMeta->GetSrcSize().Height());
- rWriter.attribute("crc", hex32(pMeta->GetBitmap().GetChecksum()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::BMPEX:
- {
- auto pMeta = static_cast<MetaBmpExAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- rWriter.attribute("crc", hex32(pMeta->GetBitmapEx().GetBitmap().GetChecksum()));
- rWriter.attribute("transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx().GetTransparentType()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::BMPEXSCALE:
- {
- auto pMeta = static_cast<MetaBmpExScaleAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- writeSize(rWriter, pMeta->GetSize());
- rWriter.attribute("crc", hex32(pMeta->GetBitmapEx().GetBitmap().GetChecksum()));
- rWriter.attribute("transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx().GetTransparentType()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::BMPEXSCALEPART:
- {
- auto pMeta = static_cast<MetaBmpExScalePartAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- rWriter.attribute("destx", pMeta->GetDestPoint().X());
- rWriter.attribute("desty", pMeta->GetDestPoint().Y());
- rWriter.attribute("destwidth", pMeta->GetDestSize().Width());
- rWriter.attribute("destheight", pMeta->GetDestSize().Height());
- rWriter.attribute("srcx", pMeta->GetSrcPoint().X());
- rWriter.attribute("srcy", pMeta->GetSrcPoint().Y());
- rWriter.attribute("srcwidth", pMeta->GetSrcSize().Width());
- rWriter.attribute("srcheight", pMeta->GetSrcSize().Height());
- rWriter.attribute("crc", hex32(pMeta->GetBitmapEx().GetBitmap().GetChecksum()));
- rWriter.attribute("transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx().GetTransparentType()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::MASK:
- {
- auto pMeta = static_cast<MetaMaskAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- rWriter.attribute("crc", hex32(pMeta->GetBitmap().GetChecksum()));
- rWriter.attribute("color", convertColorToString(pMeta->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::MASKSCALE:
- {
- auto pMeta = static_cast<MetaMaskScaleAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- writePoint(rWriter, pMeta->GetPoint());
- writeSize(rWriter, pMeta->GetSize());
- rWriter.attribute("crc", hex32(pMeta->GetBitmap().GetChecksum()));
- rWriter.attribute("color", convertColorToString(pMeta->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::MASKSCALEPART:
- {
- auto pMeta = static_cast<MetaMaskScalePartAction*>(pAction);
- rWriter.startElement(sCurrentElementTag);
- rWriter.attribute("destx", pMeta->GetDestPoint().X());
- rWriter.attribute("desty", pMeta->GetDestPoint().Y());
- rWriter.attribute("destwidth", pMeta->GetDestSize().Width());
- rWriter.attribute("destheight", pMeta->GetDestSize().Height());
- rWriter.attribute("srcx", pMeta->GetSrcPoint().X());
- rWriter.attribute("srcy", pMeta->GetSrcPoint().Y());
- rWriter.attribute("srcwidth", pMeta->GetSrcSize().Width());
- rWriter.attribute("srcheight", pMeta->GetSrcSize().Height());
- rWriter.attribute("crc", hex32(pMeta->GetBitmap().GetChecksum()));
- rWriter.attribute("color", convertColorToString(pMeta->GetColor()));
- rWriter.endElement();
- }
- break;
-
- case MetaActionType::MAPMODE:
- {
- const MetaMapModeAction* pMeta = static_cast<MetaMapModeAction*>(pAction);
- MapMode aMapMode = pMeta->GetMapMode();
- rWriter.startElement(sCurrentElementTag);
- rWriter.attribute("mapunit", convertMapUnitToString( aMapMode.GetMapUnit() ));
- writePoint(rWriter, aMapMode.GetOrigin());
- rWriter.attribute("scalex", convertFractionToString(aMapMode.GetScaleX()));
- rWriter.attribute("scaley", convertFractionToString(aMapMode.GetScaleY()));
- rWriter.endElement();
- }
- break;
-
- default:
- {
- rWriter.element(sCurrentElementTag);
- }
- break;
- }
- }
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/test/source/xmltesttools.cxx b/test/source/xmltesttools.cxx
index dd3179cb1e1f..00d156c40ecf 100644
--- a/test/source/xmltesttools.cxx
+++ b/test/source/xmltesttools.cxx
@@ -11,6 +11,8 @@
#include <memory>
+#include <vcl/mtfxmldump.hxx>
+
namespace {
OUString convert(xmlChar const * string) {
@@ -49,6 +51,14 @@ xmlDocPtr XmlTestTools::parseXmlStream(SvStream* pStream)
return xmlParseDoc(reinterpret_cast<xmlChar*>(pBuffer.get()));
}
+xmlDocPtr XmlTestTools::dumpAndParse(MetafileXmlDump& rDumper, const GDIMetaFile& rGDIMetaFile)
+{
+ SvMemoryStream aStream;
+ rDumper.dump(rGDIMetaFile, aStream);
+ aStream.Seek(STREAM_SEEK_TO_BEGIN);
+ return XmlTestTools::parseXmlStream(&aStream);
+}
+
xmlXPathObjectPtr XmlTestTools::getXPathNode(xmlDocPtr pXmlDoc, const OString& rXPath)
{
xmlXPathContextPtr pXmlXpathCtx = xmlXPathNewContext(pXmlDoc);