cui/source/inc/paragrph.hxx                                 |    2 
 cui/source/tabpages/paragrph.cxx                            |   12 
 cui/uiconfig/ui/textflowpage.ui                             |   55 ++-
 editeng/source/items/paraitem.cxx                           |   13 
 include/editeng/editrids.hrc                                |    1 
 include/editeng/hyphenzoneitem.hxx                          |    6 
 include/editeng/memberids.h                                 |    3 
 include/linguistic/lngprophelp.hxx                          |    4 
 include/sfx2/msg.hxx                                        |    2 
 include/unotools/linguprops.hxx                             |    4 
 include/xmloff/xmltoken.hxx                                 |    1 
 lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx       |   82 ++++
 linguistic/source/lngprophelp.cxx                           |   14 
 offapi/com/sun/star/style/ParagraphProperties.idl           |   16 
 schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng |   17 
 svx/sdi/svxitems.sdi                                        |    1 
 sw/inc/inspectorproperties.hrc                              |    1 
 sw/inc/unoprnms.hxx                                         |    2 
 sw/qa/extras/layout/data/tdf158885_compound-remain.fodt     |    1 
 sw/qa/extras/layout/data/tdf158885_not_compound-remain.fodt |    1 
 sw/qa/extras/layout/data/tdf170177_compound-push.fodt       |  206 ++++++++++++
 sw/qa/extras/layout/data/tdf170177_not_compound-push.fodt   |  196 +++++++++++
 sw/qa/extras/layout/layout2.cxx                             |   86 +++++
 sw/qa/uitest/styleInspector/styleInspector.py               |   20 -
 sw/qa/uitest/styleInspector/tdf137513.py                    |    2 
 sw/source/core/text/guess.cxx                               |    4 
 sw/source/core/text/inftxt.cxx                              |   44 +-
 sw/source/core/unocore/unomapproperties.hxx                 |    2 
 sw/source/uibase/sidebar/WriterInspectorTextPanel.cxx       |    2 
 xmloff/inc/xmlprop.hxx                                      |    2 
 xmloff/source/core/xmltoken.cxx                             |    1 
 xmloff/source/text/txtprmap.cxx                             |    3 
 xmloff/source/token/tokens.txt                              |    1 
 33 files changed, 747 insertions(+), 60 deletions(-)

New commits:
commit 391ea3bcb54698461bfb0f7be996cf95b91ebb0f
Author:     László Németh <[email protected]>
AuthorDate: Mon Dec 29 10:46:49 2025 +0100
Commit:     László Németh <[email protected]>
CommitDate: Wed Dec 31 22:54:05 2025 +0100

    tdf#170177 cui offapi sw xmloff: hyphenate at constituent boundaries
    
    Add new minimum character limit paragraph property to limit
    hyphenation left to the compound constituent boundaries:
    
      com::sun::star::text::ParaHyphenationCompoundMinTrailingChars
    
    – With the previous option for the hyphenation right to the
      constituent boundary, this new option allow to limit or disable
      hyphenation completely inside the compound constituents, or
      hyphenate only at constituent boundaries, with or without
      inside the suffix of the word or constituents;
    
    – xmloff: add "no-limit" to loext:hyphenation-compound-push-char-count
      and loext:hyphenation-compound-push-char-count;
    
    – "no-limit" values of this and the *LeadingChars option mean
      a maximum value. When both *LeadingChars and *TrailingChars
      got "no-limit", hyphenation before and inside the suffixes are
      forbidden, i.e. it is allowed only at constituent boundaries;
    
    – textflowpage.ui: set max character count to 99, in both options;
    
    – fix ParaHyphenationCompoundMinLeadingChars implementation for
      compound words with multiple constituents, when the middle word(s)
      are shorter, than the limit (e.g. Hungarian "tűz|kő|pattintás"
      wasn't hyphenated as "tűzkő-pattintás", only as "tűz-kőpattintás").
    
    Follow-up to commit 3a332d9f1cacb3c6f81fcf6c08afa51d091ddff4
    "tdf#158885 cui offapi sw xmloff: fix hyphenation at stem boundary"
    and commit c899d3608d30f3ab4c2bc193c1fcd765221614a4
    "tdf#158885 sw: don't hyphenate right after a stem boundary".
    
    Change-Id: I0b71562727332217364f9ace85e8ac6ea3abc8b1
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/196345
    Reviewed-by: László Németh <[email protected]>
    Tested-by: Jenkins

diff --git a/cui/source/inc/paragrph.hxx b/cui/source/inc/paragrph.hxx
index 8ab678c83f6f..9d634d879ca2 100644
--- a/cui/source/inc/paragrph.hxx
+++ b/cui/source/inc/paragrph.hxx
@@ -266,6 +266,8 @@ private:
     std::unique_ptr<weld::SpinButton> m_xExtHyphenAfterBox;
     std::unique_ptr<weld::Label> m_xCompoundBeforeText;
     std::unique_ptr<weld::SpinButton> m_xExtCompoundHyphenBeforeBox;
+    std::unique_ptr<weld::Label> m_xCompoundAfterText;
+    std::unique_ptr<weld::SpinButton> m_xExtCompoundHyphenAfterBox;
     std::unique_ptr<weld::Label> m_xMaxHyphenLabel;
     std::unique_ptr<weld::SpinButton> m_xMaxHyphenEdit;
     std::unique_ptr<weld::Label> m_xMinWordLabel;
diff --git a/cui/source/tabpages/paragrph.cxx b/cui/source/tabpages/paragrph.cxx
index 3ed39ff47ac6..7133dd5017ad 100644
--- a/cui/source/tabpages/paragrph.cxx
+++ b/cui/source/tabpages/paragrph.cxx
@@ -1868,6 +1868,7 @@ bool SvxExtParagraphTabPage::FillItemSet( SfxItemSet* 
rOutSet )
          m_xExtHyphenBeforeBox->get_value_changed_from_saved() ||
          m_xExtHyphenAfterBox->get_value_changed_from_saved() ||
          m_xExtCompoundHyphenBeforeBox->get_value_changed_from_saved() ||
+         m_xExtCompoundHyphenAfterBox->get_value_changed_from_saved() ||
          m_xMaxHyphenEdit->get_value_changed_from_saved() ||
          m_xMinWordLength->get_value_changed_from_saved() ||
          m_aHyphenZone.get_value_changed_from_saved() ||
@@ -1892,6 +1893,7 @@ bool SvxExtParagraphTabPage::FillItemSet( SfxItemSet* 
rOutSet )
             aHyphen.GetMinLead() = 
static_cast<sal_uInt8>(m_xExtHyphenBeforeBox->get_value());
             aHyphen.GetMinTrail() = 
static_cast<sal_uInt8>(m_xExtHyphenAfterBox->get_value());
             aHyphen.GetCompoundMinLead() = 
static_cast<sal_uInt8>(m_xExtCompoundHyphenBeforeBox->get_value());
+            aHyphen.GetCompoundMinTrail() = 
static_cast<sal_uInt8>(m_xExtCompoundHyphenAfterBox->get_value());
             aHyphen.GetMinWordLength() = 
static_cast<sal_uInt8>(m_xMinWordLength->get_value());
         }
         aHyphen.GetMaxHyphens() = 
static_cast<sal_uInt8>(m_xMaxHyphenEdit->get_value());
@@ -2152,6 +2154,7 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* 
rSet )
         m_xExtHyphenBeforeBox->set_value(rHyphen.GetMinLead());
         m_xExtHyphenAfterBox->set_value(rHyphen.GetMinTrail());
         m_xExtCompoundHyphenBeforeBox->set_value(rHyphen.GetCompoundMinLead());
+        m_xExtCompoundHyphenAfterBox->set_value(rHyphen.GetCompoundMinTrail());
         m_xMaxHyphenEdit->set_value(rHyphen.GetMaxHyphens());
         m_xMinWordLength->set_value(rHyphen.GetMinWordLength());
         m_aHyphenZone.SetFieldUnit(eFUnit);
@@ -2200,9 +2203,11 @@ void SvxExtParagraphTabPage::Reset( const SfxItemSet* 
rSet )
     m_xExtHyphenBeforeBox->set_sensitive(bEnable);
     m_xExtHyphenAfterBox->set_sensitive(bEnable);
     m_xExtCompoundHyphenBeforeBox->set_sensitive(bEnable);
+    m_xExtCompoundHyphenAfterBox->set_sensitive(bEnable);
     m_xBeforeText->set_sensitive(bEnable);
     m_xAfterText->set_sensitive(bEnable);
     m_xCompoundBeforeText->set_sensitive(bEnable);
+    m_xCompoundAfterText->set_sensitive(bEnable);
     m_xMaxHyphenLabel->set_sensitive(bEnable);
     m_xMaxHyphenEdit->set_sensitive(bEnable);
     m_xMinWordLabel->set_sensitive(bEnable);
@@ -2499,6 +2504,7 @@ void SvxExtParagraphTabPage::ChangesApplied()
     m_xExtHyphenBeforeBox->save_value();
     m_xExtHyphenAfterBox->save_value();
     m_xExtCompoundHyphenBeforeBox->save_value();
+    m_xExtCompoundHyphenAfterBox->save_value();
     m_xMaxHyphenEdit->save_value();
     m_xMinWordLength->save_value();
     m_aHyphenZone.save_value();
