---
sw/source/filter/rtf/rtffld.cxx | 50 -
sw/source/filter/ww8/ww8atr.cxx | 12 +++
sw/source/filter/ww8/ww8par5.cxx | 63 +++--
3 files changed, 65 insertions(+), 60 deletions(-)
diff --git a/sw/source/filter/rtf/rtffld.cxx b/sw/source/filter/rtf/rtffld.cxx
index f5d9058..ccac5f1 100644
--- a/sw/source/filter/rtf/rtffld.cxx
+++ b/sw/source/filter/rtf/rtffld.cxx
@@ -813,8 +813,7 @@ int SwRTFParser::MakeFieldInst( String rFieldStr )
case RTFFLD_REF:
{
String sOrigBkmName;
-bool bChapterNr = false;
-bool bAboveBelow = false;
+REFERENCEMARK eFormat = REF_CONTENT;
RtfFieldSwitch aRFS( aSaveStr );
while( !aRFS.IsAtEnd() )
@@ -828,42 +827,35 @@ int SwRTFParser::MakeFieldInst( String rFieldStr )
sOrigBkmName = sParam;
break;
+/* References to numbers in Word could be either to a
numbered
+paragraph or to a chapter number. However Word does not
seem to
+have the capability we do, of refering to the chapter
number some
+other bookmark is in. As a result, cross-references to
chapter
+numbers in a word document will be cross-references to a
numbered
+paragraph, being the chapter heading paragraph. As it
happens, our
+cross-references to numbered paragraphs will do the right
thing
+when the target is a numbered chapter heading, so there is
no need
+for us to use the REF_CHAPTER bookmark format on import.
+*/
case 'n':
+eFormat = REF_NUMBER_NO_CONTEXT;
+break;
case 'r':
+eFormat = REF_NUMBER;
+break;
case 'w':
-bChapterNr = true; // activate flag 'Chapter Number'
+eFormat = REF_NUMBER_FULL_CONTEXT;
break;
case 'p':
-bAboveBelow = true;
+eFormat = REF_UPDOWN;
break;
}
}
-if (!bAboveBelow || bChapterNr)
-{
-if (bChapterNr)
-{
-SwGetRefField aFld(
-(SwGetRefFieldType*)pDoc-GetSysFldType( RES_GETREFFLD
),
-sOrigBkmName,REF_BOOKMARK,0,REF_CHAPTER);
-pDoc-InsertPoolItem( *pPam, SwFmtFld( aFld ), 0 );
-}
-else
-{
-SwGetRefField aFld(
-(SwGetRefFieldType*)pDoc-GetSysFldType( RES_GETREFFLD
),
-sOrigBkmName,REF_BOOKMARK,0,REF_CONTENT);
-pDoc-InsertPoolItem( *pPam, SwFmtFld( aFld ), 0 );
-}
-}
-
-if( bAboveBelow )
-{
-SwGetRefField aFld( (SwGetRefFieldType*)
-pDoc-GetSysFldType( RES_GETREFFLD ), sOrigBkmName,
REF_BOOKMARK, 0,
-REF_UPDOWN );
-pDoc-InsertPoolItem(*pPam, SwFmtFld(aFld), 0);
-}
+SwGetRefField aFld(
+(SwGetRefFieldType*)pDoc-GetSysFldType( RES_GETREFFLD ),
+sOrigBkmName,REF_BOOKMARK,0,eFormat);
+pDoc-InsertPoolItem( *pPam, SwFmtFld( aFld ), 0 );
}
break;
diff --git a/sw/source/filter/ww8/ww8atr.cxx b/sw/source/filter/ww8/ww8atr.cxx
index 0ea9201..1464e42 100644
--- a/sw/source/filter/ww8/ww8atr.cxx
+++ b/sw/source/filter/ww8/ww8atr.cxx
@@ -2831,6 +2831,18 @@ void AttributeOutputBase::TextField( const SwFmtFld
rField )
sStr = FieldString(eFld);
sStr += GetExport().GetBookmarkName(nSubType,
rRFld.GetSetRefName(), 0);
+switch (pFld-GetFormat())
+{
+case REF_NUMBER:
+sStr.APPEND_CONST_ASC( \\r);
+break;
+case REF_NUMBER_NO_CONTEXT:
+sStr.APPEND_CONST_ASC( \\n);
+break;
+case REF_NUMBER_FULL_CONTEXT:
+sStr.APPEND_CONST_ASC( \\w);
+break;
+}
break;
case REF_FOOTNOTE:
case REF_ENDNOTE:
diff --git a/sw/source/filter/ww8/ww8par5.cxx b/sw/source/filter/ww8/ww8par5.cxx
index 759293d..62d73b6 100644
--- a/sw/source/filter/ww8/ww8par5.cxx
+++ b/sw/source/filter/ww8/ww8par5.cxx
@@ -2089,8 +2089,7 @@ eF_ResT SwWW8ImplReader::Read_F_Set( WW8FieldDesc* pF,