cp#2013101510000026: doc import of comments affecting more text nodes
Change-Id: I3932d82cb4cd640b19957b93cc7e59711af1b564
This commit is contained in:
Binary file not shown.
@@ -163,7 +163,6 @@ DECLARE_WW8EXPORT_TEST(testFdo59530, "fdo59530.doc")
|
|||||||
uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY);
|
uno::Reference<beans::XPropertySet> xPropertySet(xRunEnum->nextElement(), uno::UNO_QUERY);
|
||||||
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty<OUString>(xPropertySet, "TextPortionType"));
|
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty<OUString>(xPropertySet, "TextPortionType"));
|
||||||
xRunEnum->nextElement();
|
xRunEnum->nextElement();
|
||||||
xRunEnum->nextElement();
|
|
||||||
xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY);
|
xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY);
|
||||||
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldEnd"), getProperty<OUString>(xPropertySet, "TextPortionType"));
|
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldEnd"), getProperty<OUString>(xPropertySet, "TextPortionType"));
|
||||||
|
|
||||||
@@ -173,6 +172,20 @@ DECLARE_WW8EXPORT_TEST(testFdo59530, "fdo59530.doc")
|
|||||||
uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
|
uno::Reference<container::XEnumeration> xFields(xFieldsAccess->createEnumeration());
|
||||||
xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY);
|
xPropertySet.set(xFields->nextElement(), uno::UNO_QUERY);
|
||||||
CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty<OUString>(xPropertySet, "Initials"));
|
CPPUNIT_ASSERT_EQUAL(OUString("M"), getProperty<OUString>(xPropertySet, "Initials"));
|
||||||
|
|
||||||
|
// Test commented text range which spans over more text nodes
|
||||||
|
// Comment starts in the second paragraph
|
||||||
|
xRunEnumAccess.set(xParaEnum->nextElement(), uno::UNO_QUERY);
|
||||||
|
xRunEnum = xRunEnumAccess->createEnumeration();
|
||||||
|
xRunEnum->nextElement();
|
||||||
|
xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldStart"), getProperty<OUString>(xPropertySet, "TextPortionType"));
|
||||||
|
// Comment ends in the third paragraph
|
||||||
|
xRunEnumAccess.set(xParaEnum->nextElement(), uno::UNO_QUERY);
|
||||||
|
xRunEnum = xRunEnumAccess->createEnumeration();
|
||||||
|
xRunEnum->nextElement();
|
||||||
|
xPropertySet.set(xRunEnum->nextElement(), uno::UNO_QUERY);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(OUString("TextFieldEnd"), getProperty<OUString>(xPropertySet, "TextPortionType"));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -2162,11 +2162,50 @@ long SwWW8ImplReader::Read_And(WW8PLCFManResult* pRes)
|
|||||||
WW8_CP nStart = GetAnnotationStart(nAtnIndex);
|
WW8_CP nStart = GetAnnotationStart(nAtnIndex);
|
||||||
WW8_CP nEnd = GetAnnotationEnd(nAtnIndex);
|
WW8_CP nEnd = GetAnnotationEnd(nAtnIndex);
|
||||||
sal_Int32 nLen = nEnd - nStart;
|
sal_Int32 nLen = nEnd - nStart;
|
||||||
// Don't support ranges affecting multiple SwTxtNode for now.
|
if( nLen )
|
||||||
if (nLen && pPaM->GetPoint()->nContent.GetIndex() >= nLen)
|
{
|
||||||
{
|
if (pPaM->GetPoint()->nContent.GetIndex() >= nLen)
|
||||||
pPaM->SetMark();
|
{
|
||||||
pPaM->GetPoint()->nContent -= nLen;
|
pPaM->SetMark();
|
||||||
|
pPaM->GetPoint()->nContent -= nLen;
|
||||||
|
}
|
||||||
|
else if (pPaM->GetPoint()->nNode.GetNode().IsTxtNode() )
|
||||||
|
{
|
||||||
|
pPaM->SetMark();
|
||||||
|
nLen -= pPaM->GetPoint()->nContent.GetIndex();
|
||||||
|
|
||||||
|
SwTxtNode* pTxtNode = 0;
|
||||||
|
// Find first text node which affected by the comment
|
||||||
|
while( pPaM->GetPoint()->nNode >= 0 )
|
||||||
|
{
|
||||||
|
SwNode* pNode = 0;
|
||||||
|
// Find previous text node
|
||||||
|
do
|
||||||
|
{
|
||||||
|
pPaM->GetPoint()->nNode--;
|
||||||
|
nLen--; // End line character
|
||||||
|
pNode = &pPaM->GetPoint()->nNode.GetNode();
|
||||||
|
}
|
||||||
|
while( !pNode->IsTxtNode() && pPaM->GetPoint()->nNode >= 0 );
|
||||||
|
|
||||||
|
// Subtrackt previous text node's length
|
||||||
|
if( pNode && pNode->IsTxtNode() )
|
||||||
|
{
|
||||||
|
pTxtNode = pNode->GetTxtNode();
|
||||||
|
if( nLen < pTxtNode->Len() )
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
nLen -= pTxtNode->Len();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set postion of the text range's first character
|
||||||
|
if( pTxtNode )
|
||||||
|
{
|
||||||
|
pTxtNode->MakeStartIndex(&pPaM->GetPoint()->nContent);
|
||||||
|
pPaM->GetPoint()->nContent += pTxtNode->Len() - nLen;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user