summaryrefslogtreecommitdiffstats
path: root/oox
diff options
context:
space:
mode:
authorVasily Melenchuk <vasily.melenchuk@cib.de>2021-08-27 18:10:15 +0300
committerThorsten Behrens <thorsten.behrens@allotropia.de>2021-09-14 10:16:40 +0200
commit5a2543daa64c901d8577dff3711a14438c46a13d (patch)
treefb4a38dfaa618adb00e518295376418d2e18f8a5 /oox
parentFix crash when drawing shape (diff)
downloadcore-5a2543daa64c901d8577dff3711a14438c46a13d.tar.gz
core-5a2543daa64c901d8577dff3711a14438c46a13d.zip
tdf#126426: support for hyperlinks in TextParagraphContext
Usually hyperlinks are processed by TextBodyContext, but for grouped shape we accidentaly gone into TextParagraphContext It has almost all possibilities to process txbxContent, but not hyperlinks. Additionally some hyperlink char attributes (color and underline) can expand to follow up ordinal text. Additional small hack applied to avoid this. Unfortunately this is not a final solution: such document fails roundtrip and hyperlinks are lost after saving to DOCX. Change-Id: Ie954f53696bd872cb1f59cb586fb55f6cd7c73bc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121172 Tested-by: Jenkins Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de> Conflicts: oox/source/drawingml/textbodycontext.cxx sw/qa/extras/ooxmlimport/ooxmlimport2.cxx Change-Id: I4b2c098dd81dbb9112fff038e9b989c111c5bbe7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/121923 Tested-by: Thorsten Behrens <thorsten.behrens@allotropia.de> Reviewed-by: Thorsten Behrens <thorsten.behrens@allotropia.de>
Diffstat (limited to 'oox')
-rw-r--r--oox/source/drawingml/textbodycontext.cxx11
-rw-r--r--oox/source/drawingml/textrun.cxx8
2 files changed, 18 insertions, 1 deletions
diff --git a/oox/source/drawingml/textbodycontext.cxx b/oox/source/drawingml/textbodycontext.cxx
index cbd1e420ee5a..444346a98de9 100644
--- a/oox/source/drawingml/textbodycontext.cxx
+++ b/oox/source/drawingml/textbodycontext.cxx
@@ -28,6 +28,7 @@
#include <oox/drawingml/shape.hxx>
#include <oox/token/namespaces.hxx>
#include <oox/token/tokens.hxx>
+#include "hyperlinkcontext.hxx"
#include <oox/mathml/import.hxx>
@@ -100,6 +101,16 @@ ContextHandlerRef TextParagraphContext::onCreateContext( sal_Int32 aElementToken
case OOX_TOKEN(a14, m):
return CreateLazyMathBufferingContext(*this, mrParagraph);
break;
+ case W_TOKEN( hyperlink ):
+ {
+ TextRunPtr pRun = std::make_shared<TextRun>();
+ mrParagraph.addRun(pRun);
+ // parse hyperlink attributes: use HyperLinkContext for that
+ rtl::Reference<HyperLinkContext> pContext(new HyperLinkContext(
+ *this, rAttribs, pRun->getTextCharacterProperties().maHyperlinkPropertyMap));
+ // but create text run context because HyperLinkContext can't process internal w:r, w:t, etc
+ return new RegularTextRunContext(*this, pRun);
+ }
default:
SAL_WARN("oox", "TextParagraphContext::onCreateContext: unhandled element: " << getBaseToken(aElementToken));
}
diff --git a/oox/source/drawingml/textrun.cxx b/oox/source/drawingml/textrun.cxx
index 3f66c7a852e4..a4b40ea7e9ae 100644
--- a/oox/source/drawingml/textrun.cxx
+++ b/oox/source/drawingml/textrun.cxx
@@ -69,7 +69,13 @@ sal_Int32 TextRun::insertAt(
Any aOldFontFamily = xState->getPropertyDefault("CharFontFamily");
TextCharacterProperties aTextCharacterProps( rTextCharacterStyle );
- aTextCharacterProps.assignUsed( maTextCharacterProperties );
+
+ // If no text color specified lets anyway initialize it as default:
+ // this will help to recover after hyperlink
+ if (!aTextCharacterProps.maFillProperties.maFillColor.isUsed())
+ aTextCharacterProps.maFillProperties.moFillType = XML_solidFill;
+
+ aTextCharacterProps.assignUsed(maTextCharacterProperties);
if ( aTextCharacterProps.moHeight.has() )
nCharHeight = aTextCharacterProps.moHeight.get();
else