diff options
Diffstat (limited to 'filter')
-rw-r--r-- | filter/source/svg/svgwriter.cxx | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/filter/source/svg/svgwriter.cxx b/filter/source/svg/svgwriter.cxx index f9039b2bbce7..55a19857a93d 100644 --- a/filter/source/svg/svgwriter.cxx +++ b/filter/source/svg/svgwriter.cxx @@ -32,6 +32,7 @@ using ::rtl::OUString; static const char aXMLElemG[] = "g"; +static const char aXMLElemA[] = "a"; static const char aXMLElemDefs[] = "defs"; static const char aXMLElemLine[] = "line"; static const char aXMLElemRect[] = "rect"; @@ -1795,20 +1796,31 @@ void SVGTextWriter::implWriteTextPortion( const Point& rPos, mrExport.AddAttribute( XML_NAMESPACE_NONE, "class", "PlaceholderText" ); mbIsPlacehlolderShape = sal_False; } - else if( mbIsURLField && !msUrl.isEmpty() ) - { - mrExport.AddAttribute( XML_NAMESPACE_NONE, "class", "UrlField" ); - mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrXLinkHRef, msUrl ); - mbIsURLField = sal_False; - } - addFontAttributes( /* isTexTContainer: */ false ); mpContext->AddPaintAttr( COL_TRANSPARENT, aTextColor ); - SvXMLElementExport aSVGTspanElem( mrExport, XML_NAMESPACE_NONE, aXMLElemTspan, mbIWS, mbIWS ); OUString sTextContent = rText; - mrExport.GetDocHandler()->characters( sTextContent ); + + // <a> tag for link should be the innermost tag, inside <tspan> + if( !mbIsPlacehlolderShape && mbIsURLField && !msUrl.isEmpty() ) + { + mrExport.AddAttribute( XML_NAMESPACE_NONE, "class", "UrlField" ); + mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrXLinkHRef, msUrl ); + + SvXMLElementExport aSVGTspanElem( mrExport, XML_NAMESPACE_NONE, aXMLElemTspan, mbIWS, mbIWS ); + mrExport.AddAttribute( XML_NAMESPACE_NONE, aXMLAttrXLinkHRef, msUrl ); + { + SvXMLElementExport aSVGAElem( mrExport, XML_NAMESPACE_NONE, aXMLElemA, mbIWS, mbIWS ); + mrExport.GetDocHandler()->characters( sTextContent ); + } + } + else + { + SvXMLElementExport aSVGTspanElem( mrExport, XML_NAMESPACE_NONE, aXMLElemTspan, mbIWS, mbIWS ); + mrExport.GetDocHandler()->characters( sTextContent ); + } + mnTextWidth += mpVDev->GetTextWidth( sTextContent ); } |