Kaydet (Commit) 31de0ac3 authored tarafından Miklos Vajna's avatar Miklos Vajna

RTF import: handle target of hyperlink

lcov pointed out that there is no testcase for the export of this, and
turns out the import part wasn't implemented. As a side effect this
implements the same for DOCX import as well.

Change-Id: I016ebc100ec3856bf3a43aea8ea55af72c2ead1e
üst 3713c17e
{\rtf1
\pard\plain
{
{\field
{\*\fldinst HYPERLINK "http://libreoffice.org/" \\t "_blank" }
{\fldrslt
{http://libreoffice.org/}
}
}
}
\par }
...@@ -1180,6 +1180,12 @@ DECLARE_RTFEXPORT_TEST(testLeveljcCenter, "leveljc-center.rtf") ...@@ -1180,6 +1180,12 @@ DECLARE_RTFEXPORT_TEST(testLeveljcCenter, "leveljc-center.rtf")
CPPUNIT_FAIL("no Adjust property"); CPPUNIT_FAIL("no Adjust property");
} }
DECLARE_RTFEXPORT_TEST(testHyperlinkTarget, "hyperlink-target.rtf")
{
// This was empty, hyperlink target was lost on import.
CPPUNIT_ASSERT_EQUAL(OUString("_blank"), getProperty<OUString>(getRun(getParagraph(1), 1), "HyperLinkTarget"));
}
CPPUNIT_PLUGIN_IMPLEMENT(); CPPUNIT_PLUGIN_IMPLEMENT();
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -3868,6 +3868,7 @@ void DomainMapper_Impl::CloseFieldCommand() ...@@ -3868,6 +3868,7 @@ void DomainMapper_Impl::CloseFieldCommand()
::std::vector<OUString>::const_iterator aPartIt = aParts.begin(); ::std::vector<OUString>::const_iterator aPartIt = aParts.begin();
OUString sURL; OUString sURL;
OUString sTarget;
while (aPartIt != aItEnd) while (aPartIt != aItEnd)
{ {
...@@ -3889,6 +3890,8 @@ void DomainMapper_Impl::CloseFieldCommand() ...@@ -3889,6 +3890,8 @@ void DomainMapper_Impl::CloseFieldCommand()
if (aPartIt == aItEnd) if (aPartIt == aItEnd)
break; break;
sTarget = *aPartIt;
} }
else else
{ {
...@@ -3916,6 +3919,9 @@ void DomainMapper_Impl::CloseFieldCommand() ...@@ -3916,6 +3919,9 @@ void DomainMapper_Impl::CloseFieldCommand()
} }
pContext->SetHyperlinkURL(sURL); pContext->SetHyperlinkURL(sURL);
} }
if (!sTarget.isEmpty())
pContext->SetHyperlinkTarget(sTarget);
} }
break; break;
case FIELD_IF : break; case FIELD_IF : break;
...@@ -4579,6 +4585,9 @@ void DomainMapper_Impl::PopFieldContext() ...@@ -4579,6 +4585,9 @@ void DomainMapper_Impl::PopFieldContext()
xCrsrProperties->setPropertyValue(getPropertyName(PROP_HYPER_LINK_U_R_L), uno:: xCrsrProperties->setPropertyValue(getPropertyName(PROP_HYPER_LINK_U_R_L), uno::
makeAny(pContext->GetHyperlinkURL())); makeAny(pContext->GetHyperlinkURL()));
if (!pContext->GetHyperlinkTarget().isEmpty())
xCrsrProperties->setPropertyValue("HyperLinkTarget", uno::makeAny(pContext->GetHyperlinkTarget()));
if (m_bStartTOC) { if (m_bStartTOC) {
OUString sDisplayName("Index Link"); OUString sDisplayName("Index Link");
xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::makeAny(sDisplayName)); xCrsrProperties->setPropertyValue("VisitedCharStyleName",uno::makeAny(sDisplayName));
......
...@@ -150,6 +150,8 @@ class FieldContext ...@@ -150,6 +150,8 @@ class FieldContext
css::uno::Reference<css::beans::XPropertySet> m_xTC; // TOX entry css::uno::Reference<css::beans::XPropertySet> m_xTC; // TOX entry
css::uno::Reference<css::beans::XPropertySet> m_xCustomField; css::uno::Reference<css::beans::XPropertySet> m_xCustomField;
OUString m_sHyperlinkURL; OUString m_sHyperlinkURL;
/// A frame for the the hyperlink when one exists.
OUString m_sHyperlinkTarget;
FFDataHandler::Pointer_t m_pFFDataHandler; FFDataHandler::Pointer_t m_pFFDataHandler;
FormControlHelper::Pointer_t m_pFormControlHelper; FormControlHelper::Pointer_t m_pFormControlHelper;
/// (Character) properties of the field itself. /// (Character) properties of the field itself.
...@@ -188,6 +190,8 @@ public: ...@@ -188,6 +190,8 @@ public:
void SetHyperlinkURL( const OUString& rURL ) { m_sHyperlinkURL = rURL; } void SetHyperlinkURL( const OUString& rURL ) { m_sHyperlinkURL = rURL; }
const OUString& GetHyperlinkURL() { return m_sHyperlinkURL; } const OUString& GetHyperlinkURL() { return m_sHyperlinkURL; }
void SetHyperlinkTarget(const OUString& rTarget) { m_sHyperlinkTarget = rTarget; }
const OUString& GetHyperlinkTarget() { return m_sHyperlinkTarget; }
void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { m_pFFDataHandler = pFFDataHandler; } void setFFDataHandler(FFDataHandler::Pointer_t pFFDataHandler) { m_pFFDataHandler = pFFDataHandler; }
const FFDataHandler::Pointer_t& getFFDataHandler() const { return m_pFFDataHandler; } const FFDataHandler::Pointer_t& getFFDataHandler() const { return m_pFFDataHandler; }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment