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;
