diff options
author | Troy Rollo <libreoffice@troy.rollo.name> | 2013-08-26 15:14:40 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2013-08-26 15:16:47 +0200 |
commit | 4760c79afe37eaa95a93f3e8ad0a2775c86359dd (patch) | |
tree | 257b6a32ab80fdaf378d58f73d99535f60bfa6cb | |
parent | 980cb9e125800dc29e0e37ccb6e5817881e640ae (diff) |
fdo#33960: sw: fix cross reference fields some more
Change-Id: I46f9cf4132835c10ad82c9b014e5e8647902ab5e
Signed-off-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | sw/qa/complex/writer/CheckCrossReferences.java | 74 | ||||
-rw-r--r-- | sw/qa/complex/writer/testdocuments/CheckCrossReferences.odt | bin | 11628 -> 17626 bytes | |||
-rw-r--r-- | sw/source/core/doc/number.cxx | 16 |
3 files changed, 56 insertions, 34 deletions
diff --git a/sw/qa/complex/writer/CheckCrossReferences.java b/sw/qa/complex/writer/CheckCrossReferences.java index 541ea49d4c72..c12f81a74e91 100644 --- a/sw/qa/complex/writer/CheckCrossReferences.java +++ b/sw/qa/complex/writer/CheckCrossReferences.java @@ -38,28 +38,20 @@ public class CheckCrossReferences { public com.sun.star.text.XTextField getNextField() throws com.sun.star.uno.Exception { - if ( xPortionEnum != null ) { - while ( xPortionEnum.hasMoreElements() ) { - com.sun.star.beans.XPropertySet xPortionProps = + while (true) { + while (xPortionEnum == null) { + if (!xParaEnum.hasMoreElements()) + fail("Cannot retrieve next field."); + + com.sun.star.container.XEnumerationAccess aPara = UnoRuntime.queryInterface( - com.sun.star.beans.XPropertySet.class , xPortionEnum.nextElement()); - final String sPortionType = - xPortionProps.getPropertyValue( "TextPortionType" ).toString(); - if ( sPortionType.equals( "TextField") ) { - com.sun.star.text.XTextField xField = UnoRuntime.queryInterface( - com.sun.star.text.XTextField.class, - xPortionProps.getPropertyValue( "TextField" ) ); - assertNotNull("Cannot retrieve next field.", xField); - return xField; - } + com.sun.star.container.XEnumerationAccess.class, xParaEnum.nextElement()); + xPortionEnum = aPara.createEnumeration(); } - } - while ( xParaEnum.hasMoreElements() ) { - com.sun.star.container.XEnumerationAccess aPara = - UnoRuntime.queryInterface( - com.sun.star.container.XEnumerationAccess.class, xParaEnum.nextElement()); - xPortionEnum = aPara.createEnumeration(); + if ( xPortionEnum == null ) + break; + while ( xPortionEnum.hasMoreElements() ) { com.sun.star.beans.XPropertySet xPortionProps = UnoRuntime.queryInterface( @@ -74,9 +66,9 @@ public class CheckCrossReferences { return xField; } } + xPortionEnum = null; } - fail("Cannot retrieve next field."); return null; // unreachable } @@ -135,6 +127,12 @@ public class CheckCrossReferences { final String FldResult4 = "1"; final String FldResult5 = "1"; final String FldResult6 = "A.1"; + final String FldResult7 = "2(a)"; + final String FldResult8 = "2(b)"; + final String FldResult9 = "2"; + final String FldResult10 = "1(a)"; + final String FldResult11 = "(b)"; + final String FldResult12 = "(a)"; // variables for current field com.sun.star.text.XTextField xField = null; @@ -175,6 +173,42 @@ public class CheckCrossReferences { checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult6 ); checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult4 ); checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult6 ); + + xField = getNextField(); + xProps = getFieldProps( xField ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult7 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult12 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult7 ); + + xField = getNextField(); + xProps = getFieldProps( xField ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult8 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult11 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult8 ); + + xField = getNextField(); + xProps = getFieldProps( xField ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult9 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult9 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult9 ); + + xField = getNextField(); + xProps = getFieldProps( xField ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult4 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult4 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult4 ); + + xField = getNextField(); + xProps = getFieldProps( xField ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult10 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult12 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult10 ); + + xField = getNextField(); + xProps = getFieldProps( xField ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER, FldResult12 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_NO_CONTEXT, FldResult12 ); + checkField( xField, xProps, com.sun.star.text.ReferenceFieldPart.NUMBER_FULL_CONTEXT, FldResult7 ); } // insert a certain cross-reference bookmark and a reference field to this bookmark diff --git a/sw/qa/complex/writer/testdocuments/CheckCrossReferences.odt b/sw/qa/complex/writer/testdocuments/CheckCrossReferences.odt Binary files differindex d8102f0356f8..d9484421d3dc 100644 --- a/sw/qa/complex/writer/testdocuments/CheckCrossReferences.odt +++ b/sw/qa/complex/writer/testdocuments/CheckCrossReferences.odt diff --git a/sw/source/core/doc/number.cxx b/sw/source/core/doc/number.cxx index 9e5be223699a..40dd9dceebc7 100644 --- a/sw/source/core/doc/number.cxx +++ b/sw/source/core/doc/number.cxx @@ -739,7 +739,6 @@ String SwNumRule::MakeRefNumString( const SwNodeNum& rNodeNum, if ( rNodeNum.GetLevelInListTree() >= 0 ) { bool bOldHadPrefix = true; - bool bFirstIteration = true; OUString sOldPrefix; const SwNodeNum* pWorkingNodeNum( &rNodeNum ); @@ -779,7 +778,7 @@ String SwNumRule::MakeRefNumString( const SwNodeNum& rNodeNum, aExtremities.nPrefixChars -= nStrip; } - if ((bFirstIteration || bOldHadPrefix) && + if ((bOldHadPrefix) && aExtremities.nSuffixChars && !aExtremities.nPrefixChars ) @@ -787,11 +786,6 @@ String SwNumRule::MakeRefNumString( const SwNodeNum& rNodeNum, int nStrip2 = aPrevStr.Len(); while (aPrevStr.Len() - nStrip2 < aExtremities.nSuffixChars) { - char const cur = aPrevStr.GetChar(nStrip2); - if (!bFirstIteration && '\t' != cur && ' ' != cur) - { - break; - } --nStrip2; } if (nStrip2 < aPrevStr.Len()) @@ -799,7 +793,7 @@ String SwNumRule::MakeRefNumString( const SwNodeNum& rNodeNum, aPrevStr.Erase(nStrip2, aPrevStr.Len() - nStrip2); } } - else if (sOldPrefix.getLength()) + else if (!aExtremities.nSuffixChars && !bOldHadPrefix) { aRefNumStr.Insert(sOldPrefix, 0); } @@ -809,11 +803,6 @@ String SwNumRule::MakeRefNumString( const SwNodeNum& rNodeNum, aRefNumStr.Insert( aPrevStr, 0 ); } - else if ( aRefNumStr.Len() > 0 ) - { - sOldPrefix += " "; - bOldHadPrefix = true; - } if ( bInclSuperiorNumLabels && pWorkingNodeNum->GetLevelInListTree() > 0 ) { @@ -830,7 +819,6 @@ String SwNumRule::MakeRefNumString( const SwNodeNum& rNodeNum, { break; } - bFirstIteration = false; } while ( pWorkingNodeNum && pWorkingNodeNum->GetLevelInListTree() >= 0 && static_cast<sal_uInt8>(pWorkingNodeNum->GetLevelInListTree()) >= nRestrictInclToThisLevel ); |