Kaydet (Commit) f14e6e06 authored tarafından Michael Stahl's avatar Michael Stahl

fdo#84685: writerfilter: RTF import: support \xe index entry

Change-Id: Ia957541a5997961aa86b2eb8537ebd29d3092691
üst 38b8c1e8
{\rtf1\ansi\ansicpg1252\uc1
\pard
{\v {\xe {\v {\f0\fs20 Key the 1st}}}} Some text
\par
}
......@@ -33,6 +33,7 @@
#include <com/sun/star/text/SizeType.hpp>
#include <com/sun/star/text/TableColumnSeparator.hpp>
#include <com/sun/star/text/TextContentAnchorType.hpp>
#include <com/sun/star/text/XDocumentIndexMark.hpp>
#include <com/sun/star/text/XFootnotesSupplier.hpp>
#include <com/sun/star/text/XPageCursor.hpp>
#include <com/sun/star/text/XTextGraphicObjectsSupplier.hpp>
......@@ -2083,6 +2084,17 @@ DECLARE_RTFIMPORT_TEST(testUnbalancedColumns, "unbalanced-columns.rtf")
CPPUNIT_ASSERT_EQUAL(true, getProperty<bool>(xTextSections->getByIndex(0), "DontBalanceTextColumns"));
}
DECLARE_RTFIMPORT_TEST(testFdo84685, "fdo84685.rtf")
{
// index mark was not imported
uno::Reference<text::XDocumentIndexMark> xMark(
getProperty<uno::Reference<text::XDocumentIndexMark>>(
getRun(getParagraph(1), 1),
"DocumentIndexMark"));
CPPUNIT_ASSERT(xMark.is());
CPPUNIT_ASSERT_EQUAL(OUString("Key the 1st"), getProperty<OUString>(xMark, "PrimaryKey"));
}
DECLARE_RTFIMPORT_TEST(testFdo83204, "fdo83204.rtf")
{
// This was Standard, \sN was ignored after \bkmkstart and \pard.
......
......@@ -149,6 +149,7 @@ enum RTFDestinationState
DESTINATION_BACKGROUND,
DESTINATION_SHAPEGROUP,
DESTINATION_FOOTNOTESEPARATOR,
DESTINATION_INDEXENTRY,
};
enum RTFKeyword
......
......@@ -1259,6 +1259,7 @@ void RTFDocumentImpl::text(OUString& rString)
case DESTINATION_MSUPHIDE:
case DESTINATION_MTYPE:
case DESTINATION_MGROW:
case DESTINATION_INDEXENTRY:
m_aStates.top().pDestinationText->append(rString);
break;
default:
......@@ -1729,6 +1730,9 @@ int RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
case RTF_BKMKEND:
m_aStates.top().nDestinationState = DESTINATION_BOOKMARKEND;
break;
case RTF_XE:
m_aStates.top().nDestinationState = DESTINATION_INDEXENTRY;
break;
case RTF_REVTBL:
m_aStates.top().nDestinationState = DESTINATION_REVISIONTABLE;
break;
......@@ -5186,6 +5190,20 @@ int RTFDocumentImpl::popState()
Mapper().props(lcl_getBookmarkProperties(m_aBookmarks[aStr], aStr));
}
break;
case DESTINATION_INDEXENTRY:
{
if (&m_aStates.top().aDestinationText != m_aStates.top().pDestinationText)
break; // not for nested group
OUString str(m_aStates.top().pDestinationText->makeStringAndClear());
// dmapper expects this as a field, so let's fake something...
str = "XE \"" + str.replaceAll("\"", "\\\"") + "\"";
singleChar(0x13);
Mapper().utext(reinterpret_cast<sal_uInt8 const*>(str.getStr()), str.getLength());
singleChar(0x14);
// no result
singleChar(0x15);
}
break;
case DESTINATION_FORMFIELDNAME:
{
if (&m_aStates.top().aDestinationText != m_aStates.top().pDestinationText)
......
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