[Libreoffice-commits] core.git: 4 commits - sw/qa sw/source writerfilter/source
Tomaž Vajngerl
tomaz.vajngerl at collabora.com
Fri Feb 21 14:35:50 PST 2014
sw/qa/extras/ooxmlexport/data/TextEffects.docx |binary
sw/qa/extras/ooxmlexport/ooxmlexport.cxx | 12 ++
sw/source/filter/ww8/docxattributeoutput.cxx | 103 ++++++++++++++++++++-
sw/source/filter/ww8/docxattributeoutput.hxx | 3
sw/source/filter/ww8/docxexport.cxx | 1
writerfilter/source/dmapper/TextEffectsHandler.cxx | 62 +++++++++++-
writerfilter/source/dmapper/TextEffectsHandler.hxx | 3
writerfilter/source/ooxml/model.xml | 25 +++--
8 files changed, 193 insertions(+), 16 deletions(-)
New commits:
commit 0d2c1e6423b32dc933b08a821a98c0f175987222
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date: Fri Feb 21 20:10:46 2014 +0100
OOXML roundtrip test for w14:glow
Change-Id: I80dd71bad02be980229899845c1451df6f34dca5
diff --git a/sw/qa/extras/ooxmlexport/data/TextEffects.docx b/sw/qa/extras/ooxmlexport/data/TextEffects.docx
new file mode 100644
index 0000000..d164cd9
Binary files /dev/null and b/sw/qa/extras/ooxmlexport/data/TextEffects.docx differ
diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
index 4793249..288c397 100644
--- a/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
+++ b/sw/qa/extras/ooxmlexport/ooxmlexport.cxx
@@ -156,6 +156,7 @@ xmlNodeSetPtr Test::getXPathNode(xmlDocPtr pXmlDoc, const OString& rXPath)
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("a"), BAD_CAST("http://schemas.openxmlformats.org/drawingml/2006/main"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("pic"), BAD_CAST("http://schemas.openxmlformats.org/drawingml/2006/picture"));
xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("rels"), BAD_CAST("http://schemas.openxmlformats.org/package/2006/relationships"));
+ xmlXPathRegisterNs(pXmlXpathCtx, BAD_CAST("w14"), BAD_CAST("http://schemas.microsoft.com/office/word/2010/wordml"));
xmlXPathObjectPtr pXmlXpathObj = xmlXPathEvalExpression(BAD_CAST(rXPath.getStr()), pXmlXpathCtx);
return pXmlXpathObj->nodesetval;
}
@@ -3419,6 +3420,17 @@ DECLARE_OOXMLEXPORT_TEST(testDMLGroupShapeParaSpacing, "dml-groupshape-paraspaci
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xRun, "ParaTopMargin"));
CPPUNIT_ASSERT_EQUAL(sal_Int32(0), getProperty<sal_Int32>(xRun, "ParaBottomMargin"));
}
+
+DECLARE_OOXMLEXPORT_TEST(testW14TextEffects, "TextEffects.docx")
+{
+ xmlDocPtr pXmlDoc = parseExport("word/document.xml");
+ if (!pXmlDoc)
+ return;
+
+ CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[1]/w:rPr/w14:glow", "rad").match("63500"));
+ CPPUNIT_ASSERT(getXPath(pXmlDoc, "/w:document/w:body/w:p/w:r[2]/w:rPr/w14:glow", "rad").match("228600"));
+}
+
#endif
CPPUNIT_PLUGIN_IMPLEMENT();
commit 3554f377eac7446c3d91b70c740c22bb060b9313
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date: Fri Feb 21 20:07:56 2014 +0100
ooxml: export w14:glow with subelements from a CharGrabGab
Change-Id: I3e60f0532a18eba12f7a63c3e745668f54b8806e
diff --git a/sw/source/filter/ww8/docxattributeoutput.cxx b/sw/source/filter/ww8/docxattributeoutput.cxx
index b1e4a01..b81fcc6 100644
--- a/sw/source/filter/ww8/docxattributeoutput.cxx
+++ b/sw/source/filter/ww8/docxattributeoutput.cxx
@@ -1121,7 +1121,8 @@ void DocxAttributeOutput::InitCollectedRunProperties()
FSNS( XML_w, XML_eastAsianLayout ),
FSNS( XML_w, XML_specVanish ),
FSNS( XML_w, XML_oMath ),
- FSNS( XML_w, XML_rPrChange )
+ FSNS( XML_w, XML_rPrChange ),
+ FSNS( XML_w14, XML_glow ),
};
// postpone the output so that we can later [in EndParagraphProperties()]
@@ -1135,6 +1136,94 @@ void DocxAttributeOutput::InitCollectedRunProperties()
}
+namespace
+{
+
+struct NameToId
+{
+ const OUString maName;
+ const sal_Int32 maId;
+};
+
+const NameToId aNameToIdMapping[] =
+{
+ { OUString("val"), FSNS( XML_w14, XML_val ) },
+ { OUString("rad"), FSNS( XML_w14, XML_rad ) },
+ { OUString("schemeClr"), FSNS( XML_w14, XML_schemeClr ) },
+ { OUString("srgbClr"), FSNS( XML_w14, XML_srgbClr ) },
+ { OUString("tint"), FSNS( XML_w14, XML_tint ) },
+ { OUString("shade"), FSNS( XML_w14, XML_shade ) },
+ { OUString("alpha"), FSNS( XML_w14, XML_alpha ) },
+ { OUString("hueMod"), FSNS( XML_w14, XML_hueMod ) },
+ { OUString("sat"), FSNS( XML_w14, XML_sat ) },
+ { OUString("satOff"), FSNS( XML_w14, XML_satOff ) },
+ { OUString("satMod"), FSNS( XML_w14, XML_satMod ) },
+ { OUString("lum"), FSNS( XML_w14, XML_lum ) },
+ { OUString("lumOff"), FSNS( XML_w14, XML_lumOff ) },
+ { OUString("lumMod"), FSNS( XML_w14, XML_lumMod ) },
+};
+
+void lclProcessRecursiveGrabBag(sal_Int32 aElementId, css::uno::Sequence<css::beans::PropertyValue> aElements, sax_fastparser::FSHelperPtr pSerializer)
+{
+ css::uno::Sequence<css::beans::PropertyValue> aAttributes;
+ FastAttributeList* pAttributes = pSerializer->createAttrList();
+
+ for (sal_Int32 j=0; j < aElements.getLength(); ++j)
+ {
+ if( aElements[j].Name == "attributes")
+ {
+ aElements[j].Value >>= aAttributes;
+ }
+ }
+
+ for (sal_Int32 j=0; j < aAttributes.getLength(); ++j)
+ {
+ uno::Any aAny = aAttributes[j].Value;
+ OString aValue;
+
+ if(aAny.getValueType() == getCppuType<sal_Int32>())
+ {
+ aValue = OString::number(aAny.get<sal_Int32>());
+ }
+ else if(aAny.getValueType() == getCppuType<OUString>())
+ {
+ aValue = OUStringToOString(aAny.get<OUString>(), RTL_TEXTENCODING_ASCII_US);
+ }
+
+ sal_Int32 aLength = sizeof (aNameToIdMapping) / sizeof(NameToId);
+ for (sal_Int32 i=0; i < aLength; ++i)
+ {
+ if(aAttributes[j].Name == aNameToIdMapping[i].maName)
+ {
+ pAttributes->add( aNameToIdMapping[i].maId, aValue.getStr());
+ }
+ }
+ }
+
+ XFastAttributeListRef xAttributesList( pAttributes );
+
+ pSerializer->startElement(aElementId, xAttributesList);
+
+ for (sal_Int32 j=0; j < aElements.getLength(); ++j)
+ {
+ css::uno::Sequence<css::beans::PropertyValue> aSumElements;
+
+ sal_Int32 aLength = sizeof (aNameToIdMapping) / sizeof(NameToId);
+ for (sal_Int32 i=0; i < aLength; ++i)
+ {
+ if( aElements[j].Name == aNameToIdMapping[i].maName)
+ {
+ aElements[j].Value >>= aSumElements;
+ lclProcessRecursiveGrabBag(aNameToIdMapping[i].maId, aSumElements, pSerializer);
+ }
+ }
+ }
+
+ pSerializer->endElement(aElementId);
+}
+
+}
+
void DocxAttributeOutput::WriteCollectedRunProperties()
{
// Write all differed properties
@@ -1169,6 +1258,12 @@ void DocxAttributeOutput::WriteCollectedRunProperties()
m_pSerializer->singleElementNS( XML_w, XML_lang, xAttrList );
}
+
+ if (m_aTextEffectsGrabBag.getLength() > 0)
+ {
+ lclProcessRecursiveGrabBag(FSNS( XML_w14, XML_glow ), m_aTextEffectsGrabBag, m_pSerializer);
+ m_aTextEffectsGrabBag.realloc(0);
+ }
}
void DocxAttributeOutput::EndRunProperties( const SwRedlineData* pRedlineData )
@@ -6342,6 +6437,12 @@ void DocxAttributeOutput::CharGrabBag( const SfxGrabBagItem& rItem )
{
// just skip these, they were processed before
}
+ else if (i->first == "CharGlowTextEffect")
+ {
+ uno::Sequence<beans::PropertyValue> aGrabBagSeq;
+ i->second >>= aGrabBagSeq;
+ m_aTextEffectsGrabBag = aGrabBagSeq;
+ }
else
SAL_INFO("sw.ww8", "DocxAttributeOutput::CharGrabBag: unhandled grab bag property " << i->first);
}
diff --git a/sw/source/filter/ww8/docxattributeoutput.hxx b/sw/source/filter/ww8/docxattributeoutput.hxx
index 660776c..8463d39 100644
--- a/sw/source/filter/ww8/docxattributeoutput.hxx
+++ b/sw/source/filter/ww8/docxattributeoutput.hxx
@@ -736,6 +736,9 @@ private:
/// names of these bookmarks for each sequence.
std::map<OUString, std::vector<OString> > m_aSeqBookmarksNames;
+ /// GrabBag for text effexts like glow
+ css::uno::Sequence<css::beans::PropertyValue> m_aTextEffectsGrabBag;
+
/// The current table helper
SwWriteTable *m_pTableWrt;
diff --git a/sw/source/filter/ww8/docxexport.cxx b/sw/source/filter/ww8/docxexport.cxx
index 2f416e5..321e01e 100644
--- a/sw/source/filter/ww8/docxexport.cxx
+++ b/sw/source/filter/ww8/docxexport.cxx
@@ -1255,6 +1255,7 @@ XFastAttributeListRef DocxExport::MainXmlNamespaces( FSHelperPtr serializer )
pAttr->add( FSNS( XML_xmlns, XML_wpg ), "http://schemas.microsoft.com/office/word/2010/wordprocessingGroup" );
pAttr->add( FSNS( XML_xmlns, XML_mc ), "http://schemas.openxmlformats.org/markup-compatibility/2006" );
pAttr->add( FSNS( XML_xmlns, XML_wp14 ), "http://schemas.microsoft.com/office/word/2010/wordprocessingDrawing" );
+ pAttr->add( FSNS( XML_xmlns, XML_w14 ), "http://schemas.microsoft.com/office/word/2010/wordml" );
return XFastAttributeListRef( pAttr );
}
commit 02d8db735bd2166cda4e997775d3e41ecee65c6f
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date: Fri Feb 21 19:53:40 2014 +0100
writerfilter: add more w14:glow attributes into GrabBag
Fix and add more attributes into the GrabBag, add attributes for
an element into its own collection.
Change-Id: I8d2e2fa35f4bc447c7e913e5c39223fc01f39d5a
diff --git a/writerfilter/source/dmapper/TextEffectsHandler.cxx b/writerfilter/source/dmapper/TextEffectsHandler.cxx
index ad3fb75..6e00b20 100644
--- a/writerfilter/source/dmapper/TextEffectsHandler.cxx
+++ b/writerfilter/source/dmapper/TextEffectsHandler.cxx
@@ -9,12 +9,12 @@
*/
#include <TextEffectsHandler.hxx>
+#include <rtl/ustrbuf.hxx>
+#include <comphelper/string.hxx>
#include <ooxml/resourceids.hxx>
#include "dmapperLoggers.hxx"
-
#include <stack>
-
namespace writerfilter {
namespace dmapper
{
@@ -29,6 +29,7 @@ struct GrabBagStackElement
std::vector<beans::PropertyValue> maPropertyList;
};
+/// Tool that is useful for construction of a nested Sequence/PropertyValue hierarchy
class GrabBagStack
{
public:
@@ -43,6 +44,11 @@ public:
std::stack<GrabBagStackElement> mStack;
GrabBagStackElement mCurrentElement;
+ OUString getCurrentName()
+ {
+ return mCurrentElement.maName;
+ }
+
PropertyValue getRootProperty()
{
while(!mStack.empty())
@@ -92,6 +98,27 @@ public:
}
};
+OUString TextEffectsHandler::getSchemeColorTypeString(sal_Int32 nType)
+{
+ switch (nType)
+ {
+ case NS_ooxml::LN_ST_SchemeColorVal_bg1: return OUString("bg1");
+ case NS_ooxml::LN_ST_SchemeColorVal_tx1: return OUString("tx1");
+ case NS_ooxml::LN_ST_SchemeColorVal_bg2: return OUString("bg2");
+ case NS_ooxml::LN_ST_SchemeColorVal_tx2: return OUString("tx2");
+ case NS_ooxml::LN_ST_SchemeColorVal_accent1: return OUString("accent1");
+ case NS_ooxml::LN_ST_SchemeColorVal_accent2: return OUString("accent2");
+ case NS_ooxml::LN_ST_SchemeColorVal_accent3: return OUString("accent3");
+ case NS_ooxml::LN_ST_SchemeColorVal_accent4: return OUString("accent4");
+ case NS_ooxml::LN_ST_SchemeColorVal_accent5: return OUString("accent5");
+ case NS_ooxml::LN_ST_SchemeColorVal_accent6: return OUString("accent6");
+
+ default: break;
+ }
+ return OUString();
+}
+
+
TextEffectsHandler::TextEffectsHandler() :
LoggedProperties(dmapper_logger, "TextEffectsHandler"),
mpGrabBagStack(NULL)
@@ -104,20 +131,35 @@ TextEffectsHandler::~TextEffectsHandler()
void TextEffectsHandler::lcl_attribute(Id aName, Value& aValue)
{
- sal_Int32 nValue = aValue.getInt();
+
+ if (mpGrabBagStack->getCurrentName() != "attributes")
+ mpGrabBagStack->push("attributes");
+
switch(aName)
{
case NS_ooxml::LN_CT_Percentage_val:
- mpGrabBagStack->appendElement("val", makeAny(nValue));
+ mpGrabBagStack->appendElement("val", makeAny(aValue.getInt()));
break;
case NS_ooxml::LN_CT_PositiveFixedPercentage_val:
- mpGrabBagStack->appendElement("val", makeAny(nValue));
+ mpGrabBagStack->appendElement("val", makeAny(aValue.getInt()));
+ break;
+ case NS_ooxml::LN_CT_PositivePercentage_val:
+ mpGrabBagStack->appendElement("val", makeAny(aValue.getInt()));
break;
case NS_ooxml::LN_CT_SchemeColor_val:
- mpGrabBagStack->appendElement("val", makeAny(nValue));
+ mpGrabBagStack->appendElement("val", makeAny(getSchemeColorTypeString(aValue.getInt())));
+ break;
+ case NS_ooxml::LN_CT_SRgbColor_val:
+ {
+ OUStringBuffer aBuf = OUString::number(aValue.getInt(), 16);
+ OUStringBuffer aStr;
+ comphelper::string::padToLength(aStr, 6 - aBuf.getLength(), '0');
+ aStr.append(aBuf.getStr());
+ mpGrabBagStack->appendElement("val", makeAny(aStr.makeStringAndClear()));
+ }
break;
case NS_ooxml::LN_CT_Glow_rad:
- mpGrabBagStack->appendElement("rad", makeAny(nValue));
+ mpGrabBagStack->appendElement("rad", makeAny(aValue.getInt()));
break;
default:
break;
@@ -126,6 +168,9 @@ void TextEffectsHandler::lcl_attribute(Id aName, Value& aValue)
void TextEffectsHandler::lcl_sprm(Sprm& rSprm)
{
+ if (mpGrabBagStack->getCurrentName() == "attributes")
+ mpGrabBagStack->pop();
+
sal_uInt32 nSprmId = rSprm.getId();
switch(nSprmId)
@@ -177,6 +222,9 @@ void TextEffectsHandler::lcl_sprm(Sprm& rSprm)
pProperties.get()->resolve( *this );
+ if (mpGrabBagStack->getCurrentName() == "attributes")
+ mpGrabBagStack->pop();
+
switch(nSprmId)
{
case NS_ooxml::LN_EG_ColorChoice_srgbClr:
diff --git a/writerfilter/source/dmapper/TextEffectsHandler.hxx b/writerfilter/source/dmapper/TextEffectsHandler.hxx
index 89c5626..f224c63 100644
--- a/writerfilter/source/dmapper/TextEffectsHandler.hxx
+++ b/writerfilter/source/dmapper/TextEffectsHandler.hxx
@@ -24,6 +24,7 @@ namespace dmapper
class GrabBagStack;
+/// Class to process all text effects like glow, textOutline, ...
class TextEffectsHandler : public LoggedProperties
{
private:
@@ -41,6 +42,8 @@ public:
void enableInteropGrabBag(OUString aName);
void disableInteropGrabBag();
bool isInteropGrabBagEnabled();
+
+ static OUString getSchemeColorTypeString(sal_Int32 nType);
};
typedef boost::shared_ptr<TextEffectsHandler> TextEffectsHandlerPtr;
commit 22a5e4db00a1372270b80f6f121fec91de1f20dd
Author: Tomaž Vajngerl <tomaz.vajngerl at collabora.com>
Date: Fri Feb 21 19:51:06 2014 +0100
writerfilter: fix w14 simple types
Change-Id: I5693b7570227e1a337f03febc28f5ea336b4af7f
diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml
index 0a00ea2..d8a9192 100644
--- a/writerfilter/source/ooxml/model.xml
+++ b/writerfilter/source/ooxml/model.xml
@@ -5335,16 +5335,26 @@
</define>
<define name="ST_PositiveFixedPercentage">
- <empty/>
+ <data type="long">
+ <xs:documentation>Positive fixed precentage</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">27273042316900</param>
+ </data>
</define>
<define name="ST_PositivePercentage">
- <empty/>
+ <data type="long">
+ <xs:documentation>Positive precentage</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">27273042316900</param>
+ </data>
</define>
<define name="ST_Percentage">
- <data type="int">
- <xs:documentation>Percentage</xs:documentation>
+ <data type="long">
+ <xs:documentation>Precentage</xs:documentation>
+ <param name="minInclusive">0</param>
+ <param name="maxInclusive">27273042316900</param>
</data>
</define>
@@ -5483,7 +5493,7 @@
<value name="bg1" tokenid="ooxml:ST_SchemeColorVal_bg1">bg1</value>
<value name="tx1" tokenid="ooxml:ST_SchemeColorVal_tx1">tx1</value>
<value name="bg2" tokenid="ooxml:ST_SchemeColorVal_bg2">bg2</value>
- <value name="tx2" tokenid="ooxml:ST_SchemeColorVal">tx2</value>
+ <value name="tx2" tokenid="ooxml:ST_SchemeColorVal_tx2">tx2</value>
<value name="accent1" tokenid="ooxml:ST_SchemeColorVal_accent1">accent1</value>
<value name="accent2" tokenid="ooxml:ST_SchemeColorVal_accent2">accent2</value>
<value name="accent3" tokenid="ooxml:ST_SchemeColorVal_accent3">accent3</value>
@@ -5493,9 +5503,8 @@
</resource>
<resource name="ST_PositiveCoordinate" resource="Integer" generated="yes"/>
<resource name="ST_HexColorRGB" resource="Hex"/>
- <resource name="ST_PositivePercentage" resource="Value">
- <action name="characters" action="positivePercentage"/>
- </resource>
+ <resource name="ST_PositivePercentage" resource="Integer" generated="yes"/>
+ <resource name="ST_PositiveFixedPercentage" resource="Integer" generated="yes"/>
<resource name="ST_Percentage" resource="Integer" generated="yes"/>
<resource name="EG_ColorTransform" resource="Properties" tag="character">
More information about the Libreoffice-commits
mailing list