19#include <rtl/string.hxx>
20#include <rtl/ustrbuf.hxx>
36 std::vector<OUString> aStrings;
39 aStrings.emplace_back(
"PushLineColor");
41 aStrings.emplace_back(
"PushFillColor");
43 aStrings.emplace_back(
"PushFont");
45 aStrings.emplace_back(
"PushTextColor");
47 aStrings.emplace_back(
"PushMapMode");
49 aStrings.emplace_back(
"PushClipRegion");
51 aStrings.emplace_back(
"PushRasterOp");
53 aStrings.emplace_back(
"PushTextFillColor");
55 aStrings.emplace_back(
"PushTextAlign");
57 aStrings.emplace_back(
"PushRefPoint");
59 aStrings.emplace_back(
"PushTextLineColor");
61 aStrings.emplace_back(
"PushTextLayoutMode");
63 aStrings.emplace_back(
"PushTextLanguage");
65 aStrings.emplace_back(
"PushOverlineColor");
72 aString = aStrings[0];
73 for (
size_t i = 1;
i < aStrings.size(); ++
i)
75 aString +=
", " + aStrings[
i];
80OUString convertDrawTextFlagsToString(
DrawTextFlags eDrawTextFlags)
82 std::vector<OUString> aStrings;
84 aStrings.emplace_back(
"Disable");
86 aStrings.emplace_back(
"Mnemonic");
88 aStrings.emplace_back(
"Mono");
90 aStrings.emplace_back(
"Clip");
92 aStrings.emplace_back(
"Left");
94 aStrings.emplace_back(
"Center");
96 aStrings.emplace_back(
"Right");
98 aStrings.emplace_back(
"Top");
100 aStrings.emplace_back(
"VCenter");
102 aStrings.emplace_back(
"Bottom");
104 aStrings.emplace_back(
"EndEllipsis");
106 aStrings.emplace_back(
"PathEllipsis");
108 aStrings.emplace_back(
"MultiLine");
110 aStrings.emplace_back(
"WordBreak");
112 aStrings.emplace_back(
"NewsEllipsis");
114 aStrings.emplace_back(
"WordBreakHyphenation");
116 aStrings.emplace_back(
"CenterEllipsis");
118 aStrings.emplace_back(
"HideMnemonic");
122 if (aStrings.empty())
125 aString = aStrings[0];
126 for (
size_t i = 1;
i < aStrings.size(); ++
i)
128 aString +=
" " + aStrings[
i];
133OUString convertRopToString(
RasterOp eRop)
146OUString convertTextAlignToString(
TextAlign eAlign)
158OUString convertColorToString(
Color aColor)
161 return "#" + aRGBString;
164OUString convertLineStyleToString(
LineStyle eAlign)
188OUString convertLineCapToString(css::drawing::LineCap eCap)
193 case css::drawing::LineCap_BUTT:
return "butt";
194 case css::drawing::LineCap_ROUND:
return "round";
195 case css::drawing::LineCap_SQUARE:
return "square";
199OUString convertPolygonFlags(
PolyFlags eFlags)
204 case PolyFlags::Normal:
return "normal";
205 case PolyFlags::Control:
return "control";
206 case PolyFlags::Smooth:
return "smooth";
207 case PolyFlags::Symmetric:
return "symmetric";
211OUString convertFontWeightToString(
FontWeight eFontWeight)
231OUString convertFontStrikeoutToString(
FontStrikeout eFontStrikeout)
233 switch (eFontStrikeout)
247OUString convertFontLineStyleToString(
FontLineStyle eFontLineStyle)
249 switch (eFontLineStyle)
337OUString convertBitmapExTransparentType(
BitmapEx const & rBitmapEx)
345OUString convertMapUnitToString(
MapUnit eUnit)
350 case MapUnit::LASTENUMDUMMY:
return "LASTENUMDUMMY";
351 case MapUnit::Map1000thInch:
return "Map1000thInch";
352 case MapUnit::Map100thInch:
return "Map100thInch";
353 case MapUnit::Map100thMM:
return "Map100thMM";
354 case MapUnit::Map10thInch:
return "Map10thInch";
355 case MapUnit::Map10thMM:
return "Map10thMM";
356 case MapUnit::MapAppFont:
return "MapAppFont";
357 case MapUnit::MapCM:
return "MapCM";
358 case MapUnit::MapInch:
return "MapInch";
359 case MapUnit::MapMM:
return "MapMM";
360 case MapUnit::MapPixel:
return "MapPixel";
361 case MapUnit::MapPoint:
return "MapPoint";
362 case MapUnit::MapRelative:
return "MapRelative";
363 case MapUnit::MapSysFont:
return "MapSysFont";
364 case MapUnit::MapTwip:
return "MapTwip";
368OUString convertFractionToString(
const Fraction& aFraction)
370 std::stringstream ss;
374 return OUString::createFromAscii(ss.str());
377OUString convertGradientStyleToOUString(css::awt::GradientStyle eStyle)
381 case css::awt::GradientStyle_LINEAR:
return "Linear";
382 case css::awt::GradientStyle_AXIAL:
return "Axial";
383 case css::awt::GradientStyle_RADIAL:
return "Radial";
384 case css::awt::GradientStyle_ELLIPTICAL:
return "Elliptical";
385 case css::awt::GradientStyle_SQUARE:
return "Square";
386 case css::awt::GradientStyle_RECT:
return "Rect";
387 case css::awt::GradientStyle::GradientStyle_MAKE_FIXED_SIZE:
return "ForceEqualSize";
396 case HatchStyle::Single:
return "Single";
397 case HatchStyle::Double:
return "Double";
398 case HatchStyle::Triple:
return "Triple";
399 case HatchStyle::FORCE_EQUAL_SIZE:
return "ForceEqualSize";
404OUString convertLanguageTypeToString(
LanguageType rLanguageType)
406 std::stringstream ss;
407 ss << std::hex << std::setfill (
'0') << std::setw(4) << rLanguageType.
get();
408 return "#" + OUString::createFromAscii(ss.str());
411OUString convertWallpaperStyleToString(
WallpaperStyle eWallpaperStyle)
413 switch (eWallpaperStyle)
434 switch (ePixelFormat)
446 switch(eComplexTestLayoutFlags)
457OUString convertGfxLinkTypeToString(
GfxLinkType eGfxLinkType)
479OUString hex32(sal_uInt32 nNumber)
481 std::stringstream ss;
482 ss << std::hex << std::setfill(
'0') << std::setw(8) << nNumber;
483 return OUString::createFromAscii(ss.str());
486OUString toHexString(
const sal_uInt8* nData, sal_uInt32 nDataSize){
488 std::stringstream aStrm;
489 for (sal_uInt32 i = 0;
i < nDataSize;
i++)
491 aStrm << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(nData[i]);
494 return OUString::createFromAscii(aStrm.str());
526 rWriter.
attribute(
"right", OString(
"empty"));
530 rWriter.
attribute(
"bottom", OString(
"empty"));
538 writePoint(rWriter, rMapMode.
GetOrigin());
545 rWriter.
attribute(
"style", convertLineStyleToString(rLineInfo.GetStyle()));
546 rWriter.
attribute(
"width", rLineInfo.GetWidth());
547 rWriter.
attribute(
"dashlen", rLineInfo.GetDashLen());
548 rWriter.
attribute(
"dashcount", rLineInfo.GetDashCount());
549 rWriter.
attribute(
"dotlen", rLineInfo.GetDotLen());
550 rWriter.
attribute(
"dotcount", rLineInfo.GetDotCount());
551 rWriter.
attribute(
"distance", rLineInfo.GetDistance());
552 rWriter.
attribute(
"join", convertLineJoinToString(rLineInfo.GetLineJoin()));
553 rWriter.
attribute(
"cap", convertLineCapToString(rLineInfo.GetLineCap()));
558 rWriter.
attribute(
"style", convertGradientStyleToOUString(rGradient.
GetStyle()));
570OString toHexString(
const std::vector<unsigned char>& a)
572 std::stringstream aStrm;
575 aStrm << std::setw(2) << std::setfill('0') << std::hex << static_cast<int>(i);
578 return OString(aStrm.str());
598 aHashEngine.update(&r, 1);
599 aHashEngine.update(&g, 1);
600 aHashEngine.update(&b, 1);
601 aHashEngine.update(&a, 1);
604 std::vector<unsigned char> aVector = aHashEngine.finalize();
605 rWriter.
attribute(
"contentchecksum", toHexString(aVector));
610 writeBitmapContentChecksum(rWriter, rBitmap);
626 maFilter[nActionType] = bShouldFilter;
650 writePoint(rWriter, aMtfMapMode.
GetOrigin());
655 writeSize(rWriter, aMtfSize);
657 for(
size_t nAction = 0; nAction < rMetaFile.
GetActionSize(); ++nAction)
664 OString sCurrentElementTag = convertLineStyleToString(nActionType);
679 writePoint(rWriter, pMetaAction->GetPoint());
680 rWriter.
attribute(
"color", convertColorToString(pMetaAction->GetColor()));
689 writePoint(rWriter, pMetaAction->GetPoint());
699 writeEndPoint(rWriter, pMetaLineAction->
GetEndPoint());
701 writeLineInfo(rWriter, pMetaLineAction->
GetLineInfo());
710 writeRectangle(rWriter, pMetaAction->
GetRect());
719 writeRectangle(rWriter, pMetaAction->GetRect());
720 rWriter.
attribute(
"horizontalround", pMetaAction->GetHorzRound());
721 rWriter.
attribute(
"verticalround", pMetaAction->GetVertRound());
730 writeRectangle(rWriter, pMetaAction->GetRect());
739 writeRectangle(rWriter, pMetaAction->GetRect());
740 writeStartPoint(rWriter, pMetaAction->GetStartPoint());
741 writeEndPoint(rWriter, pMetaAction->GetEndPoint());
750 writeRectangle(rWriter, pMetaAction->GetRect());
751 writeStartPoint(rWriter, pMetaAction->GetStartPoint());
752 writeEndPoint(rWriter, pMetaAction->GetEndPoint());
761 writeRectangle(rWriter, pMetaAction->GetRect());
762 writeStartPoint(rWriter, pMetaAction->GetStartPoint());
763 writeEndPoint(rWriter, pMetaAction->GetEndPoint());
773 writeLineInfo(rWriter, pMetaPolyLineAction->
GetLineInfo());
777 for (sal_uInt16
i = 0;
i < aPolygon.
GetSize();
i++)
780 writePoint(rWriter, aPolygon[
i]);
797 for (sal_uInt16
i = 0;
i < aPolygon.
GetSize();
i++)
800 writePoint(rWriter, aPolygon[
i]);
817 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
822 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
825 writePoint(rWriter, rPolygon[
i]);
840 writePoint(rWriter, pMeta->GetPoint());
841 rWriter.
attribute(
"index", pMeta->GetIndex());
842 rWriter.
attribute(
"length", pMeta->GetLen());
844 rWriter.
content(pMeta->GetText());
857 sal_Int32 aLength = pMetaTextArrayAction->
GetLen();
859 writePoint(rWriter, pMetaTextArrayAction->
GetPoint());
865 auto & rArray = pMetaTextArrayAction->
GetDXArray();
867 if (
aIndex < o3tl::narrowing<sal_Int32>(rArray.size()))
869 if (
aIndex + aLength - 1 < o3tl::narrowing<sal_Int32>(rArray.size()))
871 OUStringBuffer sDxLengthString(std::max((aLength -
aIndex) * 4, sal_Int32(0)));
872 for (sal_Int32
i = 0;
i < aLength -
aIndex; ++
i)
874 sDxLengthString.append(OUString::number(rArray[
aIndex +
i]) +
" ");
876 rWriter.
content(sDxLengthString);
882 const OUString& rStr = pMetaTextArrayAction->
GetText();
885 if ( rStr.indexOf(0x01) > -1 )
886 rWriter.
content(rStr.replaceAll(
"\001",
""));
901 writePoint(rWriter, pMeta->GetPoint());
902 rWriter.
attribute(
"index", pMeta->GetIndex());
903 rWriter.
attribute(
"length", pMeta->GetLen());
904 rWriter.
attribute(
"width", pMeta->GetWidth());
907 rWriter.
content(pMeta->GetText());
918 writeRectangle(rWriter, pMeta->GetRect());
920 rWriter.
content(pMeta->GetText());
924 rWriter.
content(convertDrawTextFlagsToString(pMeta->GetStyle()));
934 Bitmap aBitmap = pMeta->GetBitmap();
936 writePoint(rWriter, pMeta->GetPoint());
937 writeBitmap(rWriter, aBitmap);
945 Bitmap aBitmap = pMeta->GetBitmap();
947 writePoint(rWriter, pMeta->GetPoint());
948 writeSize(rWriter, pMeta->GetSize());
949 writeBitmap(rWriter, aBitmap);
957 Bitmap aBitmap = pMeta->GetBitmap();
959 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
960 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
961 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
962 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
963 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
964 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
965 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
966 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
967 writeBitmap(rWriter, aBitmap);
976 writePoint(rWriter, pMeta->GetPoint());
977 Bitmap aBitmap = pMeta->GetBitmapEx().GetBitmap();
978 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx()));
979 writeBitmap(rWriter, aBitmap);
988 writePoint(rWriter, pMeta->GetPoint());
989 writeSize(rWriter, pMeta->GetSize());
990 Bitmap aBitmap = pMeta->GetBitmapEx().GetBitmap();
991 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx()));
992 writeBitmap(rWriter, aBitmap);
1000 Bitmap aBitmap = pMeta->GetBitmapEx().GetBitmap();
1002 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
1003 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
1004 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
1005 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
1006 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
1007 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
1008 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
1009 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
1010 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx()));
1011 writeBitmap(rWriter, aBitmap);
1020 writePoint(rWriter, pMeta->GetPoint());
1021 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
1022 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1031 writePoint(rWriter, pMeta->GetPoint());
1032 writeSize(rWriter, pMeta->GetSize());
1033 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
1034 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1043 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
1044 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
1045 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
1046 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
1047 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
1048 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
1049 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
1050 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
1051 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
1052 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1065 writeRectangle(rWriter, pMeta->
GetRect());
1074 auto*
const pMetaHatchAction =
static_cast<MetaHatchAction*
>(pAction);
1079 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
1084 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1087 writePoint(rWriter, rPolygon[
i]);
1096 const auto& rHatch = pMetaHatchAction->GetHatch();
1097 rWriter.
attribute(
"style", convertHatchStyle(rHatch.GetStyle()));
1098 rWriter.
attribute(
"color", convertColorToString(rHatch.GetColor()));
1099 rWriter.
attribute(
"distance", sal_Int32(rHatch.GetDistance()));
1100 rWriter.
attribute(
"angle", sal_Int32(rHatch.GetAngle().get()));
1112 writeRectangle(rWriter, pMetaAction->GetRect());
1115 const auto& rWallpaper = pMetaAction->GetWallpaper();
1117 rWriter.
attribute(
"color", convertColorToString(rWallpaper.GetColor()));
1120 rWriter.
attribute(
"style", convertWallpaperStyleToString(eStyle));
1122 if (rWallpaper.IsBitmap())
1127 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(rBitmapEx));
1134 if (rWallpaper.IsGradient())
1137 Gradient aGradient = rWallpaper.GetGradient();
1138 writeGradient(rWriter, aGradient);
1142 if (rWallpaper.IsRect())
1146 writeRectangle(rWriter, aRect);
1150 rWriter.
attribute(
"fixed", rWallpaper.IsFixed() ?
"true" :
"false");
1151 rWriter.
attribute(
"scrollable", rWallpaper.IsScrollable() ?
"true" :
"false");
1164 tools::Rectangle aRectangle = pMetaClipRegionAction->GetRegion().GetBoundRect();
1165 writeRectangle(rWriter, aRectangle);
1167 vcl::Region aRegion = pMetaClipRegionAction->GetRegion();
1173 for (sal_uInt16 j = 0; j < aPolyPolygon.
Count(); ++j)
1178 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1181 writePoint(rWriter, rPolygon[
i]);
1200 writeRectangle(rWriter, aRectangle);
1214 writeRectangle(rWriter, aRectangle);
1224 rWriter.
attribute(
"horzmove", pMetaMoveClipRegionAction->GetHorzMove());
1225 rWriter.
attribute(
"vertmove", pMetaMoveClipRegionAction->GetVertMove());
1235 rWriter.
attribute(
"color", convertColorToString(pMetaLineColorAction->
GetColor()));
1245 rWriter.
attribute(
"color", convertColorToString(pMetaFillColorAction->
GetColor()));
1255 rWriter.
attribute(
"color", convertColorToString(pMetaTextColorAction->
GetColor()));
1265 rWriter.
attribute(
"color", convertColorToString(pMetaTextFillColorAction->
GetColor()));
1267 if (pMetaTextFillColorAction->
IsSetting())
1278 OUString sAlign = convertTextAlignToString(pMetaTextAlignAction->
GetTextAlign());
1279 if (!sAlign.isEmpty())
1291 writePoint(rWriter, aMapMode.
GetOrigin());
1356 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
1361 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1364 writePoint(rWriter, rPolygon[
i]);
1381 writePoint(rWriter, pMetaEPSAction->
GetPoint());
1382 writeSize(rWriter, pMetaEPSAction->
GetSize());
1410 writePoint(rWriter, pMeta->GetRefPoint());
1411 rWriter.
attribute(
"set", pMeta->IsSetting() ?
"true" :
"false");
1420 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1429 writePoint(rWriter, pMeta->GetStartPoint());
1430 rWriter.
attribute(
"width", pMeta->GetWidth());
1431 rWriter.
attribute(
"strikeout", convertFontStrikeoutToString(pMeta->GetStrikeout()));
1432 rWriter.
attribute(
"underline", convertFontLineStyleToString(pMeta->GetUnderline()));
1433 rWriter.
attribute(
"overline", convertFontLineStyleToString(pMeta->GetOverline()));
1442 writePoint(rWriter, pMeta->GetPoint());
1443 writeSize(rWriter, pMeta->GetSize());
1444 rWriter.
attribute(
"transparent", pMeta->IsTransparent() ?
"true" :
"false");
1447 writeGradient(rWriter, pMeta->GetGradient());
1451 writeXml(pMeta->GetGDIMetaFile(), rWriter);
1463 writeGradient(rWriter, pMetaGradientExAction->
GetGradient());
1466 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
1471 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1474 writePoint(rWriter, rPolygon[
i]);
1514 rWriter.
attribute(
"color", convertColorToString(pMetaAction->GetColor()));
1531 if (!pMetaCommentAction->
GetComment().isEmpty())
1544 rWriter.
attribute(
"note", OString(
"not implemented in xml dump"));
BitmapChecksum GetChecksum() const
Bitmap GetBitmap(Color aTransparentReplaceColor) const
const Size & GetSizePixel() const
BitmapChecksum GetChecksum() const
Size GetSizePixel() const
vcl::PixelFormat getPixelFormat() const
sal_uInt8 GetBlue() const
OUString AsRGBHexString() const
sal_uInt8 GetAlpha() const
sal_uInt8 GetGreen() const
bool IsPrefMapModeValid() const
const sal_uInt8 * GetData() const
const Size & GetPrefSize() const
sal_uInt32 GetDataSize() const
GfxLinkType GetType() const
const MapMode & GetPrefMapMode() const
sal_uInt32 GetUserId() const
sal_uInt16 GetStartIntensity() const
Degree10 GetAngle() const
sal_uInt16 GetEndIntensity() const
sal_uInt16 GetOfsX() const
sal_uInt16 GetBorder() const
const Color & GetEndColor() const
sal_uInt16 GetOfsY() const
const Color & GetStartColor() const
css::awt::GradientStyle GetStyle() const
sal_uInt16 GetSteps() const
const Fraction & GetScaleX() const
MapUnit GetMapUnit() const
const Point & GetOrigin() const
const Fraction & GetScaleY() const
TextAlign GetTextAlign() const
sal_Int32 GetIndex() const
const KernArray & GetDXArray() const
const OUString & GetText() const
const Point & GetPoint() const
const Color & GetColor() const
const Color & GetColor() const
LanguageType GetTextLanguage() const
constexpr tools::Long Height() const
constexpr tools::Long Width() const
const OUString & GetStyleName() const
const OUString & GetFamilyName() const
const Size & GetFontSize() const
const Color & GetColor() const
Degree10 GetOrientation() const
const Color & GetFillColor() const
tools::PolyPolygon GetAsPolyPolygon() const
bool HasPolyPolygonOrB2DPolyPolygon() const
tools::Rectangle GetBoundRect() const
std::deque< AttacherIndex_Impl > aIndex
FontLineStyle_FORCE_EQUAL_SIZE
FontStrikeout_FORCE_EQUAL_SIZE
TextAlign_FORCE_EQUAL_SIZE
FontWeight_FORCE_EQUAL_SIZE
GfxLinkType
GfxLink graphic types that are supported by GfxLink.
PixelFormat
Pixel format of the bitmap in bits per pixel.
UNDERLYING_TYPE get() const