@@ -2560,6 +2566,8 @@ 
SvxExtParagraphTabPage::SvxExtParagraphTabPage(weld::Container* pPage, weld::Dia
     , m_xExtHyphenAfterBox(m_xBuilder->weld_spin_button(u"spinLineBegin"_ustr))
     , 
m_xCompoundBeforeText(m_xBuilder->weld_label(u"labelCompoundLineEnd"_ustr))
     , 
m_xExtCompoundHyphenBeforeBox(m_xBuilder->weld_spin_button(u"spinCompoundLineEnd"_ustr))
+    , 
m_xCompoundAfterText(m_xBuilder->weld_label(u"labelCompoundLineBegin"_ustr))
+    , 
m_xExtCompoundHyphenAfterBox(m_xBuilder->weld_spin_button(u"spinCompoundLineBegin"_ustr))
     , m_xMaxHyphenLabel(m_xBuilder->weld_label(u"labelMaxNum"_ustr))
     , m_xMaxHyphenEdit(m_xBuilder->weld_spin_button(u"spinMaxNum"_ustr))
     , m_xMinWordLabel(m_xBuilder->weld_label(u"labelMinLen"_ustr))
@@ -2652,7 +2660,9 @@ 
SvxExtParagraphTabPage::SvxExtParagraphTabPage(weld::Container* pPage, weld::Dia
     m_xAfterText->set_sensitive(false);
     m_xExtHyphenAfterBox->set_sensitive(false);
     m_xCompoundBeforeText->set_sensitive(false);
+    m_xCompoundAfterText->set_sensitive(false);
     m_xExtCompoundHyphenBeforeBox->set_sensitive(false);
+    m_xExtCompoundHyphenAfterBox->set_sensitive(false);
     m_xMaxHyphenLabel->set_sensitive(false);
     m_xMaxHyphenEdit->set_sensitive(false);
     m_xMinWordLabel->set_sensitive(false);
@@ -2804,7 +2814,9 @@ void SvxExtParagraphTabPage::HyphenClickHdl()
     m_xAfterText->set_sensitive(bEnable);
     m_xExtHyphenAfterBox->set_sensitive(bEnable);
     m_xCompoundBeforeText->set_sensitive(bEnable);
+    m_xCompoundAfterText->set_sensitive(bEnable);
     m_xExtCompoundHyphenBeforeBox->set_sensitive(bEnable);
+    m_xExtCompoundHyphenAfterBox->set_sensitive(bEnable);
     m_xMaxHyphenLabel->set_sensitive(bEnable);
     m_xMaxHyphenEdit->set_sensitive(bEnable);
     m_xMinWordLabel->set_sensitive(bEnable);
diff --git a/cui/uiconfig/ui/textflowpage.ui b/cui/uiconfig/ui/textflowpage.ui
index 99dd498d15d3..c61e3b96871d 100644
--- a/cui/uiconfig/ui/textflowpage.ui
+++ b/cui/uiconfig/ui/textflowpage.ui
@@ -54,8 +54,8 @@
     <property name="page-increment">10</property>
   </object>
   <object class="GtkAdjustment" id="adjustment9">
-    <property name="lower">2</property>
-    <property name="upper">9</property>
+    <property name="lower">0</property>
+    <property name="upper">99</property>
     <property name="value">2</property>
     <property name="step-increment">1</property>
     <property name="page-increment">10</property>
@@ -80,6 +80,13 @@
     <property name="step-increment">1</property>
     <property name="page-increment">10</property>
   </object>
+  <object class="GtkAdjustment" id="adjustment14">
+    <property name="lower">0</property>
+    <property name="upper">99</property>
+    <property name="value">2</property>
+    <property name="step-increment">1</property>
+    <property name="page-increment">10</property>
+  </object>
   <!-- n-columns=2 n-rows=2 -->
   <object class="GtkGrid" id="TextFlowPage">
     <property name="visible">True</property>
@@ -141,7 +148,7 @@
               </object>
               <packing>
                 <property name="left-attach">0</property>
-                <property name="top-attach">5</property>
+                <property name="top-attach">6</property>
               </packing>
             </child>
             <child>
@@ -161,7 +168,7 @@
               </object>
               <packing>
                 <property name="left-attach">0</property>
-                <property name="top-attach">4</property>
+                <property name="top-attach">5</property>
               </packing>
             </child>
             <child>
@@ -175,7 +182,7 @@
                 <property name="truncate-multiline">True</property>
                 <child internal-child="accessible">
                   <object class="AtkObject" id="spinCompoundLineEnd-atkobject">
-                    <property name="AtkObject::accessible-description" 
translatable="yes" 
context="textflowpage|extended_tip|spinCompoundLineEnd">Enter the minimum 
number of characters of a compound word to leave at the end of the line before 
a hyphen is inserted.</property>
+                    <property name="AtkObject::accessible-description" 
translatable="yes" 
context="textflowpage|extended_tip|spinCompoundLineEnd">Enter the minimum 
number of characters of a compound word constituent to leave at the end of the 
line before a hyphen is inserted.</property>
                   </object>
                 </child>
               </object>
@@ -184,6 +191,26 @@
                 <property name="top-attach">3</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkSpinButton" id="spinCompoundLineBegin">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="halign">start</property>
+                <property name="margin-start">25</property>
+                <property name="activates_default">True</property>
+                <property name="adjustment">adjustment14</property>
+                <property name="truncate-multiline">True</property>
+                <child internal-child="accessible">
+                  <object class="AtkObject" 
id="spinCompoundLineBegin-atkobject">
+                    <property name="AtkObject::accessible-description" 
translatable="yes" 
context="textflowpage|extended_tip|spinCompoundLineBegin">Enter the minimum 
number of characters of a compound word constituent that must appear at the 
beginning of the line after the hyphen.</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="left-attach">0</property>
+                <property name="top-attach">4</property>
+              </packing>
+            </child>
             <child>
               <object class="GtkSpinButton" id="spinLineBegin">
                 <property name="visible">True</property>
@@ -266,6 +293,20 @@
                 <property name="top_attach">3</property>
               </packing>
             </child>
+            <child>
+              <object class="GtkLabel" id="labelCompoundLineBegin">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="halign">start</property>
+                <property name="label" translatable="yes" 
context="textflowpage|labelCompoundLineBegin">C_ompound characters at line 
begin</property>
+                <property name="use_underline">True</property>
+                <property 
name="mnemonic_widget">spinCompoundLineBegin</property>
+              </object>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="top_attach">4</property>
+              </packing>
+            </child>
             <child>
               <object class="GtkLabel" id="labelMaxNum">
                 <property name="visible">True</property>
@@ -277,7 +318,7 @@
               </object>
               <packing>
                 <property name="left-attach">1</property>
-                <property name="top-attach">4</property>
+                <property name="top-attach">5</property>
               </packing>
             </child>
             <child>
@@ -291,7 +332,7 @@
               </object>
               <packing>
                 <property name="left-attach">1</property>
-                <property name="top-attach">5</property>
+                <property name="top-attach">6</property>
               </packing>
             </child>
             <child>
diff --git a/editeng/source/items/paraitem.cxx 
b/editeng/source/items/paraitem.cxx
index 885ad3c9172f..fccc0aa00fcf 100644
--- a/editeng/source/items/paraitem.cxx
+++ b/editeng/source/items/paraitem.cxx
@@ -630,7 +630,8 @@ SvxHyphenZoneItem::SvxHyphenZoneItem( const bool bHyph, 
const sal_uInt16 nId ) :
     nTextHyphenZoneSpread(0),
     nKeepType(css::text::ParagraphHyphenationKeepType::COLUMN),
     bKeepLine(false),
-    nCompoundMinLead(0)
+    nCompoundMinLead(2),
+    nCompoundMinTrail(2)
 {
 }
 
@@ -688,6 +689,9 @@ bool    SvxHyphenZoneItem::QueryValue( uno::Any& rVal, 
sal_uInt8 nMemberId ) con
         case MID_HYPHEN_COMPOUND_MIN_LEAD:
             rVal <<= static_cast<sal_Int16>(nCompoundMinLead);
         break;
+        case MID_HYPHEN_COMPOUND_MIN_TRAIL:
+            rVal <<= static_cast<sal_Int16>(nCompoundMinTrail);
+        break;
     }
     return true;
 }
@@ -755,6 +759,9 @@ bool SvxHyphenZoneItem::PutValue( const uno::Any& rVal, 
sal_uInt8 nMemberId )
         case MID_HYPHEN_COMPOUND_MIN_LEAD:
             nCompoundMinLead = static_cast<sal_uInt8>(nNewVal);
         break;
+        case MID_HYPHEN_COMPOUND_MIN_TRAIL:
+            nCompoundMinTrail = static_cast<sal_uInt8>(nNewVal);
+        break;
     }
     return true;
 }
@@ -772,6 +779,7 @@ bool SvxHyphenZoneItem::operator==( const SfxPoolItem& 
rAttr ) const
             && rItem.nMinLead == nMinLead
             && rItem.nMinTrail == nMinTrail
             && rItem.nCompoundMinLead == nCompoundMinLead
+            && rItem.nCompoundMinTrail == nCompoundMinTrail
             && rItem.nMaxHyphens == nMaxHyphens
             && rItem.nMinWordLength == nMinWordLength
             && rItem.nTextHyphenZone == nTextHyphenZone
@@ -808,6 +816,7 @@ bool SvxHyphenZoneItem::GetPresentation
                     OUString::number( nMinLead ) + cpDelimTmp +
                     OUString::number( nMinTrail ) + cpDelimTmp +
                     OUString::number( nCompoundMinLead ) + cpDelimTmp +
+                    OUString::number( nCompoundMinTrail ) + cpDelimTmp +
                     OUString::number( nMaxHyphens ) + cpDelimTmp +
                     OUString::number( nMinWordLength ) + cpDelimTmp +
                     GetMetricText( nTextHyphenZone, eCoreUnit, ePresUnit, 
&rIntl ) +
@@ -856,6 +865,8 @@ bool SvxHyphenZoneItem::GetPresentation
                     cpDelimTmp +
                     
EditResId(RID_SVXITEMS_HYPHEN_COMPOUND_MINLEAD).replaceAll("%1", 
OUString::number(nCompoundMinLead)) +
                     cpDelimTmp +
+                    
EditResId(RID_SVXITEMS_HYPHEN_COMPOUND_MINTRAIL).replaceAll("%1", 
OUString::number(nCompoundMinTrail)) +
+                    cpDelimTmp +
                     EditResId(RID_SVXITEMS_HYPHEN_MAX).replaceAll("%1", 
OUString::number(nMaxHyphens)) +
                     cpDelimTmp +
                     EditResId(RID_SVXITEMS_HYPHEN_MINWORDLEN).replaceAll("%1", 
OUString::number(nMinWordLength));
diff --git a/include/editeng/editrids.hrc b/include/editeng/editrids.hrc
index 83713f7d15cd..7990ae9a1e10 100644
--- a/include/editeng/editrids.hrc
+++ b/include/editeng/editrids.hrc
@@ -242,6 +242,7 @@
 #define RID_SVXITEMS_HYPHEN_MINLEAD             
NC_("RID_SVXITEMS_HYPHEN_MINLEAD", "%1 characters at end of line")
 #define RID_SVXITEMS_HYPHEN_MINTRAIL            
NC_("RID_SVXITEMS_HYPHEN_MINTRAIL", "%1 characters at beginning of line")
 #define RID_SVXITEMS_HYPHEN_COMPOUND_MINLEAD    
