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().c_str());
381 case GradientStyle::Linear:
return "Linear";
382 case GradientStyle::Axial:
return "Axial";
383 case GradientStyle::Radial:
return "Radial";
384 case GradientStyle::Elliptical:
return "Elliptical";
385 case GradientStyle::Square:
return "Square";
386 case GradientStyle::Rect:
return "Rect";
387 case GradientStyle::FORCE_EQUAL_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().c_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().c_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().c_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()));
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().c_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());
853 MetaTextArrayAction* pMetaTextArrayAction =
static_cast<MetaTextArrayAction*
>(pAction);
856 sal_Int32
aIndex = pMetaTextArrayAction->GetIndex();
857 sal_Int32 aLength = pMetaTextArrayAction->GetLen();
859 writePoint(rWriter, pMetaTextArrayAction->GetPoint());
863 if (!pMetaTextArrayAction->GetDXArray().empty())
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;
872 for (sal_Int32
i = 0;
i < aLength -
aIndex; ++
i)
874 sDxLengthString.append(rArray[
aIndex +
i]);
875 sDxLengthString.append(
" ");
877 rWriter.
content(sDxLengthString);
883 const OUString& rStr = pMetaTextArrayAction->GetText();
886 if ( rStr.indexOf(0x01) > -1 )
887 rWriter.
content(rStr.replaceAll(
"\001",
""));
902 writePoint(rWriter, pMeta->GetPoint());
903 rWriter.
attribute(
"index", pMeta->GetIndex());
904 rWriter.
attribute(
"length", pMeta->GetLen());
905 rWriter.
attribute(
"width", pMeta->GetWidth());
908 rWriter.
content(pMeta->GetText());
919 writeRectangle(rWriter, pMeta->GetRect());
921 rWriter.
content(pMeta->GetText());
925 rWriter.
content(convertDrawTextFlagsToString(pMeta->GetStyle()));
935 Bitmap aBitmap = pMeta->GetBitmap();
937 writePoint(rWriter, pMeta->GetPoint());
938 writeBitmap(rWriter, aBitmap);
946 Bitmap aBitmap = pMeta->GetBitmap();
948 writePoint(rWriter, pMeta->GetPoint());
949 writeSize(rWriter, pMeta->GetSize());
950 writeBitmap(rWriter, aBitmap);
957 auto pMeta =
static_cast<MetaBmpScalePartAction*
>(pAction);
958 Bitmap aBitmap = pMeta->GetBitmap();
960 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
961 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
962 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
963 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
964 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
965 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
966 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
967 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
968 writeBitmap(rWriter, aBitmap);
977 writePoint(rWriter, pMeta->GetPoint());
978 Bitmap aBitmap = pMeta->GetBitmapEx().GetBitmap();
979 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx()));
980 writeBitmap(rWriter, aBitmap);
989 writePoint(rWriter, pMeta->GetPoint());
990 writeSize(rWriter, pMeta->GetSize());
991 Bitmap aBitmap = pMeta->GetBitmapEx().GetBitmap();
992 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx()));
993 writeBitmap(rWriter, aBitmap);
1000 auto pMeta =
static_cast<MetaBmpExScalePartAction*
>(pAction);
1001 Bitmap aBitmap = pMeta->GetBitmapEx().GetBitmap();
1003 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
1004 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
1005 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
1006 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
1007 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
1008 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
1009 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
1010 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
1011 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx()));
1012 writeBitmap(rWriter, aBitmap);
1021 writePoint(rWriter, pMeta->GetPoint());
1022 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
1023 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1032 writePoint(rWriter, pMeta->GetPoint());
1033 writeSize(rWriter, pMeta->GetSize());
1034 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
1035 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1044 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
1045 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
1046 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
1047 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
1048 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
1049 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
1050 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
1051 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
1052 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
1053 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1066 writeRectangle(rWriter, pMeta->
GetRect());
1075 auto*
const pMetaHatchAction =
static_cast<MetaHatchAction*
>(pAction);
1080 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
1085 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1088 writePoint(rWriter, rPolygon[
i]);
1097 const auto& rHatch = pMetaHatchAction->GetHatch();
1098 rWriter.
attribute(
"style", convertHatchStyle(rHatch.GetStyle()));
1099 rWriter.
attribute(
"color", convertColorToString(rHatch.GetColor()));
1100 rWriter.
attribute(
"distance", sal_Int32(rHatch.GetDistance()));
1101 rWriter.
attribute(
"angle", sal_Int32(rHatch.GetAngle().get()));
1110 const auto* pMetaAction =
static_cast<const MetaWallpaperAction*
>(pAction);
1113 writeRectangle(rWriter, pMetaAction->GetRect());
1116 const auto& rWallpaper = pMetaAction->GetWallpaper();
1118 rWriter.
attribute(
"color", convertColorToString(rWallpaper.GetColor()));
1121 rWriter.
attribute(
"style", convertWallpaperStyleToString(eStyle));
1123 if (rWallpaper.IsBitmap())
1128 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(rBitmapEx));
1135 if (rWallpaper.IsGradient())
1138 Gradient aGradient = rWallpaper.GetGradient();
1139 writeGradient(rWriter, aGradient);
1143 if (rWallpaper.IsRect())
1147 writeRectangle(rWriter, aRect);
1151 rWriter.
attribute(
"fixed", rWallpaper.IsFixed() ?
"true" :
"false");
1152 rWriter.
attribute(
"scrollable", rWallpaper.IsScrollable() ?
"true" :
"false");
1165 tools::Rectangle aRectangle = pMetaClipRegionAction->GetRegion().GetBoundRect();
1166 writeRectangle(rWriter, aRectangle);
1168 vcl::Region aRegion = pMetaClipRegionAction->GetRegion();
1174 for (sal_uInt16 j = 0; j < aPolyPolygon.
Count(); ++j)
1179 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1182 writePoint(rWriter, rPolygon[
i]);
1201 writeRectangle(rWriter, aRectangle);
1215 writeRectangle(rWriter, aRectangle);
1225 rWriter.
attribute(
"horzmove", pMetaMoveClipRegionAction->GetHorzMove());
1226 rWriter.
attribute(
"vertmove", pMetaMoveClipRegionAction->GetVertMove());
1236 rWriter.
attribute(
"color", convertColorToString(pMetaLineColorAction->
GetColor()));
1246 rWriter.
attribute(
"color", convertColorToString(pMetaFillColorAction->
GetColor()));
1256 rWriter.
attribute(
"color", convertColorToString(pMetaTextColorAction->
GetColor()));
1266 rWriter.
attribute(
"color", convertColorToString(pMetaTextFillColorAction->
GetColor()));
1268 if (pMetaTextFillColorAction->
IsSetting())
1279 OUString sAlign = convertTextAlignToString(pMetaTextAlignAction->
GetTextAlign());
1280 if (!sAlign.isEmpty())
1292 writePoint(rWriter, aMapMode.
GetOrigin());
1357 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
1362 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1365 writePoint(rWriter, rPolygon[
i]);
1382 writePoint(rWriter, pMetaEPSAction->
GetPoint());
1383 writeSize(rWriter, pMetaEPSAction->
GetSize());
1411 writePoint(rWriter, pMeta->GetRefPoint());
1412 rWriter.
attribute(
"set", pMeta->IsSetting() ?
"true" :
"false");
1421 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1430 writePoint(rWriter, pMeta->GetStartPoint());
1431 rWriter.
attribute(
"width", pMeta->GetWidth());
1432 rWriter.
attribute(
"strikeout", convertFontStrikeoutToString(pMeta->GetStrikeout()));
1433 rWriter.
attribute(
"underline", convertFontLineStyleToString(pMeta->GetUnderline()));
1434 rWriter.
attribute(
"overline", convertFontLineStyleToString(pMeta->GetOverline()));
1443 writePoint(rWriter, pMeta->GetPoint());
1444 writeSize(rWriter, pMeta->GetSize());
1445 rWriter.
attribute(
"transparent", pMeta->IsTransparent() ?
"true" :
"false");
1448 writeGradient(rWriter, pMeta->GetGradient());
1452 writeXml(pMeta->GetGDIMetaFile(), rWriter);
1464 writeGradient(rWriter, pMetaGradientExAction->
GetGradient());
1467 for (sal_uInt16 j = 0; j < rPolyPolygon.
Count(); ++j)
1472 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1475 writePoint(rWriter, rPolygon[
i]);
1515 rWriter.
attribute(
"color", convertColorToString(pMetaAction->GetColor()));
1532 if (!pMetaCommentAction->
GetComment().isEmpty())
1545 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
GradientStyle GetStyle() 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
sal_uInt16 GetSteps() const
const Fraction & GetScaleX() const
MapUnit GetMapUnit() const
const Point & GetOrigin() const
const Fraction & GetScaleY() const
TextAlign GetTextAlign() 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