summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--offapi/com/sun/star/rdf/URIs.idl8
-rw-r--r--schema/libreoffice/OpenDocument-v1.3+libreoffice-metadata.owl23
-rw-r--r--sw/inc/fmtmeta.hxx2
-rw-r--r--sw/qa/uitest/data/metacolor.odtbin0 -> 9280 bytes
-rw-r--r--sw/qa/uitest/styleInspector/styleInspector.py107
-rw-r--r--sw/source/core/inc/unometa.hxx2
-rw-r--r--sw/source/core/text/inftxt.cxx12
-rw-r--r--sw/source/core/text/inftxt.hxx4
-rw-r--r--sw/source/core/text/itrform2.cxx65
-rw-r--r--sw/source/core/text/txtfld.cxx3
-rw-r--r--sw/source/core/txtnode/fmtatr2.cxx4
-rw-r--r--sw/source/core/unocore/unorefmk.cxx27
-rw-r--r--unoxml/source/rdf/CURI.cxx7
13 files changed, 243 insertions, 21 deletions
diff --git a/offapi/com/sun/star/rdf/URIs.idl b/offapi/com/sun/star/rdf/URIs.idl
index 6172fa87717a..ecb74f667ae8 100644
--- a/offapi/com/sun/star/rdf/URIs.idl
+++ b/offapi/com/sun/star/rdf/URIs.idl
@@ -314,6 +314,14 @@ constants URIs
/// urn:oasis:names:tc:opendocument:xmlns:text:1.0meta-field
// const short TEXT_META_FIELD = 3000;
+
+ /** custom shading color of an annotated text range or metadata field
+ (replacement of the default field shading color)
+
+ @since LibreOffice 7.2
+ */
+ /// urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#shading
+ const short LO_EXT_SHADING = 2106;
};
diff --git a/schema/libreoffice/OpenDocument-v1.3+libreoffice-metadata.owl b/schema/libreoffice/OpenDocument-v1.3+libreoffice-metadata.owl
index 7fe1d94939b8..2c648cf6ce30 100644
--- a/schema/libreoffice/OpenDocument-v1.3+libreoffice-metadata.owl
+++ b/schema/libreoffice/OpenDocument-v1.3+libreoffice-metadata.owl
@@ -75,4 +75,27 @@
<range rdf:resource="http://www.w3.org/2001/XMLSchema-datatypes#string"/>
<label xml:lang="en">has suffix</label>
</owl:DatatypeProperty>
+
+<owl:Class rdf:about="urn:oasis:names:tc:opendocument:xmlns:text:1.0meta">
+ <label xml:lang="en">OpenDocument Annotated text range Element</label>
+ <subClassOf rdf:resource="http://docs.oasis-open.org/ns/office/1.2/meta/odf#Element"/>
+</owl:Class>
+
+<owl:Class rdf:about="urn:oasis:names:tc:opendocument:xmlns:text:1.0nestedtextcontent">
+ <owl:equivalentClass>
+ <owl:Class>
+ <owl:unionOf rdf:parseType="Collection">
+ <owl:Class rdf:about="urn:oasis:names:tc:opendocument:xmlns:text:1.0meta">
+ <owl:Class rdf:about="urn:oasis:names:tc:opendocument:xmlns:text:1.0meta-field">
+ </owl:unionOf>
+ </owl:Class>
+ </owl:equivalentClass>
+</owl:Class>
+
+<owl:DatatypeProperty rdf:about="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#shading">
+ <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+ <domain rdf:resource="urn:oasis:names:tc:opendocument:xmlns:text:1.0nestedtextcontent"/>
+ <range rdf:resource="http://www.w3.org/2001/XMLSchema-datatypes#string"/>
+ <label xml:lang="en">has shading color</label>
+</owl:DatatypeProperty>
</rdf:RDF>
diff --git a/sw/inc/fmtmeta.hxx b/sw/inc/fmtmeta.hxx
index 17a160bc53e6..441a7d5e6e68 100644
--- a/sw/inc/fmtmeta.hxx
+++ b/sw/inc/fmtmeta.hxx
@@ -189,7 +189,7 @@ private:
public:
/// get prefix/suffix from the RDF repository. @throws RuntimeException
void GetPrefixAndSuffix(
- OUString *const o_pPrefix, OUString *const o_pSuffix);
+ OUString *const o_pPrefix, OUString *const o_pSuffix, OUString *const o_pShadingColor);
};
/// knows all meta-fields in the document.
diff --git a/sw/qa/uitest/data/metacolor.odt b/sw/qa/uitest/data/metacolor.odt
new file mode 100644
index 000000000000..88cfb7212def
--- /dev/null
+++ b/sw/qa/uitest/data/metacolor.odt
Binary files differ
diff --git a/sw/qa/uitest/styleInspector/styleInspector.py b/sw/qa/uitest/styleInspector/styleInspector.py
index 6afc4483e911..9c4abaf7191f 100644
--- a/sw/qa/uitest/styleInspector/styleInspector.py
+++ b/sw/qa/uitest/styleInspector/styleInspector.py
@@ -7,6 +7,7 @@
from uitest.framework import UITestCase
from uitest.uihelper.common import get_state_as_dict, get_url_for_data_file
from libreoffice.uno.propertyvalue import mkPropertyValues
+from com.sun.star.rdf.URIs import RDF_TYPE, RDFS_COMMENT, RDFS_LABEL, ODF_PREFIX, ODF_SUFFIX, LO_EXT_SHADING
class styleNavigator(UITestCase):
@@ -246,4 +247,110 @@ class styleNavigator(UITestCase):
self.xUITest.executeCommand(".uno:Sidebar")
self.ui_test.close_doc()
+ def test_metadata_shading_color(self):
+ writer_doc = self.ui_test.load_file(get_url_for_data_file("metacolor.odt"))
+ xWriterDoc = self.xUITest.getTopFocusWindow()
+ xWriterEdit = xWriterDoc.getChild("writer_edit")
+
+ self.xUITest.executeCommand(".uno:Sidebar")
+ xWriterEdit.executeAction("SIDEBAR", mkPropertyValues({"PANEL": "InspectorTextPanel"}))
+
+ xListBox = xWriterEdit.getChild('listbox_fonts')
+
+ # The cursor is on text without metadata
+ self.assertEqual(1, len(xListBox.getChild('0').getChildren()))
+ self.assertEqual("Default Paragraph Style\t", get_state_as_dict(xListBox.getChild('0').getChild('0'))['Text'])
+ self.assertEqual(136, len(xListBox.getChild('0').getChild('0').getChildren()))
+ self.assertEqual(0, len(xListBox.getChild('1').getChildren()))
+ self.assertEqual(0, len(xListBox.getChild('2').getChildren()))
+
+ # go to next word with RDF annotation
+ self.xUITest.executeCommand(".uno:GoToNextWord")
+ self.xUITest.executeCommand(".uno:GoRight")
+
+ # FIXME jump over the control character (not visible in getString(), but it affects
+ # cursor position and availability of NestedTextContent)
+ self.xUITest.executeCommand(".uno:GoRight")
+
+ # The cursor is on text with annotated text range
+ xDirFormatting = xListBox.getChild('3')
+ self.assertEqual(2, len(xDirFormatting.getChildren()))
+ self.assertEqual("Metadata Reference\t", get_state_as_dict(xDirFormatting.getChild('0'))['Text'])
+ self.assertEqual("Nested Text Content\tipsum", get_state_as_dict(xDirFormatting.getChild('1'))['Text'])
+
+ xMetadata = xDirFormatting.getChild('0')
+ self.assertEqual(2, len(xMetadata.getChildren()))
+ self.assertEqual("xml:id\tID-f1a8a096-7a43-4bda-a462-d73c2800dd9a", get_state_as_dict(xMetadata.getChild('0'))['Text'])
+ # RGB code of the custom shading color of the annotated text range is FFB7E9
+ self.assertEqual("urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#shading\tFFB7E9", get_state_as_dict(xMetadata.getChild('1'))['Text'])
+
+ self.assertEqual(0, len(xListBox.getChild('1').getChildren()))
+ self.assertEqual(0, len(xListBox.getChild('2').getChildren()))
+
+ # go to next word with RDF annotation
+ self.xUITest.executeCommand(".uno:GoToNextWord")
+ self.xUITest.executeCommand(".uno:GoToNextWord")
+ self.xUITest.executeCommand(".uno:GoToNextWord")
+ self.xUITest.executeCommand(".uno:GoRight")
+
+ # The cursor is on text with annotated text range
+ xDirFormatting = xListBox.getChild('3')
+ self.assertEqual(2, len(xDirFormatting.getChildren()))
+ self.assertEqual("Metadata Reference\t", get_state_as_dict(xDirFormatting.getChild('0'))['Text'])
+ self.assertEqual("Nested Text Content\tames", get_state_as_dict(xDirFormatting.getChild('1'))['Text'])
+
+ xMetadata = xDirFormatting.getChild('0')
+ print(get_state_as_dict(xMetadata))
+ self.assertEqual(2, len(xMetadata.getChildren()))
+ self.assertEqual("xml:id\tID-24478193-9630-4d03-8976-9e097c843a0b", get_state_as_dict(xMetadata.getChild('0'))['Text'])
+ # RGB code of the custom shading color of the annotated text range is 97E1E9 (the code can be lower case, see STRtoRGB)
+ self.assertEqual("urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#shading\t97e1e9", get_state_as_dict(xMetadata.getChild('1'))['Text'])
+
+ self.assertEqual(0, len(xListBox.getChild('1').getChildren()))
+ self.assertEqual(0, len(xListBox.getChild('2').getChildren()))
+
+ # add a new annotated text range and check it in the Style Inspector
+ self.xUITest.executeCommand(".uno:GoToStartOfDoc")
+
+ # create annotated text range on "Lorem"
+ viewCursor = writer_doc.CurrentController.getViewCursor()
+ viewCursor.goRight(5, True)
+ rdf = writer_doc.createInstance("com.sun.star.text.InContentMetadata")
+ writer_doc.Text.insertTextContent(viewCursor, rdf, True)
+
+ # set its custom shading color using the new URI const LO_EXT_SHADING
+ repository = writer_doc.getRDFRepository()
+ # get metadata graph of file "custom.rdf" stored in the test document
+ xCustomGraph = [repository.getGraph(i) for i in repository.getGraphNames() if i.LocalName == "custom.rdf"]
+ self.assertEqual(1, len(xCustomGraph))
+
+ smgr = self.xContext.ServiceManager
+ xShadingURI = smgr.createInstance('com.sun.star.rdf.URI')
+ xShadingURI.initialize((LO_EXT_SHADING,))
+ xShadingColor = smgr.createInstance('com.sun.star.rdf.Literal')
+ xShadingColor.initialize(('BBFF88',))
+ xCustomGraph[0].addStatement(rdf, xShadingURI, xShadingColor)
+
+ # remove the selection
+ self.xUITest.executeCommand(".uno:GoLeft")
+
+ # FIXME: neither LO_EXT_SHADING, nor odf:prefix/odf:suffix changes update the View,
+ # so add a temporary bookmark to the text range to trigger the color change immediately
+ self.ui_test.execute_dialog_through_command(".uno:InsertBookmark")
+ xBookDlg = self.xUITest.getTopFocusWindow()
+ xInsertBtn = xBookDlg.getChild("insert")
+ xInsertBtn.executeAction("CLICK", tuple()) # first bookmark
+ self.xUITest.executeCommand(".uno:Undo")
+
+ xDirFormatting = xListBox.getChild('3')
+ xMetadata = xDirFormatting.getChild('0')
+ self.assertEqual(2, len(xMetadata.getChildren()))
+ # RGB code of the custom shading color of the annotated text range is BBFF88
+ self.assertEqual("urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#shading\tBBFF88", get_state_as_dict(xMetadata.getChild('1'))['Text'])
+
+ self.xUITest.executeCommand(".uno:Sidebar")
+ self.ui_test.close_doc()
+
+
+
# vim: set shiftwidth=4 softtabstop=4 expandtab:
diff --git a/sw/source/core/inc/unometa.hxx b/sw/source/core/inc/unometa.hxx
index ea4c3e66836c..ca298fcd8f63 100644
--- a/sw/source/core/inc/unometa.hxx
+++ b/sw/source/core/inc/unometa.hxx
@@ -263,7 +263,7 @@ public:
void getPrefixAndSuffix(
const css::uno::Reference< css::frame::XModel>& xModel,
const css::uno::Reference< css::rdf::XMetadatable>& xMetaField,
- OUString *const o_pPrefix, OUString *const o_pSuffix);
+ OUString *const o_pPrefix, OUString *const o_pSuffix, OUString *const o_pShadowColor);
#endif // INCLUDED_SW_SOURCE_CORE_INC_UNOMETA_HXX
diff --git a/sw/source/core/text/inftxt.cxx b/sw/source/core/text/inftxt.cxx
index c399ac758a24..6e5318097e2b 100644
--- a/sw/source/core/text/inftxt.cxx
+++ b/sw/source/core/text/inftxt.cxx
@@ -1125,7 +1125,7 @@ void SwTextPaintInfo::DrawCheckBox(const SwFieldFormCheckboxPortion &rPor, bool
m_pOut->Pop();
}
-void SwTextPaintInfo::DrawBackground( const SwLinePortion &rPor ) const
+void SwTextPaintInfo::DrawBackground( const SwLinePortion &rPor, const Color *pColor ) const
{
OSL_ENSURE( OnWin(), "SwTextPaintInfo::DrawBackground: printer pollution ?" );
@@ -1145,7 +1145,11 @@ void SwTextPaintInfo::DrawBackground( const SwLinePortion &rPor ) const
}
else
{
- pOut->SetFillColor( SwViewOption::GetFieldShadingsColor() );
+ if ( pColor )
+ pOut->SetFillColor( *pColor );
+ else
+ pOut->SetFillColor( SwViewOption::GetFieldShadingsColor() );
+
pOut->SetLineColor();
}
@@ -1313,7 +1317,7 @@ void SwTextPaintInfo::DrawBorder( const SwLinePortion &rPor ) const
}
void SwTextPaintInfo::DrawViewOpt( const SwLinePortion &rPor,
- PortionType nWhich ) const
+ PortionType nWhich, const Color *pColor ) const
{
if( !OnWin() || IsMulti() )
return;
@@ -1366,7 +1370,7 @@ void SwTextPaintInfo::DrawViewOpt( const SwLinePortion &rPor,
}
}
if ( bDraw )
- DrawBackground( rPor );
+ DrawBackground( rPor, pColor );
}
static void lcl_InitHyphValues( PropertyValues &rVals,
diff --git a/sw/source/core/text/inftxt.hxx b/sw/source/core/text/inftxt.hxx
index bb245d5b031f..f11ea65ed918 100644
--- a/sw/source/core/text/inftxt.hxx
+++ b/sw/source/core/text/inftxt.hxx
@@ -399,8 +399,8 @@ public:
void DrawLineBreak( const SwLinePortion &rPor ) const;
void DrawRedArrow( const SwLinePortion &rPor ) const;
void DrawPostIts( bool bScript ) const;
- void DrawBackground( const SwLinePortion &rPor ) const;
- void DrawViewOpt( const SwLinePortion &rPor, PortionType nWhich ) const;
+ void DrawBackground( const SwLinePortion &rPor, const Color *pColor=nullptr ) const;
+ void DrawViewOpt( const SwLinePortion &rPor, PortionType nWhich, const Color *pColor=nullptr ) const;
void DrawBackBrush( const SwLinePortion &rPor ) const;
/**
diff --git a/sw/source/core/text/itrform2.cxx b/sw/source/core/text/itrform2.cxx
index e672eabb3fce..2eddba6c1c6e 100644
--- a/sw/source/core/text/itrform2.cxx
+++ b/sw/source/core/text/itrform2.cxx
@@ -54,8 +54,15 @@
#include <IDocumentSettingAccess.hxx>
#include <IMark.hxx>
#include <IDocumentMarkAccess.hxx>
-
-#include <vector>
+#include <comphelper/processfactory.hxx>
+#include <docsh.hxx>
+#include <unocrsrhelper.hxx>
+#include <com/sun/star/rdf/Statement.hpp>
+#include <com/sun/star/rdf/URI.hpp>
+#include <com/sun/star/rdf/URIs.hpp>
+#include <com/sun/star/rdf/XDocumentMetadataAccess.hpp>
+#include <com/sun/star/rdf/XLiteral.hpp>
+#include <com/sun/star/text/XTextContent.hpp>
using namespace ::com::sun::star;
@@ -842,9 +849,11 @@ namespace {
class SwMetaPortion : public SwTextPortion
{
+ Color m_aShadowColor;
public:
SwMetaPortion() { SetWhichPor( PortionType::Meta ); }
virtual void Paint( const SwTextPaintInfo &rInf ) const override;
+ void SetShadowColor(const Color& rCol ) { m_aShadowColor = rCol; }
};
}
@@ -853,7 +862,12 @@ void SwMetaPortion::Paint( const SwTextPaintInfo &rInf ) const
{
if ( Width() )
{
- rInf.DrawViewOpt( *this, PortionType::Meta );
+ rInf.DrawViewOpt( *this, PortionType::Meta,
+ // custom shading (RDF metadata)
+ COL_BLACK == m_aShadowColor
+ ? nullptr
+ : &m_aShadowColor );
+
SwTextPortion::Paint( rInf );
}
}
@@ -919,7 +933,50 @@ SwTextPortion *SwTextFormatter::WhichTextPor( SwTextFormatInfo &rInf ) const
pPor = new SwRefPortion;
else if (GetFnt()->IsMeta())
{
- pPor = new SwMetaPortion;
+ auto pMetaPor = new SwMetaPortion;
+
+ // set custom LO_EXT_SHADING color, if it exists
+ SwTextFrame const*const pFrame(rInf.GetTextFrame());
+ SwPosition aPosition(pFrame->MapViewToModelPos(rInf.GetIdx()));
+ SwPaM aPam(aPosition);
+ uno::Reference<text::XTextContent> const xRet(
+ SwUnoCursorHelper::GetNestedTextContent(
+ *aPam.GetNode().GetTextNode(), aPosition.nContent.GetIndex(), false) );
+ if (xRet.is())
+ {
+ const SwDoc & rDoc = rInf.GetTextFrame()->GetDoc();
+ static uno::Reference< uno::XComponentContext > xContext(
+ ::comphelper::getProcessComponentContext());
+
+ static uno::Reference< rdf::XURI > xODF_SHADING(
+ rdf::URI::createKnown(xContext, rdf::URIs::LO_EXT_SHADING), uno::UNO_SET_THROW);
+
+ uno::Reference<rdf::XDocumentMetadataAccess> xDocumentMetadataAccess(
+ rDoc.GetDocShell()->GetBaseModel(), uno::UNO_QUERY);
+
+ const css::uno::Reference<css::rdf::XResource> xSubject(xRet, uno::UNO_QUERY);
+ const uno::Reference<rdf::XRepository>& xRepository =
+ xDocumentMetadataAccess->getRDFRepository();
+ const uno::Reference<container::XEnumeration> xEnum(
+ xRepository->getStatements(xSubject, xODF_SHADING, nullptr), uno::UNO_SET_THROW);
+
+ while (xEnum->hasMoreElements())
+ {
+ rdf::Statement stmt;
+ if (!(xEnum->nextElement() >>= stmt)) {
+ throw uno::RuntimeException();
+ }
+ const uno::Reference<rdf::XLiteral> xObject(stmt.Object, uno::UNO_QUERY);
+ if (!xObject.is()) continue;
+ if (xEnum->hasMoreElements()) {
+ SAL_INFO("sw.uno", "ignoring other odf:shading statements");
+ }
+ Color rColor = Color::STRtoRGB(xObject->getValue());
+ pMetaPor->SetShadowColor(rColor);
+ break;
+ }
+ }
+ pPor = pMetaPor;
}
else
{
diff --git a/sw/source/core/text/txtfld.cxx b/sw/source/core/text/txtfld.cxx
index e150f7f489f1..c1375b52fe09 100644
--- a/sw/source/core/text/txtfld.cxx
+++ b/sw/source/core/text/txtfld.cxx
@@ -304,7 +304,8 @@ static SwFieldPortion * lcl_NewMetaPortion(SwTextAttr & rHint, const bool bPrefi
OSL_ENSURE(pField, "lcl_NewMetaPortion: no meta field?");
if (pField)
{
- pField->GetPrefixAndSuffix(bPrefix ? &fix : nullptr, bPrefix ? nullptr : &fix);
+ OUString color;
+ pField->GetPrefixAndSuffix(bPrefix ? &fix : nullptr, bPrefix ? nullptr : &fix, &color);
}
return new SwFieldPortion( fix );
}
diff --git a/sw/source/core/txtnode/fmtatr2.cxx b/sw/source/core/txtnode/fmtatr2.cxx
index 73eb992c5c97..afc82565c515 100644
--- a/sw/source/core/txtnode/fmtatr2.cxx
+++ b/sw/source/core/txtnode/fmtatr2.cxx
@@ -730,7 +730,7 @@ MetaField::MetaField(SwFormatMeta * const i_pFormat,
}
void MetaField::GetPrefixAndSuffix(
- OUString *const o_pPrefix, OUString *const o_pSuffix)
+ OUString *const o_pPrefix, OUString *const o_pSuffix, OUString *const o_pShadowsColor)
{
try
{
@@ -743,7 +743,7 @@ void MetaField::GetPrefixAndSuffix(
SwDocShell const * const pShell(pTextNode->GetDoc().GetDocShell());
const uno::Reference<frame::XModel> xModel(
pShell ? pShell->GetModel() : nullptr, uno::UNO_SET_THROW);
- getPrefixAndSuffix(xModel, xMetaField, o_pPrefix, o_pSuffix);
+ getPrefixAndSuffix(xModel, xMetaField, o_pPrefix, o_pSuffix, o_pShadowsColor);
}
}
catch (const uno::Exception&)
diff --git a/sw/source/core/unocore/unorefmk.cxx b/sw/source/core/unocore/unorefmk.cxx
index a88d2d4f8a98..3156ef10ed35 100644
--- a/sw/source/core/unocore/unorefmk.cxx
+++ b/sw/source/core/unocore/unorefmk.cxx
@@ -1422,7 +1422,7 @@ SwXMetaField::removeVetoableChangeListener(
}
static uno::Reference<rdf::XURI> const&
-lcl_getURI(const bool bPrefix)
+lcl_getURI(const sal_Int16 eKnown)
{
static uno::Reference< uno::XComponentContext > xContext(
::comphelper::getProcessComponentContext());
@@ -1432,7 +1432,18 @@ lcl_getURI(const bool bPrefix)
static uno::Reference< rdf::XURI > xOdfSuffix(
rdf::URI::createKnown(xContext, rdf::URIs::ODF_SUFFIX),
uno::UNO_SET_THROW);
- return bPrefix ? xOdfPrefix : xOdfSuffix;
+ static uno::Reference< rdf::XURI > xOdfShading(
+ rdf::URI::createKnown(xContext, rdf::URIs::LO_EXT_SHADING),
+ uno::UNO_SET_THROW);
+ switch (eKnown)
+ {
+ case rdf::URIs::ODF_PREFIX:
+ return xOdfPrefix;
+ case rdf::URIs::ODF_SUFFIX:
+ return xOdfSuffix;
+ default:
+ return xOdfShading;
+ }
}
static OUString
@@ -1464,7 +1475,7 @@ void
getPrefixAndSuffix(
const uno::Reference<frame::XModel>& xModel,
const uno::Reference<rdf::XMetadatable>& xMetaField,
- OUString *const o_pPrefix, OUString *const o_pSuffix)
+ OUString *const o_pPrefix, OUString *const o_pSuffix, OUString *const o_pShadingColor)
{
try {
const uno::Reference<rdf::XRepositorySupplier> xRS(
@@ -1475,11 +1486,15 @@ getPrefixAndSuffix(
xMetaField, uno::UNO_QUERY_THROW);
if (o_pPrefix)
{
- *o_pPrefix = lcl_getPrefixOrSuffix(xRepo, xMeta, lcl_getURI(true));
+ *o_pPrefix = lcl_getPrefixOrSuffix(xRepo, xMeta, lcl_getURI(rdf::URIs::ODF_PREFIX));
}
if (o_pSuffix)
{
- *o_pSuffix = lcl_getPrefixOrSuffix(xRepo, xMeta, lcl_getURI(false));
+ *o_pSuffix = lcl_getPrefixOrSuffix(xRepo, xMeta, lcl_getURI(rdf::URIs::ODF_SUFFIX));
+ }
+ if (o_pShadingColor)
+ {
+ *o_pShadingColor = lcl_getPrefixOrSuffix(xRepo, xMeta, lcl_getURI(rdf::URIs::LO_EXT_SHADING));
}
} catch (uno::RuntimeException &) {
throw;
@@ -1506,7 +1521,7 @@ SwXMetaField::getPresentation(sal_Bool bShowCommand)
const OUString content( getString() );
OUString prefix;
OUString suffix;
- getPrefixAndSuffix(GetModel(), this, &prefix, &suffix);
+ getPrefixAndSuffix(GetModel(), this, &prefix, &suffix, nullptr);
return prefix + content + suffix;
}
}
diff --git a/unoxml/source/rdf/CURI.cxx b/unoxml/source/rdf/CURI.cxx
index 0a154d037f8e..9a5a5b677831 100644
--- a/unoxml/source/rdf/CURI.cxx
+++ b/unoxml/source/rdf/CURI.cxx
@@ -94,6 +94,8 @@ const char s_nsPkg [] =
"http://docs.oasis-open.org/ns/office/1.2/meta/pkg#";
const char s_nsODF [] =
"http://docs.oasis-open.org/ns/office/1.2/meta/odf#";
+const char s_nsLO_EXT [] =
+ "urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0odf#";
void CURI::initFromConstant(const sal_Int16 i_Constant)
{
@@ -697,6 +699,11 @@ void CURI::initFromConstant(const sal_Int16 i_Constant)
ln = "StylesFile";
break;
+ case css::rdf::URIs::LO_EXT_SHADING:
+ ns = s_nsLO_EXT;
+ ln = "shading";
+ break;
+
default:
throw css::lang::IllegalArgumentException(
"CURI::initialize: invalid URIs constant argument", *this, 0);