NC_("RID_SVXITEMS_HYPHEN_COMPOUND_MINLEAD", "%1 compound word characters at end 
of line")
+#define RID_SVXITEMS_HYPHEN_COMPOUND_MINTRAIL   
NC_("RID_SVXITEMS_HYPHEN_COMPOUND_MINTRAIL", "%1 compound word characters at 
beginning of line")
 #define RID_SVXITEMS_HYPHEN_MAX                 NC_("RID_SVXITEMS_HYPHEN_MAX", 
"%1 hyphens")
 #define RID_SVXITEMS_HYPHEN_NO_CAPS_TRUE        
NC_("RID_SVXITEMS_HYPHEN_NO_CAPS_TRUE", "Not hyphenated CAPS")
 #define RID_SVXITEMS_HYPHEN_LAST_WORD_TRUE      
NC_("RID_SVXITEMS_HYPHEN_NO_CAPS_FALSE", "Not hyphenated last word")
diff --git a/include/editeng/hyphenzoneitem.hxx 
b/include/editeng/hyphenzoneitem.hxx
index 84f4ac333ecc..5e57f73ee156 100644
--- a/include/editeng/hyphenzoneitem.hxx
+++ b/include/editeng/hyphenzoneitem.hxx
@@ -47,7 +47,8 @@ class EDITENG_DLLPUBLIC SvxHyphenZoneItem final : public 
SfxPoolItem
     sal_uInt16 nTextHyphenZoneSpread; // don't force hyphenation at spread 
end, allow this extra white space
     sal_uInt8 nKeepType;        // avoid hyphenation across page etc., see 
ParagraphHyphenationKeep
     bool      bKeepLine : 1;    // if bKeep, shift the hyphenated word (true), 
or the full line
-    sal_uInt8 nCompoundMinLead; // min. characters between compound word 
boundary and hyphenation
+    sal_uInt8 nCompoundMinLead; // min. characters between left compound word 
boundary and hyphenation
+    sal_uInt8 nCompoundMinTrail; // min. characters between hyphenation and 
right compound word boundary
 
 public:
     static SfxPoolItem* CreateDefault();
@@ -88,6 +89,9 @@ public:
     sal_uInt8 &GetCompoundMinLead() { return nCompoundMinLead; }
     sal_uInt8 GetCompoundMinLead() const { return nCompoundMinLead; }
 
+    sal_uInt8 &GetCompoundMinTrail() { return nCompoundMinTrail; }
+    sal_uInt8 GetCompoundMinTrail() const { return nCompoundMinTrail; }
+
     sal_uInt8 &GetMaxHyphens() { return nMaxHyphens; }
     sal_uInt8 GetMaxHyphens() const { return nMaxHyphens; }
 
diff --git a/include/editeng/memberids.h b/include/editeng/memberids.h
index 944664bc0ecf..3fc273b9fc9b 100644
--- a/include/editeng/memberids.h
+++ b/include/editeng/memberids.h
@@ -58,7 +58,8 @@
 #define MID_HYPHEN_KEEP         12
 #define MID_HYPHEN_KEEP_TYPE    13
 #define MID_HYPHEN_COMPOUND_MIN_LEAD 14
-#define MID_HYPHEN_KEEP_LINE    15
+#define MID_HYPHEN_COMPOUND_MIN_TRAIL 15
+#define MID_HYPHEN_KEEP_LINE    16
 
 // SvxBoxInfoItem
 #define MID_HORIZONTAL          1
diff --git a/include/linguistic/lngprophelp.hxx 
b/include/linguistic/lngprophelp.hxx
index 19bef926c243..e28897e09e63 100644
--- a/include/linguistic/lngprophelp.hxx
+++ b/include/linguistic/lngprophelp.hxx
@@ -239,6 +239,7 @@ class PropertyHelper_Hyphen final :
     sal_Int16   nHyphMinLeading,
             nHyphMinTrailing,
             nHyphCompoundMinLeading,
+            nHyphCompoundMinTrailing,
             nHyphMinWordLength,
             nHyphTextHyphenZone;
     bool bNoHyphenateCaps;
@@ -247,6 +248,7 @@ class PropertyHelper_Hyphen final :
     sal_Int16   nResHyphMinLeading,
             nResHyphMinTrailing,
             nResHyphCompoundMinLeading,
+            nResHyphCompoundMinTrailing,
             nResHyphMinWordLength,
             nResHyphTextHyphenZone;
     bool bResNoHyphenateCaps;
@@ -275,6 +277,7 @@ public:
     sal_Int16   GetMinLeading() const               { return 
nResHyphMinLeading; }
     sal_Int16   GetMinTrailing() const              { return 
nResHyphMinTrailing; }
     sal_Int16   GetCompoundMinLeading() const       { return 
nResHyphCompoundMinLeading; }
+    sal_Int16   GetCompoundMinTrailing() const      { return 
nResHyphCompoundMinTrailing; }
     sal_Int16   GetMinWordLength() const            { return 
nResHyphMinWordLength; }
     bool IsNoHyphenateCaps() const { return bResNoHyphenateCaps; }
 };
@@ -299,6 +302,7 @@ public:
     sal_Int16   GetMinLeading() const;
     sal_Int16   GetMinTrailing() const;
     sal_Int16   GetCompoundMinLeading() const;
+    sal_Int16   GetCompoundMinTrailing() const;
     sal_Int16   GetMinWordLength() const;
     bool IsNoHyphenateCaps() const;
     /// @throws css::uno::RuntimeException
diff --git a/include/sfx2/msg.hxx b/include/sfx2/msg.hxx
index 21e108a4b2e3..7d6a39ef88e6 100644
--- a/include/sfx2/msg.hxx
+++ b/include/sfx2/msg.hxx
@@ -138,12 +138,12 @@ SFX_DECL_TYPE(5);
 SFX_DECL_TYPE(6);
 SFX_DECL_TYPE(7);
 SFX_DECL_TYPE(8);
-SFX_DECL_TYPE(9);  // for SvxHyphenZoneItem
 SFX_DECL_TYPE(10); // for SfxDocInfoItem
 SFX_DECL_TYPE(11);
 
 SFX_DECL_TYPE(13); // for SwAddPrinterItem, Sd...
 SFX_DECL_TYPE(14);
+SFX_DECL_TYPE(15); // for SvxHyphenZoneItem
 SFX_DECL_TYPE(16); // for SwDocDisplayItem
 SFX_DECL_TYPE(17); // for SvxAddressItem
 SFX_DECL_TYPE(23); // for SvxSearchItem
diff --git a/include/unotools/linguprops.hxx b/include/unotools/linguprops.hxx
index dd57dc089d05..3130157a5a3b 100644
--- a/include/unotools/linguprops.hxx
+++ b/include/unotools/linguprops.hxx
@@ -38,6 +38,7 @@ inline constexpr OUString UPN_IS_SPELL_WITH_DIGITS            
= u"IsSpellWithDig
 inline constexpr OUString UPN_HYPH_MIN_LEADING                = 
u"HyphMinLeading"_ustr;
 inline constexpr OUString UPN_HYPH_MIN_TRAILING               = 
u"HyphMinTrailing"_ustr;
 inline constexpr OUString UPN_HYPH_COMPOUND_MIN_LEADING       = 
u"HyphCompoundMinLeading"_ustr;
+inline constexpr OUString UPN_HYPH_COMPOUND_MIN_TRAILING      = 
u"HyphCompoundMinTrailing"_ustr;
 inline constexpr OUString UPN_HYPH_MIN_WORD_LENGTH            = 
u"HyphMinWordLength"_ustr;
 inline constexpr OUString UPN_HYPH_NO_CAPS                    = 
u"HyphNoCaps"_ustr;
 inline constexpr OUString UPN_HYPH_NO_LAST_WORD               = 
u"HyphNoLastWord"_ustr;
@@ -122,7 +123,8 @@ inline constexpr OUString UPN_IS_GRAMMAR_INTERACTIVE        
  = u"IsInteractiveG
 #define UPH_HYPH_KEEP                       38
 #define UPH_HYPH_KEEP_TYPE                  39
 #define UPH_HYPH_COMPOUND_MIN_LEADING       40
-#define UPH_HYPH_KEEP_LINE                  41
+#define UPH_HYPH_COMPOUND_MIN_TRAILING      41
+#define UPH_HYPH_KEEP_LINE                  42
 
 #ifdef __GNUC__
 #pragma GCC diagnostic pop
