nddelima    2004/08/04 14:09:06

  Modified:    java/src/org/apache/xerces/dom RangeImpl.java
  Log:
  DOM Ranges Fix:  The start position of a Range is guaranteed to never be after the 
end position. To enforce this restriction, if the start is set to be at a position 
after the end, the Range is collapsed to that position. Similarly, if the end is set 
to be at a position before the start, the Range is collapsed to that position.
  
  Revision  Changes    Path
  1.31      +44 -28    xml-xerces/java/src/org/apache/xerces/dom/RangeImpl.java
  
  Index: RangeImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-xerces/java/src/org/apache/xerces/dom/RangeImpl.java,v
  retrieving revision 1.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- RangeImpl.java    4 Aug 2004 20:24:13 -0000       1.30
  +++ RangeImpl.java    4 Aug 2004 21:09:05 -0000       1.31
  @@ -174,12 +174,15 @@
           fStartContainer = refNode;
           fStartOffset = offset;
           
  -        // If one boundary-point of a Range is set to have a root container other
  +        // If one boundary-point of a Range is set to have a root container
  +        // other
           // than the current one for the Range, the Range should be collapsed to
           // the new position.
  -         if (getCommonAncestorContainer() == null ) {
  -             collapse(true);
  -         }  
  +        // The start position of a Range should never be after the end position.
  +        if (getCommonAncestorContainer() == null
  +                || (fStartContainer == fEndContainer && fEndOffset < fStartOffset)) 
{
  +            collapse(true);
  +        } 
       }
       
       public void setEnd(Node refNode, int offset)
  @@ -206,13 +209,15 @@
           fEndContainer = refNode;
           fEndOffset = offset;
           
  -        // If one boundary-point of a Range is set to have a root container other
  +        // If one boundary-point of a Range is set to have a root container
  +        // other
           // than the current one for the Range, the Range should be collapsed to
           // the new position.
  -         if (getCommonAncestorContainer() == null ) {
  -             collapse(true);
  -         }  
  -
  +        // The start position of a Range should never be after the end position.
  +        if (getCommonAncestorContainer() == null
  +                || (fStartContainer == fEndContainer && fEndOffset < fStartOffset)) 
{
  +            collapse(false);
  +        } 
       }
   
       public void setStartBefore(Node refNode) 
  @@ -242,12 +247,15 @@
           }
           fStartOffset = i-1;
           
  -        // If one boundary-point of a Range is set to have a root container other
  +        // If one boundary-point of a Range is set to have a root container
  +        // other
           // than the current one for the Range, the Range should be collapsed to
           // the new position.
  -         if (getCommonAncestorContainer() == null ) {
  -             collapse(true);
  -         }  
  +        // The start position of a Range should never be after the end position.
  +        if (getCommonAncestorContainer() == null
  +                || (fStartContainer == fEndContainer && fEndOffset < fStartOffset)) 
{
  +            collapse(true);
  +        }  
       }
       
       public void setStartAfter(Node refNode)
  @@ -276,12 +284,15 @@
           }
           fStartOffset = i;
           
  -        // If one boundary-point of a Range is set to have a root container other
  +        // If one boundary-point of a Range is set to have a root container
  +        // other
           // than the current one for the Range, the Range should be collapsed to
           // the new position.
  -         if (getCommonAncestorContainer() == null ) {
  -             collapse(true);
  -         }  
  +        // The start position of a Range should never be after the end position.
  +        if (getCommonAncestorContainer() == null
  +                || (fStartContainer == fEndContainer && fEndOffset < fStartOffset)) 
{
  +            collapse(true);
  +        } 
       }
       
       public void setEndBefore(Node refNode)
  @@ -310,12 +321,15 @@
           }
           fEndOffset = i-1;
   
  -        // If one boundary-point of a Range is set to have a root container other
  +        // If one boundary-point of a Range is set to have a root container
  +        // other
           // than the current one for the Range, the Range should be collapsed to
           // the new position.
  -         if (getCommonAncestorContainer() == null ) {
  -             collapse(false);
  -         }    
  +        // The start position of a Range should never be after the end position.
  +        if (getCommonAncestorContainer() == null
  +                || (fStartContainer == fEndContainer && fEndOffset < fStartOffset)) 
{
  +            collapse(false);
  +        } 
       }
                                               
       public void setEndAfter(Node refNode)
  @@ -344,12 +358,15 @@
           }
           fEndOffset = i;
           
  -       // If one boundary-point of a Range is set to have a root container other
  -       // than the current one for the Range, the Range should be collapsed to
  -       // the new position.
  -        if (getCommonAncestorContainer() == null ) {
  +        // If one boundary-point of a Range is set to have a root container
  +        // other
  +        // than the current one for the Range, the Range should be collapsed to
  +        // the new position.
  +        // The start position of a Range should never be after the end position.
  +        if (getCommonAncestorContainer() == null
  +                || (fStartContainer == fEndContainer && fEndOffset < fStartOffset)) 
{
               collapse(false);
  -        }                
  +        } 
       }
       
       public void collapse(boolean toStart) {
  @@ -712,7 +729,6 @@
           Range range = fDocument.createRange();
           range.setStart(fStartContainer, fStartOffset);
           range.setEnd(fEndContainer, fEndOffset);
  -        //System.out.println ("Clone Range " + fStartOffset);
           return range;
       }
       
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to