diff --git a/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng b/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng
index e8e2c5be98e1..79bb67d7da17 100644
--- a/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng
+++ b/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng
@@ -3125,14 +3125,6 @@ xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.
-
-
-
-
-
-
-
-
diff --git a/sw/qa/extras/layout/data/fomargin.fodt b/sw/qa/extras/layout/data/fomargin.fodt
new file mode 100644
index 000000000000..1c051a6f487f
--- /dev/null
+++ b/sw/qa/extras/layout/data/fomargin.fodt
@@ -0,0 +1,114 @@
+
+
+ 2024-12-11T07:03:00.500708679LibreOfficeDev/25.8.0.0.alpha0$Linux_X86_64 LibreOffice_project/5a9171d8f0e90485b76a33f057ddc8edc329571e2024-12-11T07:06:14.721290230PT3M15S2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A A
+
+
+
\ No newline at end of file
diff --git a/sw/qa/extras/layout/layout5.cxx b/sw/qa/extras/layout/layout5.cxx
index 35dc2fe89638..1ad056f4b2a7 100644
--- a/sw/qa/extras/layout/layout5.cxx
+++ b/sw/qa/extras/layout/layout5.cxx
@@ -1371,6 +1371,32 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, testTdf153136)
// CPPUNIT_ASSERT_GREATER(large, height);
}
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter5, testFoMargin)
+{
+ createSwDoc("fomargin.fodt");
+ auto pXmlDoc = parseLayoutDump();
+
+ auto nPage1Width
+ = getXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/bounds", "width").toInt32();
+ CPPUNIT_ASSERT_GREATER(sal_Int32(9600), nPage1Width);
+ CPPUNIT_ASSERT_LESS(sal_Int32(9700), nPage1Width);
+
+ auto nPage1Height
+ = getXPath(pXmlDoc, "/root/page[1]/body/txt[1]/infos/bounds", "height").toInt32();
+ CPPUNIT_ASSERT_GREATER(sal_Int32(13800), nPage1Height);
+ CPPUNIT_ASSERT_LESS(sal_Int32(14000), nPage1Height);
+
+ auto nPage2Width
+ = getXPath(pXmlDoc, "/root/page[2]/body/txt[1]/infos/bounds", "width").toInt32();
+ CPPUNIT_ASSERT_GREATER(sal_Int32(9600), nPage2Width);
+ CPPUNIT_ASSERT_LESS(sal_Int32(9700), nPage2Width);
+
+ auto nPage2Height
+ = getXPath(pXmlDoc, "/root/page[2]/body/txt[1]/infos/bounds", "height").toInt32();
+ CPPUNIT_ASSERT_GREATER(sal_Int32(13100), nPage2Height);
+ CPPUNIT_ASSERT_LESS(sal_Int32(13400), nPage2Height);
+}
+
CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/qa/extras/odfexport/data/tdf163913.fodt b/sw/qa/extras/odfexport/data/tdf163913.fodt
index a0e88fe0379d..a84af1dcb1a2 100644
--- a/sw/qa/extras/odfexport/data/tdf163913.fodt
+++ b/sw/qa/extras/odfexport/data/tdf163913.fodt
@@ -86,7 +86,7 @@
-
+
@@ -128,4 +128,4 @@
6em loext:margin-right
-
\ No newline at end of file
+
diff --git a/xmloff/source/text/txtprmap.cxx b/xmloff/source/text/txtprmap.cxx
index cd362b98ede6..0d4435025f46 100644
--- a/xmloff/source/text/txtprmap.cxx
+++ b/xmloff/source/text/txtprmap.cxx
@@ -117,21 +117,13 @@ XMLPropertyMapEntry constexpr aXMLParaPropMap[] =
// RES_LR_SPACE
// !!! DO NOT REORDER THE MARGINS !!!
+ // - The all margin implementation enumerates the margin properties by relative index.
MP_E( PROP_ParaLeftMargin, XML_NAMESPACE_FO, XML_MARGIN, XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARAMARGINALL ),
MP_E( PROP_ParaLeftMarginRelative, XML_NAMESPACE_FO, XML_MARGIN, XML_TYPE_PERCENT16, CTF_PARAMARGINALL_REL ),
- MAP_EXT( PROP_ParaLeftMarginUnit, XML_NAMESPACE_LO_EXT, XML_MARGIN, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
- MAP_EXT_I( PROP_ParaLeftMargin, XML_NAMESPACE_LO_EXT, XML_MARGIN, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARAMARGINALL ),
- MAP_EXT_I( PROP_ParaLeftMarginRelative, XML_NAMESPACE_LO_EXT, XML_MARGIN, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT16, CTF_PARAMARGINALL_REL ),
MP_E( PROP_ParaLeftMargin, XML_NAMESPACE_FO, XML_MARGIN_LEFT, XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARALEFTMARGIN ),
MP_E( PROP_ParaLeftMarginRelative, XML_NAMESPACE_FO, XML_MARGIN_LEFT, XML_TYPE_PERCENT16, CTF_PARALEFTMARGIN_REL ),
- MAP_EXT( PROP_ParaLeftMarginUnit, XML_NAMESPACE_LO_EXT, XML_MARGIN_LEFT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
- MAP_EXT_I( PROP_ParaLeftMargin, XML_NAMESPACE_FO, XML_MARGIN_LEFT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARALEFTMARGIN ),
- MAP_EXT_I( PROP_ParaLeftMarginRelative, XML_NAMESPACE_FO, XML_MARGIN_LEFT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT16, CTF_PARALEFTMARGIN_REL ),
MP_E( PROP_ParaRightMargin, XML_NAMESPACE_FO, XML_MARGIN_RIGHT, XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARARIGHTMARGIN ),
MP_E( PROP_ParaRightMarginRelative, XML_NAMESPACE_FO, XML_MARGIN_RIGHT, XML_TYPE_PERCENT16, CTF_PARARIGHTMARGIN_REL ),
- MAP_EXT( PROP_ParaRightMarginUnit, XML_NAMESPACE_LO_EXT, XML_MARGIN_RIGHT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
- MAP_EXT_I( PROP_ParaRightMargin, XML_NAMESPACE_FO, XML_MARGIN_RIGHT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARARIGHTMARGIN ),
- MAP_EXT_I( PROP_ParaRightMarginRelative, XML_NAMESPACE_FO, XML_MARGIN_RIGHT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT16, CTF_PARARIGHTMARGIN_REL ),
// RES_UL_SPACE
MP_E( PROP_ParaTopMargin, XML_NAMESPACE_FO, XML_MARGIN_TOP, XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARATOPMARGIN ),
MP_E( PROP_ParaTopMarginRelative, XML_NAMESPACE_FO, XML_MARGIN_TOP, XML_TYPE_PERCENT16, CTF_PARATOPMARGIN_REL ),
@@ -375,9 +367,6 @@ XMLPropertyMapEntry constexpr aXMLParaPropMap[] =
MP_E( PROP_ParaFirstLineIndent, XML_NAMESPACE_FO, XML_TEXT_INDENT, XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARAFIRSTLINE ),
MP_E( PROP_ParaFirstLineIndentRelative, XML_NAMESPACE_FO, XML_TEXT_INDENT, XML_TYPE_PERCENT, CTF_PARAFIRSTLINE_REL ),
- MAP_EXT( PROP_ParaFirstLineIndentUnit, XML_NAMESPACE_LO_EXT, XML_TEXT_INDENT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
- MAP_EXT_I( PROP_ParaFirstLineIndent, XML_NAMESPACE_LO_EXT, XML_TEXT_INDENT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARAFIRSTLINE ),
- MAP_EXT_I( PROP_ParaFirstLineIndentRelative, XML_NAMESPACE_LO_EXT, XML_TEXT_INDENT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT, CTF_PARAFIRSTLINE_REL ),
MP_E( PROP_ParaIsAutoFirstLineIndent, XML_NAMESPACE_STYLE, XML_AUTO_TEXT_INDENT, XML_TYPE_BOOL, 0 ),
// RES_PAGEDESC
MP_E( PROP_PageDescName, XML_NAMESPACE_STYLE, XML_MASTER_PAGE_NAME, MID_FLAG_SPECIAL_ITEM|XML_TYPE_STYLENAME, CTF_PAGEDESCNAME ),
@@ -479,6 +468,16 @@ XMLPropertyMapEntry constexpr aXMLParaPropMap[] =
MAP_EXT( PROP_ListAutoFormat, XML_NAMESPACE_LO_EXT, XML_MARKER_STYLE_NAME, XML_TYPE_STYLENAME|XML_TYPE_PROP_PARAGRAPH, 0 ),
+ MAP_EXT( PROP_ParaLeftMarginUnit, XML_NAMESPACE_LO_EXT, XML_MARGIN_LEFT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
+ MAP_EXT_I( PROP_ParaLeftMargin, XML_NAMESPACE_LO_EXT, XML_MARGIN_LEFT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARALEFTMARGIN ),
+ MAP_EXT_I( PROP_ParaLeftMarginRelative, XML_NAMESPACE_LO_EXT, XML_MARGIN_LEFT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT16, CTF_PARALEFTMARGIN_REL ),
+ MAP_EXT( PROP_ParaRightMarginUnit, XML_NAMESPACE_LO_EXT, XML_MARGIN_RIGHT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
+ MAP_EXT_I( PROP_ParaRightMargin, XML_NAMESPACE_LO_EXT, XML_MARGIN_RIGHT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARARIGHTMARGIN ),
+ MAP_EXT_I( PROP_ParaRightMarginRelative, XML_NAMESPACE_LO_EXT, XML_MARGIN_RIGHT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT16, CTF_PARARIGHTMARGIN_REL ),
+ MAP_EXT( PROP_ParaFirstLineIndentUnit, XML_NAMESPACE_LO_EXT, XML_TEXT_INDENT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_UNIT_MEASURE|MID_FLAG_MULTI_PROPERTY, 0 ),
+ MAP_EXT_I( PROP_ParaFirstLineIndent, XML_NAMESPACE_LO_EXT, XML_TEXT_INDENT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_MEASURE|MID_FLAG_MULTI_PROPERTY, CTF_PARAFIRSTLINE ),
+ MAP_EXT_I( PROP_ParaFirstLineIndentRelative, XML_NAMESPACE_LO_EXT, XML_TEXT_INDENT, XML_TYPE_PROP_PARAGRAPH|XML_TYPE_PERCENT, CTF_PARAFIRSTLINE_REL ),
+
M_END()
};