diff --git a/include/xmloff/xmltoken.hxx b/include/xmloff/xmltoken.hxx
index 1a1e23730e8f..18d855cb5a6d 100644
--- a/include/xmloff/xmltoken.hxx
+++ b/include/xmloff/xmltoken.hxx
@@ -1075,6 +1075,7 @@ namespace xmloff::token {
         XML_HYPHENATION_ZONE_PAGE,
         XML_HYPHENATION_ZONE_SPREAD,
         XML_HYPHENATION_COMPOUND_REMAIN_CHAR_COUNT,
+        XML_HYPHENATION_COMPOUND_PUSH_CHAR_COUNT,
         XML_I,
         XML_ICON,
         XML_ICON_SET,
diff --git a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx 
b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx
index c447451bc981..4d6d4b1e6719 100644
--- a/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx
+++ b/lingucomponent/source/hyphenator/hyphen/hyphenimp.cxx
@@ -346,6 +346,7 @@ hyphenation_result getHyphens(std::u16string_view word, 
const HDInfo& hdInfo, sa
     HyphenDict* dict = hdInfo.aPtr;
     const bool failed = 0 != hnj_hyphen_hyphenate3( dict, encWord.getStr(), n, 
hyphens.get(), nullptr,
                 &rep, &pos, &cut, minLead, minTrail,
+                // TODO add "no-limit"/0 clh/crh support to libhyphen, also 
add minCompoundLead/Trail support
                 std::max<sal_Int16>(dict->clhmin, 2) + std::max(0, minLead  - 
std::max<sal_Int16>(dict->lhmin, 2)),
                 std::max<sal_Int16>(dict->crhmin, 2) + std::max(0, minTrail - 
std::max<sal_Int16>(dict->rhmin, 2)) );
     return { n, failed, rep, pos, cut, std::move(hyphens) }; // buffers will 
free in dtor
@@ -390,6 +391,7 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
     sal_Int16 minTrail = rHelper.GetMinTrailing();
     sal_Int16 minLead = rHelper.GetMinLeading();
     sal_Int16 minCompoundLead = rHelper.GetCompoundMinLeading();
+    sal_Int16 minCompoundTrail = rHelper.GetCompoundMinTrailing();
     sal_Int16 minLen = rHelper.GetMinWordLength();
     bool bNoHyphenateCaps = rHelper.IsNoHyphenateCaps();
 
@@ -399,6 +401,10 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
         int nHyphenationPos = -1;
         int nHyphenationPosAlt = -1;
         int nHyphenationPosAltHyph = -1;
+        int nPrevHyphenationPos = -1;
+        int nPrevHyphenationPosAlt = -1;
+        int nPrevHyphenationPosAltHyph = -1;
+        int nCompoundHyphenationPos = -1;
 
         // hyphenate the word with that dictionary
         rtl_TextEncoding eEnc = pHDInfo->eEnc;
@@ -432,6 +438,8 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
         {
             int leftrep = 0;
             bool hit = (result.n >= minLen);
+            bool compoundhit = (result.n >= 1) && (result.hyphens[i] & 1);;
+            bool bPrevCompound = false;
             if (!result.rep || !result.rep[i])
             {
                 hit = hit && (result.hyphens[i] & 1) && (i < Leading);
@@ -455,11 +463,22 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
                 hit = hit && ((i + leftrep - result.pos[i]) >= (minLead-1) );
                 hit = hit && ((result.n - i - 1 + sal::static_int_cast< 
sal_sSize >(strlen(result.rep[i])) - leftrep - 1) >= minTrail);
             }
-            if (hit)
+            if (hit || compoundhit)
             {
-                // skip hyphenation right after stem boundaries in compound 
words
+                // skip hyphenation inside compound constituents right after 
constituent boundaries in compound words
                 // if minCompoundLead > 2 (default value: less than 
n=minCompoundLead character distance)
-                if ( bCompoundHyphenation && minCompoundLead > 2 && 
nHyphenationPos > -1 && i - nHyphenationPos < minCompoundLead )
+                // or always skip hyphenation inside compound constituents, if 
minCompoundLead == 0,
+                // also skip hyphenation inside compound constituents right 
before constituent boundaries in compound words
+                // or always skip hyphenation inside compound consituents, if 
minCompoundTrail == 0
+                // if both minCompoundLead and minCompoundTrail == 0, don't 
hyphenate inside suffixes, too
+                if ( bCompoundHyphenation && (nCompoundHyphenationPos > -1 || 
minCompoundLead == 0 || minCompoundTrail > 2 || minCompoundTrail == 0 ) &&
+                        // check minimal distance from the left constituent 
boundary
+                        ( ( minCompoundLead > 2 && i - nCompoundHyphenationPos 
< minCompoundLead ) ||
+                        // check minimal distance from the right constituent 
boundary
+                        ( minCompoundTrail > 2 && i - nCompoundHyphenationPos 
< minCompoundTrail ) ||
+                        // special value: zero compound limit means forbidden 
hyphenation
+                        // inside (stems of) compound constituents
+                        minCompoundLead == 0 || minCompoundTrail == 0 ) )
                 {
                     uno::Reference< XLinguServiceManager2 > xLngSvcMgr( 
GetLngSvcMgr_Impl() );
                     uno::Reference< XSpellChecker1 > xSpell;
@@ -575,6 +594,7 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
                         {
                             sal_Int32 nLetters = 0; // count not separator 
characters
                             sal_Int32 nSepPos = -1; // position of last 
character | used for stem boundaries
+                            sal_Int32 nSepLetterPos = -1; // letter position 
of the character associated to nSepPos
                             bool bWeightedSep = false; // double separator || 
= weighted stem boundary
                             sal_Int32 j = 0;
                             for (; j < sStems.getLength() && nLetters <= i; 
j++)
@@ -583,26 +603,55 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
                                 {
                                     bWeightedSep = nSepPos > -1 && (j - 1 == 
nSepPos);
                                     nSepPos = j;
+                                    nSepLetterPos = nLetters;
                                 }
                                 else if ( sStems[j] != '-' && sStems[j] != '=' 
&& sStems[j] != '*' )
                                     ++nLetters;
                             }
-                            // skip break points near stem boundaries
-                            if (
+                            // skip break points near after the stem boundaries
+                            if ( hit &&
+                                // too close to the left break point or 
special case?
+                                ( i - nCompoundHyphenationPos < 
minCompoundLead || minCompoundLead == 0 ) &&
                                 // there is a stem boundary before the actual 
break point
                                 nSepPos > -1 &&
                                 // and the break point is within a stem, i.e. 
not in the
-                                // suffix of the last stem
-                                i < aWord.getLength() - nSuffixLen - 1 &&
+                                // suffix of the last stem or both 
minCompoundLead and
+                                // minCompoundTrail == 0, i.e. hyphenation is 
allowed only
+                                // at compound constituent boundaries
+                                ( i < aWord.getLength() - nSuffixLen - 1 ||
+                                    ( minCompoundLead == 0 && minCompoundTrail 
== 0) ) &&
                                 // and it is not another stem boundary
                                 j + 1 < sStems.getLength() &&
-                                ( sStems[j + 1] != u'|' ||
+                                ( sStems[j] != u'|' ||
                                 // except if it's only the previous was a 
weighted one
-                                    ( bWeightedSep && ( j + 2 == 
sStems.getLength() ||
-                                                        sStems[j + 2] != u'|' 
) ) ) )
+                                    ( bWeightedSep && ( j + 1 == 
sStems.getLength() ||
+                                                        sStems[j + 1] != u'|' 
) ) ) )
                             {
                                 continue;
                             }
+                            // skip break points near before the stem 
boundaries
+                            // (hit is not mandatory, only compondhit, because 
the
+                            // compound boundary can be after the lead limit)
+                            if (!hit &&
+                                // too close to the right break point?
+                                ( i - nCompoundHyphenationPos < 
minCompoundTrail || minCompoundTrail == 0 ) &&
+                                // and the break point is within a stem, i.e. 
not in the
+                                // suffix of the last stem suffix or both 
minCompoundLead and
+                                // minCompoundTrail == 0, i.e. hyphenation is 
allowed only
+                                // at compound constituent boundaries
+                                ( i < aWord.getLength() - nSuffixLen - 1 ||
+                                    ( minCompoundLead == 0 && minCompoundTrail 
== 0) ) &&
+                                // and it is a stem boundary
+                                j + 1 < sStems.getLength() && sStems[j+1] == 
u'|' &&
+                                // the previous break point is not a boundary
+                                (nSepPos == -1 || nCompoundHyphenationPos != 
nSepLetterPos - 1 ) )
+                            {
+                                nHyphenationPos = nPrevHyphenationPos;
+                                nHyphenationPosAlt = nPrevHyphenationPosAlt;
+                                nHyphenationPosAltHyph = 
nPrevHyphenationPosAltHyph;
+                                continue;
+                            }
+                            bPrevCompound = nSepPos == j || nSepPos == j - 1;
                         }
                         else
                             // not a compound word
@@ -613,9 +662,20 @@ Reference< XHyphenatedWord > SAL_CALL 
Hyphenator::hyphenate( const OUString& aWo
                         bCompoundHyphenation = false;
                 }
 
-                nHyphenationPos = i;
+                nCompoundHyphenationPos = i;
+                if (hit)
+                {
+                    if ( bPrevCompound )
+                        nPrevHyphenationPos = nHyphenationPos;
+                    nHyphenationPos = i;
+                }
                 if (result.rep && result.rep[i])
                 {
+                    if ( bPrevCompound )
+                    {
+                        nPrevHyphenationPosAlt = nHyphenationPosAlt;
+                        nPrevHyphenationPosAltHyph = nHyphenationPosAltHyph;
+                    }
                     nHyphenationPosAlt = i - result.pos[i];
                     nHyphenationPosAltHyph = i + leftrep - result.pos[i];
                 }
diff --git a/linguistic/source/lngprophelp.cxx 
b/linguistic/source/lngprophelp.cxx
index 6cd56c11f5d7..833edabcc96c 100644
--- a/linguistic/source/lngprophelp.cxx
+++ b/linguistic/source/lngprophelp.cxx
@@ -492,6 +492,7 @@ void PropertyHelper_Hyphen::SetDefaultValues()
     nResHyphMinLeading      = nHyphMinLeading       = 2;
     nResHyphMinTrailing     = nHyphMinTrailing      = 2;
     nResHyphCompoundMinLeading = nHyphCompoundMinLeading = 2;
+    nResHyphCompoundMinTrailing = nHyphCompoundMinTrailing = 2;
     nResHyphMinWordLength   = nHyphMinWordLength    = 0;
     nResHyphTextHyphenZone  = nHyphTextHyphenZone   = 0;
     bResNoHyphenateCaps = bNoHyphenateCaps = false;
@@ -528,6 +529,11 @@ void PropertyHelper_Hyphen::GetCurrentValues()
             pnVal    = &nHyphCompoundMinLeading;
             pnResVal = &nResHyphCompoundMinLeading;
         }
+        if ( rPropName == UPN_HYPH_COMPOUND_MIN_TRAILING )
+        {
+            pnVal    = &nHyphCompoundMinTrailing;
+            pnResVal = &nResHyphCompoundMinTrailing;
+        }
         else if ( rPropName == UPN_HYPH_MIN_WORD_LENGTH )
         {
             pnVal    = &nHyphMinWordLength;
@@ -571,6 +577,7 @@ bool PropertyHelper_Hyphen::propertyChange_Impl( const 
PropertyChangeEvent& rEvt
             case UPH_HYPH_MIN_LEADING     : pnVal = &nHyphMinLeading; break;
             case UPH_HYPH_MIN_TRAILING    : pnVal = &nHyphMinTrailing; break;
             case UPH_HYPH_COMPOUND_MIN_LEADING : pnVal = 
&nHyphCompoundMinLeading; break;
+            case UPH_HYPH_COMPOUND_MIN_TRAILING : pnVal = 
&nHyphCompoundMinTrailing; break;
             case UPH_HYPH_MIN_WORD_LENGTH : pnVal = &nHyphMinWordLength; break;
             case UPH_HYPH_ZONE            : pnVal = &nHyphTextHyphenZone; 
break;
             case UPH_HYPH_NO_CAPS : pbVal = &bNoHyphenateCaps; break;
@@ -626,6 +633,8 @@ void PropertyHelper_Hyphen::SetTmpPropVals( const 
PropertyValues &rPropVals )
             pnResVal = &nResHyphMinTrailing;
         if ( rVal.Name == UPN_HYPH_COMPOUND_MIN_LEADING )
             pnResVal = &nResHyphCompoundMinLeading;
+        if ( rVal.Name == UPN_HYPH_COMPOUND_MIN_TRAILING )
+            pnResVal = &nResHyphCompoundMinTrailing;
         else if ( rVal.Name == UPN_HYPH_MIN_WORD_LENGTH )
             pnResVal = &nResHyphMinWordLength;
         else if ( rVal.Name == UPN_HYPH_ZONE )
@@ -718,6 +727,11 @@ sal_Int16 
PropertyHelper_Hyphenation::GetCompoundMinLeading() const
     return mxPropHelper->GetCompoundMinLeading();
 }
 
+sal_Int16 PropertyHelper_Hyphenation::GetCompoundMinTrailing() const
+{
+    return mxPropHelper->GetCompoundMinTrailing();
+}
+
 sal_Int16 PropertyHelper_Hyphenation::GetMinWordLength() const
 {
     return mxPropHelper->GetMinWordLength();
diff --git a/offapi/com/sun/star/style/ParagraphProperties.idl 
b/offapi/com/sun/star/style/ParagraphProperties.idl
index c18217a1bf79..6e391ee56096 100644
--- a/offapi/com/sun/star/style/ParagraphProperties.idl
+++ b/offapi/com/sun/star/style/ParagraphProperties.idl
@@ -563,7 +563,7 @@ published service ParagraphProperties
 
             @see ParaLetterSpacingMaximum
 
-            @since LibreOffice 26.3
+            @since LibreOffice 26.2
          */
         [optional, property] long ParaLetterSpacingMinimum;
 
@@ -577,7 +577,7 @@ published service ParagraphProperties
 
             @see ParaLetterSpacingMininum
 
-            @since LibreOffice 26.3
+            @since LibreOffice 26.2
          */
         [optional, property] long ParaLetterSpacingMaximum;
 
@@ -591,7 +591,7 @@ published service ParagraphProperties
 
             @see ParaScaleWidthMaximum
 
-            @since LibreOffice 26.3
+            @since LibreOffice 26.2
          */
         [optional, property] long ParaScaleWidthMinimum;
 
@@ -605,9 +605,17 @@ published service ParagraphProperties
 
             @see ParaScaleWidthMininum
 
-            @since LibreOffice 26.3
+            @since LibreOffice 26.2
          */
         [optional, property] long ParaScaleWidthMaximum;
+
+        /** specifies the minimum number of characters of the compound word 
part
+            that must appear at the beginning of the line after the hyphen 
character
+            (when hyphenation is applied).
+
+            @since LibreOffice 26.8
+         */
+        [optional, property] short ParaHyphenationCompoundMinTrailingChars;
 };
 
 
diff --git a/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng 
b/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng
index 0721512cbf7b..a3c7eb909c84 100644
--- a/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng
+++ b/schema/libreoffice/OpenDocument-v1.4+libreoffice-schema.rng
@@ -3087,7 +3087,22 @@ 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.
   <rng:define name="style-text-properties-attlist" combine="interleave">
     <rng:optional>
       <rng:attribute name="loext:hyphenation-compound-remain-char-count">
-        <rng:ref name="positiveInteger"/>
+         <rng:choice>
+           <rng:value>no-limit</rng:value>
+           <rng:ref name="positiveInteger"/>
+         </rng:choice>
+      </rng:attribute>
+    </rng:optional>
+  </rng:define>
+
+  <!-- TODO no proposal -->
+  <rng:define name="style-text-properties-attlist" combine="interleave">
+    <rng:optional>
+      <rng:attribute name="loext:hyphenation-compound-push-char-count">
+         <rng:choice>
+           <rng:value>no-limit</rng:value>
+           <rng:ref name="positiveInteger"/>
+         </rng:choice>
       </rng:attribute>
     </rng:optional>
   </rng:define>
diff --git a/svx/sdi/svxitems.sdi b/svx/sdi/svxitems.sdi
index fca1b739b832..c8f298648760 100644
--- a/svx/sdi/svxitems.sdi
+++ b/svx/sdi/svxitems.sdi
@@ -290,6 +290,7 @@ struct SvxHyphenZone
     INT16       HyphenKeepType MID_HYPHEN_KEEP_TYPE;
     BOOL        HyphenKeepLine MID_HYPHEN_KEEP_LINE;
     INT16       MinLead       MID_HYPHEN_COMPOUND_MIN_LEAD;
+    INT16       MinTrail      MID_HYPHEN_COMPOUND_MIN_TRAIL;
 };
 item SvxHyphenZone SvxHyphenZoneItem;
 
diff --git a/sw/inc/inspectorproperties.hrc b/sw/inc/inspectorproperties.hrc
index f4b42273de8e..8fc10dc5071b 100644
--- a/sw/inc/inspectorproperties.hrc
+++ b/sw/inc/inspectorproperties.hrc
@@ -207,6 +207,7 @@
 #define RID_PARA_HYPHENATION_MAX_LEADING_CHARS              
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation Min Leading Chars")
 #define RID_PARA_HYPHENATION_MAX_TRAILING_CHARS             
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation Min Trailing Chars")
 #define RID_PARA_HYPHENATION_COMPOUND_MIN_LEADING_CHARS     
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation Compound Min Leading Chars")
+#define RID_PARA_HYPHENATION_COMPOUND_MIN_TRAILING_CHARS    
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation Compound Min Trailing Chars")
 #define RID_PARA_HYPHENATION_NO_CAPS                        
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation No Caps")
 #define RID_PARA_HYPHENATION_NO_LAST_WORD                   
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation No Last Word")
 #define RID_PARA_HYPHENATION_MIN_WORD_LENGTH                
NC_("RID_ATTRIBUTE_NAMES_MAP", "Para Hyphenation Min Word Length")
diff --git a/sw/inc/unoprnms.hxx b/sw/inc/unoprnms.hxx
index 27981e05db01..08b08cc85307 100644
--- a/sw/inc/unoprnms.hxx
+++ b/sw/inc/unoprnms.hxx
@@ -74,6 +74,8 @@ inline constexpr OUString 
UNO_NAME_PARA_HYPHENATION_MAX_TRAILING_CHARS
     = u"ParaHyphenationMaxTrailingChars"_ustr;
 inline constexpr OUString UNO_NAME_PARA_HYPHENATION_COMPOUND_MIN_LEADING_CHARS
     = u"ParaHyphenationCompoundMinLeadingChars"_ustr;
+inline constexpr OUString UNO_NAME_PARA_HYPHENATION_COMPOUND_MIN_TRAILING_CHARS
+    = u"ParaHyphenationCompoundMinTrailingChars"_ustr;
 inline constexpr OUString UNO_NAME_PARA_HYPHENATION_MAX_HYPHENS = 
u"ParaHyphenationMaxHyphens"_ustr;
 inline constexpr OUString UNO_NAME_PARA_HYPHENATION_MIN_WORD_LENGTH
     = u"ParaHyphenationMinWordLength"_ustr;
diff --git a/sw/qa/extras/layout/data/tdf158885_compound-remain.fodt 
b/sw/qa/extras/layout/data/tdf158885_compound-remain.fodt
index 7fbf782319dc..6c0366fab902 100644
--- a/sw/qa/extras/layout/data/tdf158885_compound-remain.fodt
+++ b/sw/qa/extras/layout/data/tdf158885_compound-remain.fodt
@@ -190,6 +190,7 @@
  <office:body>
   <office:text>
    <text:p text:style-name="P1">emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
</text:p>
+   <text:p text:style-name="P1">kovakőbányászat kovakőbányászat 
kovakőbányászat kovakőbányászat kovakőbányászat,,, kovakőbányászat 
kovakőbányászat kovakőbányászat kovakőbányászat</text:p>
   </office:text>
  </office:body>
 </office:document>
diff --git a/sw/qa/extras/layout/data/tdf158885_not_compound-remain.fodt 
b/sw/qa/extras/layout/data/tdf158885_not_compound-remain.fodt
index bd53db4e9ee6..6ba2c290e395 100644
--- a/sw/qa/extras/layout/data/tdf158885_not_compound-remain.fodt
+++ b/sw/qa/extras/layout/data/tdf158885_not_compound-remain.fodt
@@ -190,6 +190,7 @@
  <office:body>
   <office:text>
    <text:p text:style-name="P1">emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
</text:p>
+   <text:p text:style-name="P1">kovakőbányászat kovakőbányászat 
kovakőbányászat kovakőbányászat kovakőbányászat,,, kovakőbányászat 
kovakőbányászat kovakőbányászat kovakőbányászat</text:p>
   </office:text>
  </office:body>
 </office:document>
diff --git a/sw/qa/extras/layout/data/tdf170177_compound-push.fodt 
b/sw/qa/extras/layout/data/tdf170177_compound-push.fodt
new file mode 100644
index 000000000000..ccebc5b14f5c
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf170177_compound-push.fodt
@@ -0,0 +1,206 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ 
<office:meta><meta:creation-date>2024-03-18T08:37:10.032919314</meta:creation-date><dc:date>2024-03-18T12:28:13.103241731</dc:date><meta:editing-duration>PT9M33S</meta:editing-duration><meta:editing-cycles>6</meta:editing-cycles><meta:generator>LibreOfficeDev/24.2.0.0.alpha0$Linux_X86_64
 
LibreOffice_project/1650efbb077010d595860a707cf5bfb7df50f8f4</meta:generator><meta:document-statistic
 meta:table-count="0" meta:image-count="0" meta:object-count="0" 
meta:page-count="1" meta:paragraph-count="1" meta:word-count="21" 
meta:character-count="273" 
meta:non-whitespace-character-count="252"/></office:meta>
+ <office:settings>
+  <config:config-item-set config:name="ooo:view-settings">
+   <config:config-item config:name="ViewAreaTop" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaLeft" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaWidth" 
config:type="long">40748</config:config-item>
+   <config:config-item config:name="ViewAreaHeight" 
config:type="long">13866</config:config-item>
+   <config:config-item config:name="ShowRedlineChanges" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="InBrowseMode" 
config:type="boolean">false</config:config-item>
+  </config:config-item-set>
+  <config:config-item-set config:name="ooo:configuration-settings">
+   <config:config-item config:name="PrintRightPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintProspectRTL" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintLeftPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintControls" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintProspect" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintBlackFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintAnnotationMode" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="PrintEmptyPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintSingleJobs" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="JustifyLinesWithShrinking" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="HeaderSpacingBelowLastPara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ProtectBookmarks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ContinuousEndnotes" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DisableOffPagePositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTables" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="SubtractFlysAnchoredAtFlys" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintFaxName" config:type="string"/>
+   <config:config-item config:name="SurroundTextWrapSmall" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PropLineSpacingShrinksFirstLine" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabOverSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverMargin" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedComplexScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedLatinScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedOnlyUsedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClippedPictures" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FrameAutowidthWithMorePara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FloattableNomargins" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UnbreakableNumberings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AllowPrintJobCancel" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseVariableWidthNBSP" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerObjectPositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RsidRoot" 
config:type="int">1001492</config:config-item>
+   <config:config-item config:name="PrinterPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseDataSource" 
config:type="string"/>
+   <config:config-item config:name="UpdateFromTemplate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LoadReadonly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="Rsid" 
config:type="int">1360405</config:config-item>
+   <config:config-item config:name="FootnoteInColumnToPageEnd" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ProtectFields" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveGlobalDocumentLinks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LinkUpdateMode" 
config:type="short">1</config:config-item>
+   <config:config-item config:name="AddExternalLeading" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintGraphics" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedSystemFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IsLabelDocument" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaLineSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseFormerTextWrapping" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HyphenateURLs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaTableSpacingAtStart" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabsRelativeToIndent" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="FieldAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="SaveVersionOnClose" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ChartAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ImagePreferredDPI" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+   <config:config-item config:name="SmallCapsPercentage66" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AlignTabStopPosition" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DropCapPunctuation" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="MathBaselineAlignment" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrinterName" config:type="string"/>
+   <config:config-item config:name="CharacterCompressionType" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="AddParaTableSpacing" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotJustifyLinesWithManualBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintHiddenText" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IsKernAsianPunctuation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterIndependentLayout" 
config:type="string">high-resolution</config:config-item>
+   <config:config-item config:name="TabOverflow" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddVerticalFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabAtLeftIndentForParagraphsInList" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyUserData" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="MsWordCompMinLineHeightByFly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTextPlaceholder" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreFirstLineIndentInNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerLineSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintPageBackground" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RedlineProtectionKey" 
config:type="base64Binary"/>
+   <config:config-item config:name="EmbedAsianScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="BackgroundParaOverDrawings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveThumbnail" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ConsiderTextWrapOnObjPos" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbeddedDatabaseName" 
config:type="string"/>
+   <config:config-item config:name="ProtectForm" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DoNotResetParaAttrsForNumFont" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MsWordCompTrailingBlanks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmptyDbFieldHidesPara" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TableRowKeep" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="NoNumberingShowFollowBy" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="InvertBorderSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DoNotCaptureDrawObjsOnPage" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="GutterAtTop" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="StylesNoDefault" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UnxForceZeroExtLeading" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintReversed" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldPrinterMetrics" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommandType" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="PrintDrawings" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="OutlineLevelYieldsNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommand" 
config:type="string"/>
+   <config:config-item config:name="CollapseEmptyCellPara" 
config:type="boolean">true</config:config-item>
+  </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+  <office:script script:language="ooo:Basic">
+   <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:xlink="http://www.w3.org/1999/xlink"/>
+  </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+  <style:font-face style:name="Arial" svg:font-family="Arial" 
style:font-family-generic="swiss"/>
+  <style:font-face style:name="DejaVu Sans" svg:font-family="&apos;DejaVu 
Sans&apos;" style:font-family-generic="swiss"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="8.5pt" 
draw:shadow-offset-y="8.5pt" draw:start-line-spacing-horizontal="8.02pt" 
draw:start-line-spacing-vertical="8.02pt" 
draw:end-line-spacing-horizontal="8.02pt" 
draw:end-line-spacing-vertical="8.02pt" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0pt" 
style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="DejaVu Sans" fo:font-size="12pt" 
fo:language="hu" fo:country="HU" style:letter-kerning="true"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" fo:hyphenation-keep="auto" 
style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" 
style:line-break="strict" style:tab-stop-distance="35.46pt" 
style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="DejaVu Sans" fo:font-size="12pt" 
fo:language="hu" fo:country="HU" style:letter-kerning="true" 
fo:hyphenate="false" fo:hyphenation-remain-char-count="2" 
fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" 
loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" 
loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text"/>
+  <style:style style:name="Heading" style:family="paragraph" 
style:parent-style-name="Standard" style:next-style-name="Text_20_body" 
style:class="text">
+   <style:paragraph-properties fo:margin-top="11.99pt" 
fo:margin-bottom="6.01pt" style:contextual-spacing="false" 
fo:keep-with-next="always"/>
+   <style:text-properties style:font-name="Arial" fo:font-family="Arial" 
style:font-family-generic="swiss" fo:font-size="14pt"/>
+  </style:style>
+  <style:style style:name="Text_20_body" style:display-name="Text body" 
style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+   <style:paragraph-properties fo:margin-top="0pt" fo:margin-bottom="7pt" 
style:contextual-spacing="false" fo:line-height="115%"/>
+  </style:style>
+  <style:style style:name="List" style:family="paragraph" 
style:parent-style-name="Text_20_body" style:class="list">
+   <style:text-properties style:font-name="DejaVu Sans" 
fo:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="swiss"/>
+  </style:style>
+  <style:style style:name="Caption" style:family="paragraph" 
style:parent-style-name="Standard" style:class="extra">
+   <style:paragraph-properties fo:margin-top="6.01pt" 
fo:margin-bottom="6.01pt" style:contextual-spacing="false" 
text:number-lines="false" text:line-number="0"/>
+   <style:text-properties style:font-name="DejaVu Sans" 
fo:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="swiss" 
fo:font-size="12pt" fo:font-style="italic"/>
+  </style:style>
+  <style:style style:name="Index" style:family="paragraph" 
style:parent-style-name="Standard" style:class="index">
+   <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+   <style:text-properties style:font-name="DejaVu Sans" 
fo:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="swiss"/>
+  </style:style>
+ </office:styles>
+ <office:automatic-styles>
+  <style:style style:name="P1" style:family="paragraph" 
style:parent-style-name="Standard" style:master-page-name="">
+   <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" 
fo:hyphenation-keep="auto" style:page-number="auto"/>
+   <style:text-properties officeooo:rsid="000f4814" 
officeooo:paragraph-rsid="000f4814" fo:hyphenate="true" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="3" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit" 
loext:hyphenation-compound-remain-char-count="3" 
loext:hyphenation-compound-push-char-count="4"/>
+  </style:style>
+  <style:style style:name="P2" style:family="paragraph" 
style:parent-style-name="Standard" style:master-page-name="">
+   <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" 
fo:hyphenation-keep="auto" style:page-number="auto"/>
+   <style:text-properties officeooo:rsid="000f4814" 
officeooo:paragraph-rsid="000f4814" fo:hyphenate="true" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="3" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit" 
loext:hyphenation-compound-remain-char-count="no-limit" 
loext:hyphenation-compound-push-char-count="no-limit"/>
+  </style:style>
+  <style:style style:name="P3" style:family="paragraph" 
style:parent-style-name="Standard" style:master-page-name="">
+   <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" 
fo:hyphenation-keep="auto" style:page-number="auto"/>
+   <style:text-properties officeooo:rsid="000f4814" 
officeooo:paragraph-rsid="000f4814" fo:hyphenate="true" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="3" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit" 
loext:hyphenation-compound-remain-char-count="99" 
loext:hyphenation-compound-push-char-count="no-limit"/>
+  </style:style>
+  <style:page-layout style:name="pm1">
+   <style:page-layout-properties fo:page-width="595.3pt" 
fo:page-height="841.89pt" style:num-format="1" 
style:print-orientation="portrait" fo:margin-top="56.69pt" 
fo:margin-bottom="56.69pt" fo:margin-left="56.69pt" fo:margin-right="56.69pt" 
style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" 
style:layout-grid-lines="20" style:layout-grid-base-height="20.01pt" 
style:layout-grid-ruby-height="10.01pt" style:layout-grid-mode="none" 
style:layout-grid-ruby-below="false" style:layout-grid-print="false" 
style:layout-grid-display="false" style:footnote-max-height="0pt" 
loext:margin-gutter="0pt">
+    <style:footnote-sep style:width="0.51pt" 
style:distance-before-sep="2.86pt" style:distance-after-sep="2.86pt" 
style:line-style="solid" style:adjustment="left" style:rel-width="25%" 
style:color="#000000"/>
+   </style:page-layout-properties>
+  </style:page-layout>
+  <style:style style:name="dp1" style:family="drawing-page">
+   <style:drawing-page-properties draw:background-size="full"/>
+  </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+  <style:master-page style:name="Standard" style:page-layout-name="pm1" 
draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+  <office:text>
+   <text:p text:style-name="P1">,,,,emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
</text:p>
+   <text:p text:style-name="P1">vasemberellenes vasemberellenes 
vasemberellenes vasemberellenes vasemberellenes vasemberellenes</text:p>
+   <text:p text:style-name="P2">,,,,,,,,,vizsgálattal balalajkavizsgálattal 
balalajkavizsgálattal balalajkavizsgálattal balalajkavizsgálattal</text:p>
+   <text:p text:style-name="P3">,,,,,,,,,vizsgálattal balalajkavizsgálattal 
balalajkavizsgálattal balalajkavizsgálattal balalajkavizsgálattal</text:p>
+  </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/layout/data/tdf170177_not_compound-push.fodt 
b/sw/qa/extras/layout/data/tdf170177_not_compound-push.fodt
new file mode 100644
index 000000000000..ec9d2a8afdcc
--- /dev/null
+++ b/sw/qa/extras/layout/data/tdf170177_not_compound-push.fodt
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<office:document xmlns:css3t="http://www.w3.org/TR/css3-text/"; 
xmlns:grddl="http://www.w3.org/2003/g/data-view#"; 
xmlns:xhtml="http://www.w3.org/1999/xhtml"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; 
xmlns:xsd="http://www.w3.org/2001/XMLSchema"; 
xmlns:xforms="http://www.w3.org/2002/xforms"; 
xmlns:dom="http://www.w3.org/2001/xml-events"; 
xmlns:script="urn:oasis:names:tc:opendocument:xmlns:script:1.0" 
xmlns:form="urn:oasis:names:tc:opendocument:xmlns:form:1.0" 
xmlns:math="http://www.w3.org/1998/Math/MathML"; 
xmlns:office="urn:oasis:names:tc:opendocument:xmlns:office:1.0" 
xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:fo="urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0" 
xmlns:config="urn:oasis:names:tc:opendocument:xmlns:config:1.0" 
xmlns:ooow="http://openoffice.org/2004/writer"; 
xmlns:xlink="http://www.w3.org/1999/xlink"; 
xmlns:drawooo="http://openoffice.org/2010/draw"; 
xmlns:oooc="http://openoffice.org/2004/calc"; 
xmlns:dc="http://purl.org/dc/elements/1.1/"; xmlns:c
 alcext="urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0" 
xmlns:style="urn:oasis:names:tc:opendocument:xmlns:style:1.0" 
xmlns:text="urn:oasis:names:tc:opendocument:xmlns:text:1.0" 
xmlns:of="urn:oasis:names:tc:opendocument:xmlns:of:1.2" 
xmlns:tableooo="http://openoffice.org/2009/table"; 
xmlns:draw="urn:oasis:names:tc:opendocument:xmlns:drawing:1.0" 
xmlns:dr3d="urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0" 
xmlns:rpt="http://openoffice.org/2005/report"; 
xmlns:formx="urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0"
 xmlns:svg="urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0" 
xmlns:chart="urn:oasis:names:tc:opendocument:xmlns:chart:1.0" 
xmlns:officeooo="http://openoffice.org/2009/office"; 
xmlns:table="urn:oasis:names:tc:opendocument:xmlns:table:1.0" 
xmlns:field="urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0" 
xmlns:number="urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0" 
xmlns:meta="urn:oasis:names:tc:opendocument:xmlns:
 meta:1.0" 
xmlns:loext="urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0"
 office:version="1.3" office:mimetype="application/vnd.oasis.opendocument.text">
+ 
<office:meta><meta:creation-date>2024-03-18T08:37:10.032919314</meta:creation-date><dc:date>2024-03-18T12:28:13.103241731</dc:date><meta:editing-duration>PT9M33S</meta:editing-duration><meta:editing-cycles>6</meta:editing-cycles><meta:generator>LibreOfficeDev/24.2.0.0.alpha0$Linux_X86_64
 
LibreOffice_project/1650efbb077010d595860a707cf5bfb7df50f8f4</meta:generator><meta:document-statistic
 meta:table-count="0" meta:image-count="0" meta:object-count="0" 
meta:page-count="1" meta:paragraph-count="1" meta:word-count="21" 
meta:character-count="273" 
meta:non-whitespace-character-count="252"/></office:meta>
+ <office:settings>
+  <config:config-item-set config:name="ooo:view-settings">
+   <config:config-item config:name="ViewAreaTop" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaLeft" 
config:type="long">0</config:config-item>
+   <config:config-item config:name="ViewAreaWidth" 
config:type="long">40748</config:config-item>
+   <config:config-item config:name="ViewAreaHeight" 
config:type="long">13866</config:config-item>
+   <config:config-item config:name="ShowRedlineChanges" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="InBrowseMode" 
config:type="boolean">false</config:config-item>
+  </config:config-item-set>
+  <config:config-item-set config:name="ooo:configuration-settings">
+   <config:config-item config:name="PrintRightPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintProspectRTL" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintLeftPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintControls" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintProspect" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintBlackFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintAnnotationMode" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="PrintEmptyPages" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintSingleJobs" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="JustifyLinesWithShrinking" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AutoFirstLineIndentDisregardLineSpace" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="HeaderSpacingBelowLastPara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ProtectBookmarks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ContinuousEndnotes" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DisableOffPagePositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTables" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="SubtractFlysAnchoredAtFlys" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyParagraphMarkFormatToNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintFaxName" config:type="string"/>
+   <config:config-item config:name="SurroundTextWrapSmall" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TreatSingleColumnBreakAsPageBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PropLineSpacingShrinksFirstLine" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabOverSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabOverMargin" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedComplexScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedLatinScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedOnlyUsedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbedFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClippedPictures" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FrameAutowidthWithMorePara" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="FloattableNomargins" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UnbreakableNumberings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AllowPrintJobCancel" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseVariableWidthNBSP" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerObjectPositioning" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RsidRoot" 
config:type="int">1001492</config:config-item>
+   <config:config-item config:name="PrinterPaperFromSetup" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseDataSource" 
config:type="string"/>
+   <config:config-item config:name="UpdateFromTemplate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LoadReadonly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="Rsid" 
config:type="int">1360405</config:config-item>
+   <config:config-item config:name="FootnoteInColumnToPageEnd" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ProtectFields" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveGlobalDocumentLinks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ClipAsCharacterAnchoredWriterFlyFrames" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="LinkUpdateMode" 
config:type="short">1</config:config-item>
+   <config:config-item config:name="AddExternalLeading" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrintGraphics" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="EmbedSystemFonts" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IsLabelDocument" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaLineSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="UseFormerTextWrapping" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="HyphenateURLs" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AddParaTableSpacingAtStart" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TabsRelativeToIndent" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="FieldAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="SaveVersionOnClose" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ChartAutoUpdate" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ImagePreferredDPI" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="PrinterSetup" config:type="base64Binary"/>
+   <config:config-item config:name="SmallCapsPercentage66" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="AlignTabStopPosition" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DropCapPunctuation" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="MathBaselineAlignment" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="PrinterName" config:type="string"/>
+   <config:config-item config:name="CharacterCompressionType" 
config:type="short">0</config:config-item>
+   <config:config-item config:name="AddParaTableSpacing" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="DoNotJustifyLinesWithManualBreak" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintHiddenText" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IsKernAsianPunctuation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrinterIndependentLayout" 
config:type="string">high-resolution</config:config-item>
+   <config:config-item config:name="TabOverflow" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddParaSpacingToTableCells" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="AddVerticalFrameOffsets" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="TabAtLeftIndentForParagraphsInList" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="ApplyUserData" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="MsWordCompMinLineHeightByFly" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintTextPlaceholder" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreFirstLineIndentInNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseFormerLineSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintPageBackground" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="RedlineProtectionKey" 
config:type="base64Binary"/>
+   <config:config-item config:name="EmbedAsianScriptFonts" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="BackgroundParaOverDrawings" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="SaveThumbnail" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="ConsiderTextWrapOnObjPos" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmbeddedDatabaseName" 
config:type="string"/>
+   <config:config-item config:name="ProtectForm" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DoNotResetParaAttrsForNumFont" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="MsWordCompTrailingBlanks" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="EmptyDbFieldHidesPara" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="TableRowKeep" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="NoNumberingShowFollowBy" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="InvertBorderSpacing" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="IgnoreTabsAndBlanksForLineCalculation" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="DoNotCaptureDrawObjsOnPage" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="GutterAtTop" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="StylesNoDefault" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UnxForceZeroExtLeading" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="PrintReversed" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="UseOldPrinterMetrics" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommandType" 
config:type="int">0</config:config-item>
+   <config:config-item config:name="PrintDrawings" 
config:type="boolean">true</config:config-item>
+   <config:config-item config:name="OutlineLevelYieldsNumbering" 
config:type="boolean">false</config:config-item>
+   <config:config-item config:name="CurrentDatabaseCommand" 
config:type="string"/>
+   <config:config-item config:name="CollapseEmptyCellPara" 
config:type="boolean">true</config:config-item>
+  </config:config-item-set>
+ </office:settings>
+ <office:scripts>
+  <office:script script:language="ooo:Basic">
+   <ooo:libraries xmlns:ooo="http://openoffice.org/2004/office"; 
xmlns:xlink="http://www.w3.org/1999/xlink"/>
+  </office:script>
+ </office:scripts>
+ <office:font-face-decls>
+  <style:font-face style:name="Arial" svg:font-family="Arial" 
style:font-family-generic="swiss"/>
+  <style:font-face style:name="DejaVu Sans" svg:font-family="&apos;DejaVu 
Sans&apos;" style:font-family-generic="swiss"/>
+ </office:font-face-decls>
+ <office:styles>
+  <style:default-style style:family="graphic">
+   <style:graphic-properties svg:stroke-color="#3465a4" 
draw:fill-color="#729fcf" fo:wrap-option="no-wrap" draw:shadow-offset-x="8.5pt" 
draw:shadow-offset-y="8.5pt" draw:start-line-spacing-horizontal="8.02pt" 
draw:start-line-spacing-vertical="8.02pt" 
draw:end-line-spacing-horizontal="8.02pt" 
draw:end-line-spacing-vertical="8.02pt" style:writing-mode="lr-tb" 
style:flow-with-text="false"/>
+   <style:paragraph-properties style:text-autospace="ideograph-alpha" 
style:line-break="strict" loext:tab-stop-distance="0pt" 
style:font-independent-line-spacing="false">
+    <style:tab-stops/>
+   </style:paragraph-properties>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="DejaVu Sans" fo:font-size="12pt" 
fo:language="hu" fo:country="HU" style:letter-kerning="true"/>
+  </style:default-style>
+  <style:default-style style:family="paragraph">
+   <style:paragraph-properties fo:orphans="2" fo:widows="2" 
fo:hyphenation-ladder-count="no-limit" fo:hyphenation-keep="auto" 
style:text-autospace="ideograph-alpha" style:punctuation-wrap="hanging" 
style:line-break="strict" style:tab-stop-distance="35.46pt" 
style:writing-mode="page"/>
+   <style:text-properties style:use-window-font-color="true" 
loext:opacity="0%" style:font-name="DejaVu Sans" fo:font-size="12pt" 
fo:language="hu" fo:country="HU" style:letter-kerning="true" 
fo:hyphenate="false" fo:hyphenation-remain-char-count="2" 
fo:hyphenation-push-char-count="2" loext:hyphenation-no-caps="false" 
loext:hyphenation-no-last-word="false" loext:hyphenation-word-char-count="5" 
loext:hyphenation-zone="no-limit"/>
+  </style:default-style>
+  <style:default-style style:family="table">
+   <style:table-properties table:border-model="collapsing"/>
+  </style:default-style>
+  <style:default-style style:family="table-row">
+   <style:table-row-properties fo:keep-together="auto"/>
+  </style:default-style>
+  <style:style style:name="Standard" style:family="paragraph" 
style:class="text"/>
+  <style:style style:name="Heading" style:family="paragraph" 
style:parent-style-name="Standard" style:next-style-name="Text_20_body" 
style:class="text">
+   <style:paragraph-properties fo:margin-top="11.99pt" 
fo:margin-bottom="6.01pt" style:contextual-spacing="false" 
fo:keep-with-next="always"/>
+   <style:text-properties style:font-name="Arial" fo:font-family="Arial" 
style:font-family-generic="swiss" fo:font-size="14pt"/>
+  </style:style>
+  <style:style style:name="Text_20_body" style:display-name="Text body" 
style:family="paragraph" style:parent-style-name="Standard" style:class="text">
+   <style:paragraph-properties fo:margin-top="0pt" fo:margin-bottom="7pt" 
style:contextual-spacing="false" fo:line-height="115%"/>
+  </style:style>
+  <style:style style:name="List" style:family="paragraph" 
style:parent-style-name="Text_20_body" style:class="list">
+   <style:text-properties style:font-name="DejaVu Sans" 
fo:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="swiss"/>
+  </style:style>
+  <style:style style:name="Caption" style:family="paragraph" 
style:parent-style-name="Standard" style:class="extra">
+   <style:paragraph-properties fo:margin-top="6.01pt" 
fo:margin-bottom="6.01pt" style:contextual-spacing="false" 
text:number-lines="false" text:line-number="0"/>
+   <style:text-properties style:font-name="DejaVu Sans" 
fo:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="swiss" 
fo:font-size="12pt" fo:font-style="italic"/>
+  </style:style>
+  <style:style style:name="Index" style:family="paragraph" 
style:parent-style-name="Standard" style:class="index">
+   <style:paragraph-properties text:number-lines="false" text:line-number="0"/>
+   <style:text-properties style:font-name="DejaVu Sans" 
fo:font-family="&apos;DejaVu Sans&apos;" style:font-family-generic="swiss"/>
+  </style:style>
+ </office:styles>
+ <office:automatic-styles>
+  <style:style style:name="P1" style:family="paragraph" 
style:parent-style-name="Standard" style:master-page-name="">
+   <style:paragraph-properties fo:hyphenation-ladder-count="no-limit" 
fo:hyphenation-keep="auto" style:page-number="auto"/>
+   <style:text-properties officeooo:rsid="000f4814" 
officeooo:paragraph-rsid="000f4814" fo:hyphenate="true" 
fo:hyphenation-remain-char-count="2" fo:hyphenation-push-char-count="3" 
loext:hyphenation-no-caps="false" loext:hyphenation-no-last-word="false" 
loext:hyphenation-word-char-count="5" loext:hyphenation-zone="no-limit" 
loext:hyphenation-compound-remain-char-count="2" 
loext:hyphenation-compound-push-char-count="2"/>
+  </style:style>
+  <style:page-layout style:name="pm1">
+   <style:page-layout-properties fo:page-width="595.3pt" 
fo:page-height="841.89pt" style:num-format="1" 
style:print-orientation="portrait" fo:margin-top="56.69pt" 
fo:margin-bottom="56.69pt" fo:margin-left="56.69pt" fo:margin-right="56.69pt" 
style:writing-mode="lr-tb" style:layout-grid-color="#c0c0c0" 
style:layout-grid-lines="20" style:layout-grid-base-height="20.01pt" 
style:layout-grid-ruby-height="10.01pt" style:layout-grid-mode="none" 
style:layout-grid-ruby-below="false" style:layout-grid-print="false" 
style:layout-grid-display="false" style:footnote-max-height="0pt" 
loext:margin-gutter="0pt">
+    <style:footnote-sep style:width="0.51pt" 
style:distance-before-sep="2.86pt" style:distance-after-sep="2.86pt" 
style:line-style="solid" style:adjustment="left" style:rel-width="25%" 
style:color="#000000"/>
+   </style:page-layout-properties>
+  </style:page-layout>
+  <style:style style:name="dp1" style:family="drawing-page">
+   <style:drawing-page-properties draw:background-size="full"/>
+  </style:style>
+ </office:automatic-styles>
+ <office:master-styles>
+  <style:master-page style:name="Standard" style:page-layout-name="pm1" 
draw:style-name="dp1"/>
+ </office:master-styles>
+ <office:body>
+  <office:text>
+   <text:p text:style-name="P1">,,,,emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes emberellenes emberellenes emberellenes emberellenes emberellenes 
</text:p>
+   <text:p text:style-name="P1">vasemberellenes vasemberellenes 
vasemberellenes vasemberellenes vasemberellenes vasemberellenes</text:p>
+  </office:text>
+ </office:body>
+</office:document>
diff --git a/sw/qa/extras/layout/layout2.cxx b/sw/qa/extras/layout/layout2.cxx
index 5a7cbd6873a7..1c7eecdffb36 100644
--- a/sw/qa/extras/layout/layout2.cxx
+++ b/sw/qa/extras/layout/layout2.cxx
@@ -1250,6 +1250,15 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, 
testTdf158885_compound_remain)
                 u"emberellenes emberellenes emberellenes emberellenes 
emberellenes ember");
     assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]", "portion",
                 u"ellenes emberellenes emberellenes emberellenes emberellenes 
