diff options
author | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-03-07 11:45:39 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@collabora.co.uk> | 2014-03-07 11:53:04 +0100 |
commit | f9bf15e19ec823a58ee32bf94da81f3bb1a147bc (patch) | |
tree | 537af3a0633c923228ee4a06db472fa52221dad3 | |
parent | d102ae2ce8873b01d9408e37a843e16062c50531 (diff) |
writerfilter: initial strict DOCX support
The generate-id() code is just necessary avoid duplicated elements in
the for-each loop. http://mahahegde.com/xslt-distinct-values/ has a
detailed description of the technique used here.
Change-Id: I647efe9d4a0834d3756fe9fa6d706ba6ba4e00f1
-rw-r--r-- | writerfilter/source/ooxml/factoryimpl.xsl | 3 | ||||
-rw-r--r-- | writerfilter/source/ooxml/model.xml | 2 | ||||
-rw-r--r-- | writerfilter/source/ooxml/namespaceids.xsl | 3 |
3 files changed, 6 insertions, 2 deletions
diff --git a/writerfilter/source/ooxml/factoryimpl.xsl b/writerfilter/source/ooxml/factoryimpl.xsl index 0ac9e56f8b1a..2fb51396fe24 100644 --- a/writerfilter/source/ooxml/factoryimpl.xsl +++ b/writerfilter/source/ooxml/factoryimpl.xsl @@ -196,6 +196,7 @@ uno::Reference< xml::sax::XFastContextHandler > OOXMLFactory::createFastCh </xsl:text> </xsl:template> +<xsl:key name="namespaces-by-id" match="namespace-alias" use="@id"/> <xsl:template name="fasttokentoid"> <xsl:text> namespace tokenmap { @@ -217,7 +218,7 @@ string fastTokenToId(sal_uInt32 nToken) switch (nToken & 0xffff0000) {</xsl:text> - <xsl:for-each select="//namespace-alias"> + <xsl:for-each select="//namespace-alias[generate-id() = generate-id(key('namespaces-by-id', @id)[1])]"> <xsl:text> case NS_</xsl:text> <xsl:value-of select="@alias"/> diff --git a/writerfilter/source/ooxml/model.xml b/writerfilter/source/ooxml/model.xml index 70289f529e85..12c47c4f922c 100644 --- a/writerfilter/source/ooxml/model.xml +++ b/writerfilter/source/ooxml/model.xml @@ -23,6 +23,7 @@ <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" alias="theme" id="officeRelTheme"/> <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing" alias="wordprocessingDrawing" id="dmlWordDr"/> <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/main" alias="drawingml" id="dml"/> + <namespace-alias name="http://purl.oclc.org/ooxml/drawingml/main" alias="drawingml" id="dml"/> <namespace-alias name="urn:schemas-microsoft-com:vml" alias="vml" id="vml"/> <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/picture" alias="picture" id="dmlPicture"/> <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/diagram" alias="diagram" id="dmlDiagram"/> @@ -32,6 +33,7 @@ <namespace-alias name="http://schemas.openxmlformats.org/drawingml/2006/chart" alias="chart" id="dmlChart"/> <namespace-alias name="urn:schemas-microsoft-com:office:word" alias="vml_wordprocessingDrawing" id="vmlWord"/> <namespace-alias name="http://schemas.openxmlformats.org/wordprocessingml/2006/main" alias="wordprocessingml" id="doc"/> + <namespace-alias name="http://purl.oclc.org/ooxml/wordprocessingml/main" alias="wordprocessingml" id="doc"/> <namespace-alias name="http://schemas.openxmlformats.org/officeDocument/2006/math" alias="math" id="officeMath"/> <namespace-alias name="http://schemas.openxmlformats.org/schemaLibrary/2006/main" alias="schemaLibrary" id="schema"/> <namespace-alias name="http://schemas.openxmlformats.org/markup-compatibility/2006" alias="mce" id="mce"/> diff --git a/writerfilter/source/ooxml/namespaceids.xsl b/writerfilter/source/ooxml/namespaceids.xsl index ea56acc694a0..d92593dbc374 100644 --- a/writerfilter/source/ooxml/namespaceids.xsl +++ b/writerfilter/source/ooxml/namespaceids.xsl @@ -51,8 +51,9 @@ <xsl:include href="factorytools.xsl"/> +<xsl:key name="namespaces-by-id" match="namespace-alias" use="@id"/> <xsl:template name="namespaceids"> - <xsl:for-each select="//namespace-alias"> + <xsl:for-each select="//namespace-alias[generate-id() = generate-id(key('namespaces-by-id', @id)[1])]"> <xsl:text> const sal_uInt32 </xsl:text> <xsl:call-template name="namespaceid"/> |