writerfilter/source/dmapper/DomainMapper_Impl.cxx |   26 ++++++++++++++++++----
 1 file changed, 22 insertions(+), 4 deletions(-)

New commits:
commit 84dba9d2b65c2628d32107bd29293b318b7de023
Author:     Michael Stahl <[email protected]>
AuthorDate: Thu Jun 6 13:28:51 2024 +0200
Commit:     Miklos Vajna <[email protected]>
CommitDate: Tue Jun 11 14:25:29 2024 +0200

    writerfilter: import undocumented STYLEREF field heading switch
    
    forum-mso-de-86231.docx contains a funny field that uses undocumented
    switch:
    
     StyleRef  

    
    Word can evaluate it and find the paragraph with style "Heading 2".
    
    Translate it to "2" in DomainMapper, which is also evaluated by Word.
    
    (regression from commit d4fdafa103bfea94a279d7069ddc50ba92f67d01)
    
    Change-Id: I587e6df1ea72642278d93723ed6692ff5011ed57
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168495
    Reviewed-by: Michael Stahl <[email protected]>
    Tested-by: Jenkins
    (cherry picked from commit aac625cf1cc502de5d55c0b30afb962147ccf3e1)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/168553
    Reviewed-by: Miklos Vajna <[email protected]>

diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx 
b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index 4c5dff02fcf7..3276e430972e 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -8003,11 +8003,29 @@ void DomainMapper_Impl::CloseFieldCommand()
                                 getPropertyName(PROP_REFERENCE_FIELD_SOURCE),
                                 
uno::Any(sal_Int16(text::ReferenceFieldSource::STYLE)));
 
-                            uno::Any aStyleDisplayName;
-                            aStyleDisplayName <<= 
ConvertTOCStyleName(sFirstParam);
+                            OUString styleName(sFirstParam);
+                            if (styleName.isEmpty())
+                            {
+                                for (auto const& rSwitch : vSwitches)
+                                {
+                                    // undocumented Word feature:  = "Heading 
1" etc.
+                                    if (rSwitch.getLength() == 2 && rSwitch[0] 
== '\'
+                                        && '1' <= rSwitch[1] && rSwitch[1] <= 
'9')
+                                    {
+                                        styleName = OUString(rSwitch[1]);
+                                        break;
+                                    }
+                                }
+                            }
 
-                            xFieldProperties->setPropertyValue(
-                                getPropertyName(PROP_SOURCE_NAME), 
aStyleDisplayName);
+                            if (!styleName.isEmpty())
+                            {
+                                uno::Any aStyleDisplayName;
+                                aStyleDisplayName <<= 
ConvertTOCStyleName(styleName);
+
+                                xFieldProperties->setPropertyValue(
+                                    getPropertyName(PROP_SOURCE_NAME), 
aStyleDisplayName);
+                            }
 
                             sal_uInt16 nFlags = 0;
                             OUString sValue;

Reply via email to