emberellenes ");
+
+    // tdf#170177 fix hyphenation at the end of the middle constituent
+    // shorter than the minCompoundLead
+    // This was "kova=kőbányászat" (now "kovakő=bányászat)
+    // (allowed hyphenations: ko=va=kő=bányá=szat)
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]", "portion",
+                u"kovakőbányászat kovakőbányászat kovakőbányászat 
kovakőbányászat kovakő");
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout[2]", "portion",
+                u"bányászat,,, kovakőbányászat kovakőbányászat kovakőbányászat 
kovakő");
 }
 
 CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf158885_not_compound_remain)
@@ -1273,6 +1282,83 @@ CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, 
testTdf158885_not_compound_remain)
                 u"emberellenes emberellenes emberellenes emberellenes 
emberellenes emberel");
     assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]", "portion",
                 u"lenes emberellenes emberellenes emberellenes emberellenes 
emberellenes ");
+
+    // tdf#170177 fix hyphenation at the end of the middle constituent
+    // shorter than the minCompoundLead
+    // These are "kovakő=bányászat" and "kovakőbá=nyászat
+    // (all hyphenations are allowed: ko=va=kő=bá=nyá=szat)
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]", "portion",
+                u"kovakőbányászat kovakőbányászat kovakőbányászat 
kovakőbányászat kovakő");
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout[2]", "portion",
+                u"bányászat,,, kovakőbányászat kovakőbányászat kovakőbányászat 
kovakőbá");
+}
+
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf170177_compound_push)
+{
+    uno::Reference<linguistic2::XHyphenator> xHyphenator = 
LinguMgr::GetHyphenator();
+    if (!xHyphenator->hasLocale(lang::Locale(u"hu"_ustr, u"HU"_ustr, 
OUString())))
+        return;
+
+    uno::Reference<linguistic2::XSpellChecker1> xSpell = 
LinguMgr::GetSpellChecker();
+    LanguageType eLang
+        = LanguageTag::convertToLanguageType(lang::Locale(u"hu"_ustr, 
u"HU"_ustr, OUString()));
+    if (!xSpell.is() || !xSpell->hasLanguage(static_cast<sal_uInt16>(eLang)))
+        return;
+
+    createSwDoc("tdf170177_compound-push.fodt");
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+    // hyphenate compound word with 3- or more character distance from the 
stem boundary
+    // This was "em=berellenes" (now "emberellenes", i.e. no hyphenation)
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[1]", "portion",
+                u",,,,emberellenes emberellenes emberellenes emberellenes 
emberellenes ");
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]", "portion",
+                u"emberellenes emberellenes emberellenes emberellenes 
emberellenes ember");
+
+    // This was "vasem=berellenes" (now "vas=emberellenes")
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]", "portion",
+                u"vasemberellenes vasemberellenes vasemberellenes 
vasemberellenes vas");
+
+    // special value: no-limit, if both -remain and -push values are not 
limited, there
+    // is hyphenation only at compound constituent boundaries (not in the 
suffixes, and
+    // not inside the first constituent
+    // balalajka=vizsgálattal, not balalajkavizsgálat=tal
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[3]/SwParaPortion/SwLineLayout[1]", "portion",
+                u",,,,,,,,,vizsgálattal balalajkavizsgálattal 
balalajkavizsgálattal balalajka");
+
+    // no-limit -push value, while -remain = 99 (~no-limit, but hyphenation 
before and
+    // in the suffix is allowed)
+    assertXPath(
+        pXmlDoc, "/root/page[1]/body/txt[4]/SwParaPortion/SwLineLayout[1]", 
"portion",
+        u",,,,,,,,,vizsgálattal balalajkavizsgálattal balalajkavizsgálattal 
balalajkavizsgálat");
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[4]/SwParaPortion/SwLineLayout[2]", "portion",
+                u"tal balalajkavizsgálattal");
+}
+
+CPPUNIT_TEST_FIXTURE(SwLayoutWriter2, testTdf170177_not_compound_push)
+{
+    uno::Reference<linguistic2::XHyphenator> xHyphenator = 
LinguMgr::GetHyphenator();
+    if (!xHyphenator->hasLocale(lang::Locale(u"hu"_ustr, u"HU"_ustr, 
OUString())))
+        return;
+
+    uno::Reference<linguistic2::XSpellChecker1> xSpell = 
LinguMgr::GetSpellChecker();
+    LanguageType eLang
+        = LanguageTag::convertToLanguageType(lang::Locale(u"hu"_ustr, 
u"HU"_ustr, OUString()));
+    if (!xSpell.is() || !xSpell->hasLanguage(static_cast<sal_uInt16>(eLang)))
+        return;
+
+    createSwDoc("tdf170177_not_compound-push.fodt");
+    xmlDocUniquePtr pXmlDoc = parseLayoutDump();
+    // hyphenate compound word with 3-character distance from the stem 
boundary,
+    // resulting less readable hyphenation "em=berellenes" (instead of
+    // "emberellenes" or "ember=ellenes")
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[1]", "portion",
+                u",,,,emberellenes emberellenes emberellenes emberellenes 
emberellenes em");
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[1]/SwParaPortion/SwLineLayout[2]", "portion",
+                u"berellenes emberellenes emberellenes emberellenes 
emberellenes emberelle");
+
+    // (all hyphenations are allowed: vas=em=ber=elle=nes)
+    assertXPath(pXmlDoc, 
"/root/page[1]/body/txt[2]/SwParaPortion/SwLineLayout[1]", "portion",
+                u"vasemberellenes vasemberellenes vasemberellenes 
vasemberellenes vasem");
 }
 
 // TODO: move this test to the lingucomponent project
diff --git a/sw/qa/uitest/styleInspector/styleInspector.py 
b/sw/qa/uitest/styleInspector/styleInspector.py
index 1f044dfc4dec..70554e5307c1 100644
--- a/sw/qa/uitest/styleInspector/styleInspector.py
+++ b/sw/qa/uitest/styleInspector/styleInspector.py
@@ -26,7 +26,7 @@ class styleNavigator(UITestCase):
             # The cursor is on text without formatting and default style
             self.assertEqual(1, len(xListBox.getChild('0').getChildren()))
             self.assertEqual("Default Paragraph Style  ", 
get_state_as_dict(xListBox.getChild('0').getChild('0'))['Text'])
-            self.assertEqual(156, 
len(xListBox.getChild('0').getChild('0').getChildren()))
+            self.assertEqual(157, 
len(xListBox.getChild('0').getChild('0').getChildren()))
             self.assertEqual(0, len(xListBox.getChild('1').getChildren()))
             self.assertEqual(0, len(xListBox.getChild('2').getChildren()))
             self.assertEqual(0, len(xListBox.getChild('3').getChildren()))
@@ -36,7 +36,7 @@ class styleNavigator(UITestCase):
             # The cursor is on text with direct formatting
             self.assertEqual(1, len(xListBox.getChild('0').getChildren()))
             self.assertEqual("Default Paragraph Style  ", 
get_state_as_dict(xListBox.getChild('0').getChild('0'))['Text'])
-            self.assertEqual(156, 
len(xListBox.getChild('0').getChild('0').getChildren()))
+            self.assertEqual(157, 
len(xListBox.getChild('0').getChild('0').getChildren()))
             self.assertEqual(0, len(xListBox.getChild('1').getChildren()))
             self.assertEqual(0, len(xListBox.getChild('2').getChildren()))
 
@@ -54,7 +54,7 @@ class styleNavigator(UITestCase):
             # The cursor is on text with paragraph direct formatting
             self.assertEqual(1, len(xListBox.getChild('0').getChildren()))
             self.assertEqual("Default Paragraph Style  ", 
get_state_as_dict(xListBox.getChild('0').getChild('0'))['Text'])
-            self.assertEqual(156, 
len(xListBox.getChild('0').getChild('0').getChildren()))
+            self.assertEqual(157, 
len(xListBox.getChild('0').getChild('0').getChildren()))
 
             xParDirFormatting = xListBox.getChild('1')
             self.assertEqual(7, len(xParDirFormatting.getChildren()))
@@ -75,7 +75,7 @@ class styleNavigator(UITestCase):
             xParStyle = xListBox.getChild('0')
             self.assertEqual(3, len(xParStyle.getChildren()))
             self.assertEqual("Default Paragraph Style  ", 
get_state_as_dict(xParStyle.getChild('0'))['Text'])
-            self.assertEqual(156, len(xParStyle.getChild('0').getChildren()))
+            self.assertEqual(157, len(xParStyle.getChild('0').getChildren()))
             self.assertEqual("Heading  ", 
get_state_as_dict(xParStyle.getChild('1'))['Text'])
             self.assertEqual(28, len(xParStyle.getChild('1').getChildren()))
 
@@ -116,7 +116,7 @@ class styleNavigator(UITestCase):
             xParStyle = xListBox.getChild('0')
             self.assertEqual(3, len(xParStyle.getChildren()))
             self.assertEqual("Default Paragraph Style  ", 
get_state_as_dict(xParStyle.getChild('0'))['Text'])
-            self.assertEqual(156, len(xParStyle.getChild('0').getChildren()))
+            self.assertEqual(157, len(xParStyle.getChild('0').getChildren()))
-e 
... etc. - the rest is truncated

Reply via email to