---
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, String& rStr )
eF_ResT SwWW8ImplReader::Read_F_Ref( WW8FieldDesc*, String& rStr )
{ // Reference - Field
String sOrigBkmName;
- bool bChapterNr = false;
- bool bAboveBelow = false;
+ REFERENCEMARK eFormat = REF_CONTENT;
long nRet;
_ReadFieldParams aReadParam( rStr );
@@ -2102,14 +2101,29 @@ eF_ResT SwWW8ImplReader::Read_F_Ref( WW8FieldDesc*, String& rStr )
if( !sOrigBkmName.Len() ) // get name of bookmark
sOrigBkmName = aReadParam.GetResult();
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;
case 'h':
break;
@@ -2121,36 +2135,23 @@ eF_ResT SwWW8ImplReader::Read_F_Ref( WW8FieldDesc*, String& rStr )
String sBkmName(GetMappedBookmark(sOrigBkmName));
- if (!bAboveBelow || bChapterNr)
+ SwGetRefField aFld(
+ (SwGetRefFieldType*)rDoc.GetSysFldType( RES_GETREFFLD ),
+ sBkmName,REF_BOOKMARK,0,eFormat);
+
+ if (eFormat == REF_CONTENT)
{
- if (bChapterNr)
- {
- SwGetRefField aFld(
- (SwGetRefFieldType*)rDoc.GetSysFldType( RES_GETREFFLD ),
- sBkmName,REF_BOOKMARK,0,REF_CHAPTER);
- rDoc.InsertPoolItem( *pPaM, SwFmtFld( aFld ), 0 );
- }
- else
- {
- /*
- If we are just inserting the contents of the bookmark, then it
- is possible that the bookmark is actually a variable, so we
- must store it until the end of the document to see if it was,
- in which case we'll turn it into a show variable
- */
- SwGetRefField aFld(
- (SwGetRefFieldType*)rDoc.GetSysFldType( RES_GETREFFLD ),
- sBkmName,REF_BOOKMARK,0,REF_CONTENT);
- pReffingStck->NewAttr( *pPaM->GetPoint(), SwFmtFld(aFld) );
- pReffingStck->SetAttr( *pPaM->GetPoint(), RES_TXTATR_FIELD);
- }
+ /*
+ If we are just inserting the contents of the bookmark, then it
+ is possible that the bookmark is actually a variable, so we
+ must store it until the end of the document to see if it was,
+ in which case we'll turn it into a show variable
+ */
+ pReffingStck->NewAttr( *pPaM->GetPoint(), SwFmtFld(aFld) );
+ pReffingStck->SetAttr( *pPaM->GetPoint(), RES_TXTATR_FIELD);
}
-
- if( bAboveBelow )
+ else
{
- SwGetRefField aFld( (SwGetRefFieldType*)
- rDoc.GetSysFldType( RES_GETREFFLD ), sBkmName, REF_BOOKMARK, 0,
- REF_UPDOWN );
rDoc.InsertPoolItem(*pPaM, SwFmtFld(aFld), 0);
}
return FLD_OK;
--
1.7.2.5
Context
- [Libreoffice] [PATCH] Fix 33898 - import/export xrefs to numbered paras · Troy Rollo
Privacy Policy |
Impressum (Legal Info) |
Copyright information: Unless otherwise specified, all text and images
on this website are licensed under the
Creative Commons Attribution-Share Alike 3.0 License.
This does not include the source code of LibreOffice, which is
licensed under the Mozilla Public License (
MPLv2).
"LibreOffice" and "The Document Foundation" are
registered trademarks of their corresponding registered owners or are
in actual use as trademarks in one or more countries. Their respective
logos and icons are also subject to international copyright laws. Use
thereof is explained in our
trademark policy.