oox/source/drawingml/customshapepresetdata.cxx | 155 +++++++++++++++++++++---- 1 file changed, 131 insertions(+), 24 deletions(-)
New commits: commit 06abff6caef5205178858796643ced0dff13ad95 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 16:00:25 2014 +0200 oox customshapepresetdata: parse SubViewSize Change-Id: I2feb7054ea2bd699384b01a1d83845cd3c2562b0 diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index 97e9b74..6d3a281 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -161,6 +161,25 @@ awt::Rectangle lcl_parseRectangle(const OString& rValue) return aRectangle; } +awt::Size lcl_parseSize(const OString& rValue) +{ + awt::Size aSize; + OString aToken = rValue; + // We expect the followings here: Width, Height + static const OString aExpectedWidthPrefix = "Width = (long) "; + assert(aToken.startsWith(aExpectedWidthPrefix)); + sal_Int32 nIndex = aExpectedWidthPrefix.getLength(); + aSize.Width = static_cast<sal_Int32>(aToken.getToken(0, ',', nIndex).toInt32()); + + static const OString aExpectedHeightPrefix = " Height = (long) "; + aToken = aToken.copy(nIndex); + assert(aToken.startsWith(aExpectedHeightPrefix)); + nIndex = aExpectedHeightPrefix.getLength(); + aSize.Width = static_cast<sal_Int32>(aToken.copy(nIndex).toInt32()); + + return aSize; +} + drawing::EnhancedCustomShapeTextFrame lcl_parseEnhancedCustomShapeTextFrame(const OString& rValue) { drawing::EnhancedCustomShapeTextFrame aTextFrame; @@ -602,6 +621,68 @@ void lcl_parsePathTextFrames(comphelper::SequenceAsVector<beans::PropertyValue>& } } +void lcl_parsePathSubViewSizeValues(comphelper::SequenceAsVector<beans::PropertyValue>& rPath, const OString& rValue) +{ + comphelper::SequenceAsVector<awt::Size> aSizes; + sal_Int32 nLevel = 0; + sal_Int32 nStart = 0; + for (sal_Int32 i = 0; i < rValue.getLength(); ++i) + { + if (rValue[i] == '{') + { + if (!nLevel) + nStart = i; + nLevel++; + } + else if (rValue[i] == '}') + { + nLevel--; + if (!nLevel) + aSizes.push_back(lcl_parseSize(rValue.copy(nStart + strlen("{ "), i - nStart - strlen(" },")))); + } + } + + beans::PropertyValue aPropertyValue; + aPropertyValue.Name = "SubViewSize"; + aPropertyValue.Value = uno::makeAny(aSizes.getAsConstList()); + rPath.push_back(aPropertyValue); +} + +void lcl_parsePathSubViewSize(comphelper::SequenceAsVector<beans::PropertyValue>& rPath, const OString& rValue) +{ + sal_Int32 nLevel = 0; + bool bIgnore = false; + sal_Int32 nStart = 0; + for (sal_Int32 i = 0; i < rValue.getLength(); ++i) + { + if (rValue[i] == '{') + { + if (!nLevel) + bIgnore = true; + nLevel++; + } + else if (rValue[i] == '}') + { + nLevel--; + if (!nLevel) + bIgnore = false; + } + else if (rValue[i] == ',' && !bIgnore) + { + OString aToken = rValue.copy(nStart, i - nStart); + static const OString aExpectedPrefix("Value = (any) { ([]com.sun.star.awt.Size) { "); + if (aToken.startsWith(aExpectedPrefix)) + { + aToken = aToken.copy(aExpectedPrefix.getLength(), aToken.getLength() - aExpectedPrefix.getLength() - strlen(" } }")); + lcl_parsePathSubViewSizeValues(rPath, aToken); + } + else if (!aToken.startsWith("Name =") && !aToken.startsWith("Handle =")) + SAL_WARN("oox", "lcl_parsePathSubViewSize: unexpected token: " << aToken); + nStart = i + strlen(", "); + } + } +} + void lcl_parsePath(comphelper::SequenceAsVector<beans::PropertyValue>& rPath, const OString& rValue) { sal_Int32 nLevel = 0; @@ -626,6 +707,8 @@ void lcl_parsePath(comphelper::SequenceAsVector<beans::PropertyValue>& rPath, co lcl_parsePathSegments(rPath, aToken); else if (aToken.startsWith("Name = \"TextFrames\"")) lcl_parsePathTextFrames(rPath, aToken); + else if (aToken.startsWith("Name = \"SubViewSize\"")) + lcl_parsePathSubViewSize(rPath, aToken); else SAL_WARN("oox", "lcl_parsePath: unexpected token: " << aToken); } commit ea06c516a8b8b2d8dbf0dadba1e8c2196cb89449 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 15:48:11 2014 +0200 oox customshapepresetdata: allow empty equation list Change-Id: Ie18c3e631c266d4281df8b92d08ddeaaef20e8d7 diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index 71add4f..97e9b74 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -682,12 +682,15 @@ void CustomShapeProperties::initializePresetDataMap() else if (aLine == "Equations") { aStream.ReadLine(aLine); - OString aExpectedPrefix("([]string) { "); - assert(aLine.startsWith(aExpectedPrefix)); - comphelper::SequenceAsVector<OUString> aEquations; - OString aValue = aLine.copy(aExpectedPrefix.getLength(), aLine.getLength() - aExpectedPrefix.getLength() - strlen(" }")); - lcl_parseEquations(aEquations, aValue); + if (aLine != "([]string) {}") + { + OString aExpectedPrefix("([]string) { "); + assert(aLine.startsWith(aExpectedPrefix)); + + OString aValue = aLine.copy(aExpectedPrefix.getLength(), aLine.getLength() - aExpectedPrefix.getLength() - strlen(" }")); + lcl_parseEquations(aEquations, aValue); + } aPropertyMap.setProperty(PROP_Equations, aEquations.getAsConstList()); } else if (aLine == "Handles") commit 0e44c6592b558ac70f87031a9ddb1d131fb802b2 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 15:45:51 2014 +0200 oox customshapepresetdata: handle RadiusRangeMaximum/RadiusRangeMinimum Change-Id: Icc6e96f4cfbf8304933246d43621bf8d2824daf3 diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index f865cd3..71add4f 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -351,6 +351,10 @@ uno::Sequence<beans::PropertyValue> lcl_parseHandle(const OString& rValue) lcl_parseHandleRange(aRet, aToken, "RangeYMaximum"); else if (aToken.startsWith("Name = \"RangeYMinimum\"")) lcl_parseHandleRange(aRet, aToken, "RangeYMinimum"); + else if (aToken.startsWith("Name = \"RadiusRangeMaximum\"")) + lcl_parseHandleRange(aRet, aToken, "RadiusRangeMaximum"); + else if (aToken.startsWith("Name = \"RadiusRangeMinimum\"")) + lcl_parseHandleRange(aRet, aToken, "RadiusRangeMinimum"); else if (aToken.startsWith("Name = \"RefX\"")) lcl_parseHandleRef(aRet, aToken, "RefX"); else if (aToken.startsWith("Name = \"RefY\"")) commit 3e0bf64f58b72a13840b7136ac89f58b0484170e Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 15:39:18 2014 +0200 oox customshapepresetdata: allow empty handle list Change-Id: I35d1c6aaf94853df844bd226c57003742d3c48be diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index 8875f77..f865cd3 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -689,12 +689,15 @@ void CustomShapeProperties::initializePresetDataMap() else if (aLine == "Handles") { aStream.ReadLine(aLine); - OString aExpectedPrefix("([][]com.sun.star.beans.PropertyValue) { "); - assert(aLine.startsWith(aExpectedPrefix)); - comphelper::SequenceAsVector< uno::Sequence<beans::PropertyValue> > aHandles; - OString aValue = aLine.copy(aExpectedPrefix.getLength(), aLine.getLength() - aExpectedPrefix.getLength() - strlen(" }")); - lcl_parseHandles(aHandles, aValue); + if (aLine != "([][]com.sun.star.beans.PropertyValue) {}") + { + OString aExpectedPrefix("([][]com.sun.star.beans.PropertyValue) { "); + assert(aLine.startsWith(aExpectedPrefix)); + + OString aValue = aLine.copy(aExpectedPrefix.getLength(), aLine.getLength() - aExpectedPrefix.getLength() - strlen(" }")); + lcl_parseHandles(aHandles, aValue); + } aPropertyMap.setProperty(PROP_Handles, aHandles.getAsConstList()); } else if (aLine == "MirroredX") commit 79940e2da54c320d3dda0149bc9ac21ad45dccd5 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 15:37:24 2014 +0200 oox customshapepresetdata: allow empty adjustment list Change-Id: I842a464ddc0403d63698b2f9b52d4362af1e46c3 diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index a3740a9..8875f77 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -664,12 +664,15 @@ void CustomShapeProperties::initializePresetDataMap() if (aLine == "AdjustmentValues") { aStream.ReadLine(aLine); - OString aExpectedPrefix("([]com.sun.star.drawing.EnhancedCustomShapeAdjustmentValue) { "); - assert(aLine.startsWith(aExpectedPrefix)); - comphelper::SequenceAsVector<drawing::EnhancedCustomShapeAdjustmentValue> aAdjustmentValues; - OString aValue = aLine.copy(aExpectedPrefix.getLength(), aLine.getLength() - aExpectedPrefix.getLength() - strlen(" }")); - lcl_parseAdjustmentValues(aAdjustmentValues, aValue); + if (aLine != "([]com.sun.star.drawing.EnhancedCustomShapeAdjustmentValue) {}") + { + OString aExpectedPrefix("([]com.sun.star.drawing.EnhancedCustomShapeAdjustmentValue) { "); + assert(aLine.startsWith(aExpectedPrefix)); + + OString aValue = aLine.copy(aExpectedPrefix.getLength(), aLine.getLength() - aExpectedPrefix.getLength() - strlen(" }")); + lcl_parseAdjustmentValues(aAdjustmentValues, aValue); + } aPropertyMap.setProperty(PROP_AdjustmentValues, aAdjustmentValues.getAsConstList()); } else if (aLine == "Equations") commit b7feee55782f83e356611a90c8a22e3509880ac2 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 15:28:18 2014 +0200 oox customshapepresetdata: handle multiple definitions Change-Id: I41b1ff9fa030267ef05fadeb6f77d33a183af8f1 diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index 49cb2c2..a3740a9 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -647,11 +647,16 @@ void CustomShapeProperties::initializePresetDataMap() OUString aName; bool bNotDone = aStream.ReadLine(aLine); PropertyMap aPropertyMap; + bool bFirst = true; while (bNotDone) { static const OString aCommentPrefix("/* "); if (aLine.startsWith(aCommentPrefix)) { + if (bFirst) + bFirst = false; + else + maPresetDataMap[StaticTokenMap::get().getTokenFromUnicode(aName)] = aPropertyMap; aName = OStringToOUString(aLine.copy(aCommentPrefix.getLength(), aLine.getLength() - aCommentPrefix.getLength() - strlen(" */")), RTL_TEXTENCODING_UTF8); } else commit d66140be01a2a0b4566988ef090287f08fd8e8f3 Author: Miklos Vajna <vmik...@collabora.co.uk> Date: Thu Apr 17 15:24:06 2014 +0200 oox customshapepresetdata: handle RangeXMaximum and a few more properties Change-Id: I8649866c338055ed7fe7c14f366c69670b538d93 diff --git a/oox/source/drawingml/customshapepresetdata.cxx b/oox/source/drawingml/customshapepresetdata.cxx index 4522c3c..49cb2c2 100644 --- a/oox/source/drawingml/customshapepresetdata.cxx +++ b/oox/source/drawingml/customshapepresetdata.cxx @@ -305,21 +305,21 @@ void lcl_parseHandleRange(comphelper::SequenceAsVector<beans::PropertyValue>& rH } // Parses a string like: Name = "RefY", Handle = (long) 0, Value = (any) { (long) 0 }, State = (com.sun.star.beans.PropertyState) DIRECT_VALUE -void lcl_parseHandleRefY(comphelper::SequenceAsVector<beans::PropertyValue>& rHandle, const OString& rValue) +void lcl_parseHandleRef(comphelper::SequenceAsVector<beans::PropertyValue>& rHandle, const OString& rValue, const OUString& rName) { - static const OString aExpectedPrefix("Name = \"RefY\", Handle = (long) 0, Value = (any) { (long) "); - if (rValue.startsWith(aExpectedPrefix)) + static const OString aExpectedXPrefix("Name = \"RefX\", Handle = (long) 0, Value = (any) { (long) "); + static const OString aExpectedYPrefix("Name = \"RefY\", Handle = (long) 0, Value = (any) { (long) "); + if (rValue.startsWith(aExpectedXPrefix) || rValue.startsWith(aExpectedYPrefix)) { - sal_Int32 nIndex = aExpectedPrefix.getLength(); + sal_Int32 nIndex = aExpectedXPrefix.getLength(); beans::PropertyValue aPropertyValue; - aPropertyValue.Name = "RefY"; + aPropertyValue.Name = rName; // We only expect a Value here aPropertyValue.Value = uno::makeAny(rValue.getToken(0, '}', nIndex).toInt32()); rHandle.push_back(aPropertyValue); - } else - SAL_WARN("oox", "lcl_parseHandleRefY: unexpected value: " << rValue); + SAL_WARN("oox", "lcl_parseHandleRef: unexpected value: " << rValue); } uno::Sequence<beans::PropertyValue> lcl_parseHandle(const OString& rValue) @@ -343,14 +343,20 @@ uno::Sequence<beans::PropertyValue> lcl_parseHandle(const OString& rValue) OString aToken = rValue.copy(nStart + strlen("{ "), i - nStart - strlen(" },")); if (aToken.startsWith("Name = \"Position\"")) lcl_parseHandlePosition(aRet, aToken); + else if (aToken.startsWith("Name = \"RangeXMaximum\"")) + lcl_parseHandleRange(aRet, aToken, "RangeXMaximum"); + else if (aToken.startsWith("Name = \"RangeXMinimum\"")) + lcl_parseHandleRange(aRet, aToken, "RangeXMinimum"); else if (aToken.startsWith("Name = \"RangeYMaximum\"")) lcl_parseHandleRange(aRet, aToken, "RangeYMaximum"); else if (aToken.startsWith("Name = \"RangeYMinimum\"")) lcl_parseHandleRange(aRet, aToken, "RangeYMinimum"); + else if (aToken.startsWith("Name = \"RefX\"")) + lcl_parseHandleRef(aRet, aToken, "RefX"); else if (aToken.startsWith("Name = \"RefY\"")) - lcl_parseHandleRefY(aRet, aToken); + lcl_parseHandleRef(aRet, aToken, "RefY"); else - SAL_WARN("oox", "lcl_parseHandle: unexpected value: " << rValue); + SAL_WARN("oox", "lcl_parseHandle: unexpected token: " << aToken); } } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits