[webkit-changes] cvs commit: WebCore/layout-tests/editing/undo 4063751-expected.txt 4063751.html

Justin justing at opensource.apple.com
Thu Sep 29 00:47:09 PDT 2005


justing     05/09/29 00:47:09

  Modified:    .        ChangeLog
               khtml/editing composite_edit_command.cpp
                        composite_edit_command.h htmlediting.cpp
                        htmlediting.h insert_text_command.cpp
                        insert_text_command.h markup.cpp
                        rebalance_whitespace_command.cpp
  Added:       layout-tests/editing editingStyle.css
               layout-tests/editing/inserting 4278698-expected.txt
                        4278698.html
               layout-tests/editing/pasteboard 4076267-2-expected.txt
                        4076267-2.html 4076267-3-expected.txt
                        4076267-3.html 4076267-expected.txt 4076267.html
               layout-tests/editing/undo 4063751-expected.txt 4063751.html
  Log:
          Reviewed by harrison
  
          <rdar://problem/4278698> Adding a space inside whitespace:pre text collapses space
          <rdar://problem/4076267> Mail behaves oddly when pasting in text with leading/trailing whitespace
          <rdar://problem/4063751> Redo Typing can add extra space characters
          <rdar://problem/4120558> Mail/WebKit: Repeated capitalizeWord command deletes spaces and does not capitalize
  
          Reblance whitespace was finding the extent of surrounding whitespace incorrectly.
          createFragmentFromMarkup was not dealing with the special cases for spaces at the start/end
          of a line.  InsertTextCommand was removing collapsable whitespace without regard for the
          whitespace mode.  createFragmentFromMarkup and RebalanceWhitespace command now use one method
          to produce rebalanced sequences.  Removed special case whitespace handling from
          InsertTextCommand, that's RebalanceWhiteSpaceCommand's job.
  
          Test cases added:
          * layout-tests/editing/inserting/4278698.html: Added.
          * layout-tests/editing/pasteboard/4076267-2.html: Added.
          * layout-tests/editing/pasteboard/4076267-3.html: Added.
          * layout-tests/editing/pasteboard/4076267.html: Added.
          * layout-tests/editing/undo/4063751.html: Added.
  
          * khtml/editing/composite_edit_command.cpp:
          (khtml::CompositeEditCommand::rebalanceWhitespaceAt):
          Added.  The old convenience method, rebalanceWhitespace, can probably
          be removed, because there is never a non-caret selection after an editing command.
          * khtml/editing/composite_edit_command.h:
          * khtml/editing/htmlediting.cpp:
          (khtml::rebalanceWhitespaceInTextNode):
          * khtml/editing/htmlediting.h:
          * khtml/editing/insert_text_command.cpp:
          (khtml::InsertTextCommand::input):
          * khtml/editing/insert_text_command.h:
          * khtml/editing/markup.cpp:
          (khtml::createParagraphContentsFromString):
          (khtml::createFragmentFromText):
          * khtml/editing/rebalance_whitespace_command.cpp:
          (khtml::RebalanceWhitespaceCommand::RebalanceWhitespaceCommand):
          (khtml::isWhitespace): Changed from isNBSP to include all forms of whitespace, to aid readability.
          (khtml::RebalanceWhitespaceCommand::doApply):
          (khtml::RebalanceWhitespaceCommand::doUnapply): Removed the unused m_downstreamOffset
          * layout-tests/editing/editingStyle.css: Added.
  
  Revision  Changes    Path
  1.174     +45 -0     WebCore/ChangeLog
  
  Index: ChangeLog
  ===================================================================
  RCS file: /cvs/root/WebCore/ChangeLog,v
  retrieving revision 1.173
  retrieving revision 1.174
  diff -u -r1.173 -r1.174
  --- ChangeLog	28 Sep 2005 22:01:18 -0000	1.173
  +++ ChangeLog	29 Sep 2005 07:47:04 -0000	1.174
  @@ -1,3 +1,48 @@
  +2005-09-29  Justin Garcia  <justin.garcia at apple.com>
  +
  +        Reviewed by harrison
  +        
  +        <rdar://problem/4278698> Adding a space inside whitespace:pre text collapses space
  +        <rdar://problem/4076267> Mail behaves oddly when pasting in text with leading/trailing whitespace
  +        <rdar://problem/4063751> Redo Typing can add extra space characters
  +        <rdar://problem/4120558> Mail/WebKit: Repeated capitalizeWord command deletes spaces and does not capitalize
  +
  +        Reblance whitespace was finding the extent of surrounding whitespace incorrectly.  
  +        createFragmentFromMarkup was not dealing with the special cases for spaces at the start/end 
  +        of a line.  InsertTextCommand was removing collapsable whitespace without regard for the 
  +        whitespace mode.  createFragmentFromMarkup and RebalanceWhitespace command now use one method 
  +        to produce rebalanced sequences.  Removed special case whitespace handling from 
  +        InsertTextCommand, that's RebalanceWhiteSpaceCommand's job.
  +
  +        Test cases added:
  +        * layout-tests/editing/inserting/4278698.html: Added.
  +        * layout-tests/editing/pasteboard/4076267-2.html: Added.
  +        * layout-tests/editing/pasteboard/4076267-3.html: Added.
  +        * layout-tests/editing/pasteboard/4076267.html: Added.
  +        * layout-tests/editing/undo/4063751.html: Added.
  +
  +        * khtml/editing/composite_edit_command.cpp:
  +        (khtml::CompositeEditCommand::rebalanceWhitespaceAt):
  +        Added.  The old convenience method, rebalanceWhitespace, can probably
  +        be removed, because there is never a non-caret selection after an editing command.
  +        * khtml/editing/composite_edit_command.h:
  +        * khtml/editing/htmlediting.cpp:
  +        (khtml::rebalanceWhitespaceInTextNode):
  +        * khtml/editing/htmlediting.h:
  +        * khtml/editing/insert_text_command.cpp:
  +        (khtml::InsertTextCommand::input):
  +        * khtml/editing/insert_text_command.h:
  +        * khtml/editing/markup.cpp:
  +        (khtml::createParagraphContentsFromString):
  +        (khtml::createFragmentFromText):
  +        * khtml/editing/rebalance_whitespace_command.cpp:
  +        (khtml::RebalanceWhitespaceCommand::RebalanceWhitespaceCommand):
  +        (khtml::isWhitespace): Changed from isNBSP to include all forms of whitespace, to aid readability.
  +        (khtml::RebalanceWhitespaceCommand::doApply):
  +        (khtml::RebalanceWhitespaceCommand::doUnapply): Removed the unused m_downstreamOffset
  +        * layout-tests/editing/editingStyle.css: Added.
  +
  +
   2005-09-27  Maciej Stachowiak  <mjs at apple.com>
   
           Reviewed by Eric.
  
  
  
  1.14      +6 -0      WebCore/khtml/editing/composite_edit_command.cpp
  
  Index: composite_edit_command.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/composite_edit_command.cpp,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- composite_edit_command.cpp	27 Sep 2005 22:37:09 -0000	1.13
  +++ composite_edit_command.cpp	29 Sep 2005 07:47:06 -0000	1.14
  @@ -316,6 +316,12 @@
       applyCommandToComposite(cmd);
   }
   
  +void CompositeEditCommand::rebalanceWhitespaceAt(const Position &position)
  +{
  +    EditCommandPtr cmd(new RebalanceWhitespaceCommand(document(), position));
  +    applyCommandToComposite(cmd);    
  +}
  +
   void CompositeEditCommand::rebalanceWhitespace()
   {
       SelectionController selection = endingSelection();
  
  
  
  1.5       +1 -0      WebCore/khtml/editing/composite_edit_command.h
  
  Index: composite_edit_command.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/composite_edit_command.h,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- composite_edit_command.h	24 Sep 2005 01:18:55 -0000	1.4
  +++ composite_edit_command.h	29 Sep 2005 07:47:06 -0000	1.5
  @@ -65,6 +65,7 @@
       void insertTextIntoNode(DOM::TextImpl *node, int offset, const DOM::DOMString &text);
       void joinTextNodes(DOM::TextImpl *text1, DOM::TextImpl *text2);
       void rebalanceWhitespace();
  +    void rebalanceWhitespaceAt(const DOM::Position &position);
       void removeCSSProperty(DOM::CSSStyleDeclarationImpl *, int property);
       void removeFullySelectedNode(DOM::NodeImpl *node);
       void removeNodeAttribute(DOM::ElementImpl *, const DOM::QualifiedName& attribute);
  
  
  
  1.259     +39 -0     WebCore/khtml/editing/htmlediting.cpp
  
  Index: htmlediting.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/htmlediting.cpp,v
  retrieving revision 1.258
  retrieving revision 1.259
  diff -u -r1.258 -r1.259
  --- htmlediting.cpp	27 Sep 2005 22:37:09 -0000	1.258
  +++ htmlediting.cpp	29 Sep 2005 07:47:06 -0000	1.259
  @@ -87,6 +87,7 @@
   #include <kxmlcore/Assertions.h>
   #include "KWQLogging.h"
   #include "KWQKHTMLPart.h"
  +#include "KWQRegExp.h"
   #else
   #define ASSERT(assertion) ((void)0)
   #define ASSERT_WITH_MESSAGE(assertion, formatAndArgs...) ((void)0)
  @@ -98,6 +99,44 @@
   
   namespace khtml {
   
  +void rebalanceWhitespaceInTextNode(NodeImpl *node, unsigned int start, unsigned int length)
  +{
  +    static QRegExp nonRegularWhitespace("[\xa0\n]");
  +    static QString twoSpaces("  ");
  +    static QString nbsp("\xa0");
  +    static QString space(" ");
  +     
  +    ASSERT(node->isTextNode());
  +    TextImpl *textNode = static_cast<TextImpl *>(node);
  +    DOMString text = textNode->data();
  +    ASSERT(length <= text.length() && start + length <= text.length());
  +    
  +    QString substring = text.substring(start, length).qstring();
  +
  +    substring.replace(nonRegularWhitespace, space);
  +    
  +    // The sequence should alternate between spaces and nbsps, always ending in a regular space.
  +    // Note: This pattern doesn't mimic TextEdit editing behavior on other clients that don't
  +    // support our -khtml-nbsp-mode: space, but it comes close.
  +    static QString pattern("\xa0 ");
  +    int end = length - 1; 
  +    int i = substring.findRev(twoSpaces, end);
  +    while (i >= 0) {
  +        substring.replace(i , 2, pattern);
  +        i = substring.findRev(twoSpaces, i);
  +    }
  +    
  +    // Rendering will collapse any regular whitespace at the start or end of a line.  To prevent this, we use
  +    // a nbsp at the start and end of a text node.  This is sometimes unnecessary,  E.G. <a>link</a> text
  +    if (start == 0 && substring[0] == ' ')
  +        substring.replace(0, 1, nbsp);
  +    if (start + length == text.length() && substring[end] == ' ')
  +        substring.replace(end, 1, nbsp);
  +    
  +    text.remove(start, length);
  +    text.insert(DOMString(substring), start);
  +}
  +
   bool isTableStructureNode(const NodeImpl *node)
   {
       RenderObject *r = node->renderer();
  
  
  
  1.112     +1 -0      WebCore/khtml/editing/htmlediting.h
  
  Index: htmlediting.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/htmlediting.h,v
  retrieving revision 1.111
  retrieving revision 1.112
  diff -u -r1.111 -r1.112
  --- htmlediting.h	24 Sep 2005 01:18:56 -0000	1.111
  +++ htmlediting.h	29 Sep 2005 07:47:06 -0000	1.112
  @@ -54,6 +54,7 @@
   
   namespace khtml {
   
  +void rebalanceWhitespaceInTextNode(DOM::NodeImpl *node, unsigned int start, unsigned int length);
   DOM::DOMString &nonBreakingSpaceString();
   void derefNodesInList(QPtrList<DOM::NodeImpl> &list);
   
  
  
  
  1.10      +8 -79     WebCore/khtml/editing/insert_text_command.cpp
  
  Index: insert_text_command.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/insert_text_command.cpp,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- insert_text_command.cpp	27 Sep 2005 22:37:10 -0000	1.9
  +++ insert_text_command.cpp	29 Sep 2005 07:47:06 -0000	1.10
  @@ -156,42 +156,16 @@
           TextImpl *textNode = static_cast<TextImpl *>(startPosition.node());
           int offset = startPosition.offset();
   
  -        if (text == " ") {
  -            insertSpace(textNode, offset);
  -            endPosition = Position(textNode, offset + 1);
  +        insertTextIntoNode(textNode, offset, text);
  +        endPosition = Position(textNode, offset + text.length());
   
  -            m_charactersAdded++;
  -            rebalanceWhitespace();
  -        }
  -        else {
  -            const DOMString &existingText = textNode->data();
  -            if (textNode->length() >= 2 && offset >= 2 && isNBSP(existingText[offset - 1]) && !isCollapsibleWhitespace(existingText[offset - 2])) {
  -                // DOM looks like this:
  -                // character nbsp caret
  -                // As we are about to insert a non-whitespace character at the caret
  -                // convert the nbsp to a regular space.
  -                // EDIT FIXME: This needs to be improved some day to convert back only
  -                // those nbsp's added by the editor to make rendering come out right.
  -                replaceTextInNode(textNode, offset - 1, 1, " ");
  -            }
  -            unsigned int len = text.length();
  +        // The insertion may require adjusting adjacent whitespace, if it is present.
  +        rebalanceWhitespaceAt(endPosition);
  +        // Rebalancing on both sides isn't necessary if we've inserted a space.
  +        if (text != " ") 
  +            rebalanceWhitespaceAt(startPosition);
               
  -#if APPLE_CHANGES
  -            // When the user hits space to finish marked sequence, the string that
  -            // we receive ends with a normal space, not a non breaking space.  This code
  -            // ensures that the right kind of space is produced.
  -            if (KWQ(document()->part())->markedTextRange() && text[len-1] == ' ') {
  -                DOMString textWithoutTrailingSpace(text.unicode(), len-1);
  -                insertTextIntoNode(textNode, offset, textWithoutTrailingSpace);
  -                insertSpace(textNode, offset + len-1);
  -            } else
  -                insertTextIntoNode(textNode, offset, text);
  -#else
  -            insertTextIntoNode(textNode, offset, text);
  -#endif
  -            m_charactersAdded += len;
  -            endPosition = Position(textNode, offset + len);
  -        }
  +        m_charactersAdded += text.length();
       }
   
       setEndingSelection(SelectionController(startPosition, DOWNSTREAM, endPosition, SEL_DEFAULT_AFFINITY));
  @@ -257,51 +231,6 @@
       return Position(spanNode->lastChild(), spanNode->lastChild()->caretMaxOffset());
   }
   
  -void InsertTextCommand::insertSpace(TextImpl *textNode, unsigned offset)
  -{
  -    ASSERT(textNode);
  -
  -    DOMString text(textNode->data());
  -
  -    // count up all spaces and newlines in front of the caret
  -    // delete all collapsed ones
  -    // this will work out OK since the offset we have been passed has been upstream-ized 
  -    int count = 0;
  -    for (unsigned int i = offset; i < text.length(); i++) {
  -        if (isCollapsibleWhitespace(text[i]))
  -            count++;
  -        else 
  -            break;
  -    }
  -    if (count > 0) {
  -        // By checking the character at the downstream position, we can
  -        // check if there is a rendered WS at the caret
  -        Position pos(textNode, offset);
  -        Position downstream = pos.downstream();
  -        if (downstream.offset() < (int)text.length() && isCollapsibleWhitespace(text[downstream.offset()]))
  -            count--; // leave this WS in
  -        if (count > 0)
  -            deleteTextFromNode(textNode, offset, count);
  -    }
  -
  -    if (offset > 0 && offset <= text.length() - 1 && !isCollapsibleWhitespace(text[offset]) && !isCollapsibleWhitespace(text[offset - 1])) {
  -        // insert a "regular" space
  -        insertTextIntoNode(textNode, offset, " ");
  -        return;
  -    }
  -
  -    if (text.length() >= 2 && offset >= 2 && isNBSP(text[offset - 2]) && isNBSP(text[offset - 1])) {
  -        // DOM looks like this:
  -        // nbsp nbsp caret
  -        // insert a space between the two nbsps
  -        insertTextIntoNode(textNode, offset - 1, " ");
  -        return;
  -    }
  -
  -    // insert an nbsp
  -    insertTextIntoNode(textNode, offset, nonBreakingSpaceString());
  -}
  -
   bool InsertTextCommand::isInsertTextCommand() const
   {
       return true;
  
  
  
  1.6       +0 -1      WebCore/khtml/editing/insert_text_command.h
  
  Index: insert_text_command.h
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/insert_text_command.h,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- insert_text_command.h	16 Sep 2005 22:42:07 -0000	1.5
  +++ insert_text_command.h	29 Sep 2005 07:47:06 -0000	1.6
  @@ -46,7 +46,6 @@
       virtual bool isInsertTextCommand() const;
   
       DOM::Position prepareForTextInsertion(const DOM::Position& pos);
  -    void insertSpace(DOM::TextImpl *textNode, unsigned offset);
       DOM::Position insertTab(DOM::Position pos);
   
       unsigned m_charactersAdded;
  
  
  
  1.36      +1 -27     WebCore/khtml/editing/markup.cpp
  
  Index: markup.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/markup.cpp,v
  retrieving revision 1.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- markup.cpp	27 Sep 2005 22:37:10 -0000	1.35
  +++ markup.cpp	29 Sep 2005 07:47:06 -0000	1.36
  @@ -529,6 +529,7 @@
                   tabText = "";
               }
               NodeImpl *textNode = document->createTextNode(s);
  +            rebalanceWhitespaceInTextNode(textNode, 0, s.length());
               paragraph->appendChild(textNode, exceptionCode);
               ASSERT(exceptionCode == 0);
           }
  @@ -561,33 +562,6 @@
       if (!text.isEmpty()) {
           QString string = text;
   
  -        // FIXME: Wrap the NBSP's in a span that says "converted space".
  -        int offset = 0;
  -        int stringLength = string.length();
  -        while (1) {
  -            // FIXME: This only converts plain old spaces, and does not
  -            // deal with more exotic whitespace. Note that we want to 
  -            // leave newlines and returns alone at this point anyway, 
  -            // since those are handled specially later.
  -            int spacesPos = string.find("  ", offset);
  -            if (spacesPos < 0)
  -                break;
  -
  -            // Found two adjoining spaces.
  -            // Now, lookahead to see if these two spaces are followed by:
  -            //   1. another space and then a non-space
  -            //   2. another space and then the end of the string
  -            // If either 1 or 2 is true, replace the three spaces found with nbsp+nbsp+space, 
  -            // otherwise, replace the first two spaces with nbsp+space.
  -            if ((spacesPos + 3 < stringLength && string[spacesPos + 2] == ' ' && string[spacesPos + 3] != ' ')
  -                    || (spacesPos + 3 == stringLength && string[spacesPos + 2] == ' ')) {
  -                string.replace(spacesPos, 3, "\xA0\xA0 ");
  -            } else {
  -                string.replace(spacesPos, 2, "\xA0 ");
  -            }
  -            offset = spacesPos + 2;
  -        }
  -
           // Break string into paragraphs. Extra line breaks turn into empty paragraphs.
           string.replace(QString("\r\n"), "\n");
           string.replace('\r', '\n');
  
  
  
  1.4       +25 -62    WebCore/khtml/editing/rebalance_whitespace_command.cpp
  
  Index: rebalance_whitespace_command.cpp
  ===================================================================
  RCS file: /cvs/root/WebCore/khtml/editing/rebalance_whitespace_command.cpp,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- rebalance_whitespace_command.cpp	27 Sep 2005 22:37:11 -0000	1.3
  +++ rebalance_whitespace_command.cpp	29 Sep 2005 07:47:06 -0000	1.4
  @@ -44,7 +44,7 @@
   namespace khtml {
   
   RebalanceWhitespaceCommand::RebalanceWhitespaceCommand(DocumentImpl *document, const Position &pos)
  -    : EditCommand(document), m_position(pos), m_upstreamOffset(InvalidOffset), m_downstreamOffset(InvalidOffset)
  +    : EditCommand(document), m_position(pos), m_upstreamOffset(InvalidOffset)
   {
   }
   
  @@ -52,15 +52,13 @@
   {
   }
   
  -static inline bool isNBSP(const QChar &c)
  +static inline bool isWhitespace(const QChar &c)
   {
  -    return c.unicode() == 0xa0;
  +    return c.unicode() == 0xa0 || isCollapsibleWhitespace(c);
   }
   
   void RebalanceWhitespaceCommand::doApply()
   {
  -    static DOMString space(" ");
  -
       if (m_position.isNull() || !m_position.node()->isTextNode())
           return;
           
  @@ -69,70 +67,35 @@
       if (text.length() == 0)
           return;
       
  -    // find upstream offset
  -    int upstream = m_position.offset();
  -    while (upstream > 0 && isCollapsibleWhitespace(text[upstream - 1]) || isNBSP(text[upstream - 1])) {
  -        upstream--;
  -        m_upstreamOffset = upstream;
  +    int offset = m_position.offset();
  +    // If neither text[offset] nor text[offset - 1] are some form of whitespace, do nothing.
  +    if (!isWhitespace(text[offset])) {
  +        offset--;
  +        if (offset < 0 || !isWhitespace(text[offset]))
  +            return;
       }
  -
  -    // find downstream offset
  -    int downstream = m_position.offset();
  -    while ((unsigned)downstream < text.length() && isCollapsibleWhitespace(text[downstream]) || isNBSP(text[downstream])) {
  +    
  +    // Set upstream and downstream to define the extent of the whitespace surrounding text[offset].
  +    int upstream = offset;
  +    while (upstream > 0 && isWhitespace(text[upstream - 1]))
  +        upstream--;
  +    m_upstreamOffset = upstream; // Save m_upstreamOffset, it will be used during an Undo
  +    
  +    int downstream = offset;
  +    while ((unsigned)downstream + 1 < text.length() && isWhitespace(text[downstream + 1]))
           downstream++;
  -        m_downstreamOffset = downstream;
  -    }
  -
  -    if (m_upstreamOffset == InvalidOffset && m_downstreamOffset == InvalidOffset)
  -        return;
  -        
  -    m_upstreamOffset = upstream;
  -    m_downstreamOffset = downstream;
  -    int length = m_downstreamOffset - m_upstreamOffset;
  -    
  -    m_beforeString = text.substring(m_upstreamOffset, length);
  -    
  -    // The following loop figures out a "rebalanced" whitespace string for any length
  -    // string, and takes into account the special cases that need to handled for the
  -    // start and end of strings (i.e. first and last character must be an nbsp.
  -    int i = m_upstreamOffset;
  -    while (i < m_downstreamOffset) {
  -        int add = (m_downstreamOffset - i) % 3;
  -        switch (add) {
  -            case 0:
  -                m_afterString += nonBreakingSpaceString();
  -                m_afterString += space;
  -                m_afterString += nonBreakingSpaceString();
  -                add = 3;
  -                break;
  -            case 1:
  -                if (i == 0 || (unsigned)i + 1 == text.length()) // at start or end of string
  -                    m_afterString += nonBreakingSpaceString();
  -                else
  -                    m_afterString += space;
  -                break;
  -            case 2:
  -                if ((unsigned)i + 2 == text.length()) {
  -                     // at end of string
  -                    m_afterString += nonBreakingSpaceString();
  -                    m_afterString += nonBreakingSpaceString();
  -                }
  -                else {
  -                    m_afterString += nonBreakingSpaceString();
  -                    m_afterString += space;
  -                }
  -                break;
  -        }
  -        i += add;
  -    }
       
  -    text.remove(m_upstreamOffset, length);
  -    text.insert(m_afterString, m_upstreamOffset);
  +    int length = downstream - upstream + 1;
  +    ASSERT(length > 0);
  +    
  +    m_beforeString = text.substring(upstream, length);
  +    rebalanceWhitespaceInTextNode(textNode, upstream, length);
  +    m_afterString = text.substring(upstream, length);
   }
   
   void RebalanceWhitespaceCommand::doUnapply()
   {
  -    if (m_upstreamOffset == InvalidOffset && m_downstreamOffset == InvalidOffset)
  +    if (m_upstreamOffset == InvalidOffset)
           return;
       
       ASSERT(m_position.node()->isTextNode());
  
  
  
  1.1                  WebCore/layout-tests/editing/editingStyle.css
  
  Index: editingStyle.css
  ===================================================================
  div {
      border:2px #faa solid;
  }
  pre {
      margin: 0;
      padding: 0;
  }
  #test {
      border:2px #aaf solid;
  }
  
  em {
      color: red;
      font-weight: bold;
  }
  
  
  1.1                  WebCore/layout-tests/editing/inserting/4278698-expected.txt
  
  Index: 4278698-expected.txt
  ===================================================================
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > PRE > DIV > BODY > HTML > #document to 3 of #text > PRE > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  layer at (0,0) size 800x600
    RenderCanvas at (0,0) size 800x600
  layer at (0,0) size 800x600
    RenderBlock {HTML} at (0,0) size 800x600
      RenderBody {BODY} at (8,8) size 784x584
        RenderBlock {P} at (0,0) size 784x36
          RenderText {TEXT} at (0,0) size 767x36
            text run at (0,0) width 767: "This tests to see if inserting a space inside normal whitespace inside of a whitespace:pre element will collapse other spaces"
            text run at (0,18) width 92: "surrounding it."
        RenderBlock {P} at (0,52) size 784x18
          RenderText {TEXT} at (0,0) size 444x18
            text run at (0,0) width 444: "If successful, you should see 'a' followed by 10 spaces followed by 'b'."
        RenderBlock {HR} at (0,86) size 784x2 [border: (1px inset #000000)]
        RenderBlock {DIV} at (0,96) size 784x23 [border: (2px solid #FFAAAA)]
          RenderBlock {PRE} at (2,2) size 780x19 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 96x15
              text run at (2,2) width 96: "a          b"
  caret: position 3 of child 0 {TEXT} of child 1 {PRE} of child 7 {DIV} of child 1 {BODY} of child 0 {HTML} of document
  
  
  
  1.1                  WebCore/layout-tests/editing/inserting/4278698.html
  
  Index: 4278698.html
  ===================================================================
  <html> 
  <head>
  
  <link rel=stylesheet href="../editingStyle.css" type="text/css">
  <script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>
  
  <script>
  
  function editingTest() {
      moveSelectionForwardByCharacterCommand();
      moveSelectionForwardByCharacterCommand();
      typeCharacterCommand(' ');
  }
  
  </script>
  
  <title>Adding a space inside whitespace:pre text collapses space</title> 
  </head> 
  <body>
  
  <p>This tests to see if inserting a space inside normal whitespace inside of a whitespace:pre element will collapse other spaces surrounding it.</p>
  <p>If successful, you should see 'a' followed by 10 spaces followed by 'b'.</p>
  
  <hr>
  
  <div contenteditable id="root" style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space;">
  <pre id="test" class="editing">a         b</pre>
  </div>
  
  <script>
  runEditingTest();
  </script>
  
  </body>
  </html>
  
  
  
  1.1                  WebCore/layout-tests/editing/pasteboard/4076267-2-expected.txt
  
  Index: 4076267-2-expected.txt
  ===================================================================
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:there should be a single trailing space between the '.' and the last character in this sentence  replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 96 of #text > DIV > DIV > BODY > HTML > #document to 96 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  layer at (0,0) size 800x600
    RenderCanvas at (0,0) size 800x600
  layer at (0,0) size 800x600
    RenderBlock {HTML} at (0,0) size 800x600
      RenderBody {BODY} at (8,8) size 784x584
        RenderBlock {P} at (0,0) size 784x18
          RenderText {TEXT} at (0,0) size 381x18
            text run at (0,0) width 381: "This tests to see if trailing spaces are lost during a copy/paste"
        RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)]
        RenderBlock {DIV} at (0,44) size 784x26 [border: (2px solid #FFAAAA)]
          RenderBlock {DIV} at (2,2) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 569x18
              text run at (2,2) width 569: "there should be a single trailing space between the '.' and the last character in this sentence "
            RenderText {TEXT} at (571,2) size 4x18
              text run at (571,2) width 4: "."
  caret: position 96 of child 0 {TEXT} of child 1 {DIV} of child 5 {DIV} of child 1 {BODY} of child 0 {HTML} of document
  
  
  
  1.1                  WebCore/layout-tests/editing/pasteboard/4076267-2.html
  
  Index: 4076267-2.html
  ===================================================================
  <html> 
  <head>
  
  <link rel=stylesheet href="../editingStyle.css" type="text/css">
  <script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>
  
  <script>
  
  function editingTest() {
      extendSelectionForwardByLineCommand();
      moveSelectionForwardByCharacterCommand();
      moveSelectionBackwardByCharacterCommand();
      extendSelectionBackwardByLineCommand();
      copyCommand();
      deleteCommand();
      pasteAndMatchStyleCommand();
      
  }
  
  </script>
  
  <title>Pasting plain text loses leading/trailing whitespace</title> 
  </head> 
  <body>
  
  <p>This tests to see if trailing spaces are lost during a copy/paste</p>
  
  <hr>
  
  <div contenteditable id="root" style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space;">
  <div id="test" class="editing">there should be a single trailing space between the '.' and the last character in this sentence .</div>
  </div>
  
  <script>
  runEditingTest();
  </script>
  
  </body>
  </html>
  
  
  
  1.1                  WebCore/layout-tests/editing/pasteboard/4076267-3-expected.txt
  
  Index: 4076267-3-expected.txt
  ===================================================================
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x  x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x   x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x    x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x     x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x      x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 9 of #text > DIV > DIV > BODY > HTML > #document to 9 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x       x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 9 of #text > DIV > DIV > BODY > HTML > #document to 9 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 9 of #text > DIV > DIV > BODY > HTML > #document to 9 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 10 of #text > DIV > DIV > BODY > HTML > #document to 10 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x        x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 10 of #text > DIV > DIV > BODY > HTML > #document to 10 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 9 of #text > DIV > DIV > BODY > HTML > #document to 9 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 10 of #text > DIV > DIV > BODY > HTML > #document to 10 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 11 of #text > DIV > DIV > BODY > HTML > #document to 11 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x         x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 11 of #text > DIV > DIV > BODY > HTML > #document to 11 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 2 of #text > DIV > DIV > BODY > HTML > #document to 2 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 9 of #text > DIV > DIV > BODY > HTML > #document to 9 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 10 of #text > DIV > DIV > BODY > HTML > #document to 10 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 11 of #text > DIV > DIV > BODY > HTML > #document to 11 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 12 of #text > DIV > DIV > BODY > HTML > #document to 12 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText:x          x replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 12 of #text > DIV > DIV > BODY > HTML > #document to 12 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  layer at (0,0) size 800x600
    RenderCanvas at (0,0) size 800x600
  layer at (0,0) size 800x600
    RenderBlock {HTML} at (0,0) size 800x600
      RenderBody {BODY} at (8,8) size 784x584
        RenderBlock {P} at (0,0) size 784x18
          RenderText {TEXT} at (0,0) size 333x18
            text run at (0,0) width 333: "This tests to see if spaces are lost during a copy/paste"
        RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)]
        RenderBlock {DIV} at (0,44) size 784x246 [border: (2px solid #FFAAAA)]
          RenderBlock {DIV} at (2,2) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 20x18
              text run at (2,2) width 20: "x x"
          RenderBlock {DIV} at (2,24) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 24x18
              text run at (2,2) width 24: "x  x"
          RenderBlock {DIV} at (2,46) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 28x18
              text run at (2,2) width 28: "x   x"
          RenderBlock {DIV} at (2,68) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 32x18
              text run at (2,2) width 32: "x    x"
          RenderBlock {DIV} at (2,90) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 36x18
              text run at (2,2) width 36: "x     x"
          RenderBlock {DIV} at (2,112) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 40x18
              text run at (2,2) width 40: "x      x"
          RenderBlock {DIV} at (2,134) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 44x18
              text run at (2,2) width 44: "x       x"
          RenderBlock {DIV} at (2,156) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 48x18
              text run at (2,2) width 48: "x        x"
          RenderBlock {DIV} at (2,178) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 52x18
              text run at (2,2) width 52: "x         x"
          RenderBlock {DIV} at (2,200) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 56x18
              text run at (2,2) width 56: "x          x"
          RenderBlock {DIV} at (2,222) size 780x22 [border: (2px solid #AAAAFF)]
            RenderBR {BR} at (2,2) size 0x18
  caret: position 0 of child 0 {BR} of child 11 {DIV} of child 5 {DIV} of child 1 {BODY} of child 0 {HTML} of document
  
  
  
  1.1                  WebCore/layout-tests/editing/pasteboard/4076267-3.html
  
  Index: 4076267-3.html
  ===================================================================
  <html> 
  <head>
  
  <link rel=stylesheet href="../editingStyle.css" type="text/css">
  <script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>
  
  <script>
  
  function editingTest() {
      for(i = 1; i <= 10; i++) {
          typeCharacterCommand('x');
          for(j = 1; j <= i; j++)
              typeCharacterCommand(' ');
          typeCharacterCommand('x');
          for(k = 1; k <= i; k++)
              extendSelectionBackwardByCharacterCommand();
          extendSelectionBackwardByCharacterCommand();
          extendSelectionBackwardByCharacterCommand();
          copyCommand();
          deleteCommand();
          pasteAndMatchStyleCommand();
          typeCharacterCommand('\n');
      }
  }
  
  </script>
  
  <title>Pasting plain text with varying amounts of whitespace</title> 
  </head> 
  <body>
  
  <p>This tests to see if spaces are lost during a copy/paste</p>
  
  <hr>
  
  <div contenteditable id="root" style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space;">
  <div id="test" class="editing"></div>
  </div>
  
  <script>
  runEditingTest();
  </script>
  
  </body>
  </html>
  
  
  
  1.1                  WebCore/layout-tests/editing/pasteboard/4076267-expected.txt
  
  Index: 4076267-expected.txt
  ===================================================================
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 1 of #text > DIV > DIV > BODY > HTML > #document to 1 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: shouldInsertText: this text should have a single leading space before it replacingDOMRange:range from 0 of DIV > DIV > BODY > HTML > #document to 0 of DIV > DIV > BODY > HTML > #document givenAction:WebViewInsertActionPasted
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 55 of #text > DIV > DIV > BODY > HTML > #document to 55 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  layer at (0,0) size 800x600
    RenderCanvas at (0,0) size 800x600
  layer at (0,0) size 800x600
    RenderBlock {HTML} at (0,0) size 800x600
      RenderBody {BODY} at (8,8) size 784x584
        RenderBlock {P} at (0,0) size 784x18
          RenderText {TEXT} at (0,0) size 383x18
            text run at (0,0) width 383: "This tests to see if leading spaces are lost during a copy/paste"
        RenderBlock {HR} at (0,34) size 784x2 [border: (1px inset #000000)]
        RenderBlock {DIV} at (0,44) size 784x26 [border: (2px solid #FFAAAA)]
          RenderBlock {DIV} at (2,2) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 330x18
              text run at (2,2) width 330: " this text should have a single leading space before it"
  caret: position 55 of child 0 {TEXT} of child 1 {DIV} of child 5 {DIV} of child 1 {BODY} of child 0 {HTML} of document
  
  
  
  1.1                  WebCore/layout-tests/editing/pasteboard/4076267.html
  
  Index: 4076267.html
  ===================================================================
  <html> 
  <head>
  
  <link rel=stylesheet href="../editingStyle.css" type="text/css">
  <script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>
  
  <script>
  
  function editingTest() {
      moveSelectionForwardByCharacterCommand();
      extendSelectionForwardByLineCommand();
      copyCommand();
      deleteCommand();
      deleteCommand();
      pasteAndMatchStyleCommand();
  }
  
  </script>
  
  <title>Pasting plain text loses leading/trailing whitespace</title> 
  </head> 
  <body>
  
  <p>This tests to see if leading spaces are lost during a copy/paste</p>
  
  <hr>
  
  <div contenteditable id="root" style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space;">
  <div id="test" class="editing">. this text should have a single leading space before it</div>
  </div>
  
  <script>
  runEditingTest();
  </script>
  
  </body>
  </html>
  
  
  
  1.1                  WebCore/layout-tests/editing/undo/4063751-expected.txt
  
  Index: 4063751-expected.txt
  ===================================================================
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 3 of #text > DIV > DIV > BODY > HTML > #document to 3 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 4 of #text > DIV > DIV > BODY > HTML > #document to 4 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 5 of #text > DIV > DIV > BODY > HTML > #document to 5 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 6 of #text > DIV > DIV > BODY > HTML > #document to 6 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 7 of #text > DIV > DIV > BODY > HTML > #document to 7 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 8 of #text > DIV > DIV > BODY > HTML > #document to 8 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 9 of #text > DIV > DIV > BODY > HTML > #document to 9 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 10 of #text > DIV > DIV > BODY > HTML > #document to 10 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 11 of #text > DIV > DIV > BODY > HTML > #document to 11 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 12 of #text > DIV > DIV > BODY > HTML > #document to 12 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 13 of #text > DIV > DIV > BODY > HTML > #document to 13 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 14 of #text > DIV > DIV > BODY > HTML > #document to 14 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 15 of #text > DIV > DIV > BODY > HTML > #document to 15 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 16 of #text > DIV > DIV > BODY > HTML > #document to 16 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 17 of #text > DIV > DIV > BODY > HTML > #document to 17 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: shouldChangeSelectedDOMRange:(null) toDOMRange:range from 18 of #text > DIV > DIV > BODY > HTML > #document to 18 of #text > DIV > DIV > BODY > HTML > #document affinity:NSSelectionAffinityDownstream stillSelecting:FALSE
  EDITING DELEGATE: webViewDidChangeSelection:WebViewDidChangeSelectionNotification
  EDITING DELEGATE: webViewDidChange:WebViewDidChangeNotification
  layer at (0,0) size 800x600
    RenderCanvas at (0,0) size 800x600
  layer at (0,0) size 800x600
    RenderBlock {HTML} at (0,0) size 800x600
      RenderBody {BODY} at (8,8) size 784x584
        RenderBlock {P} at (0,0) size 784x18
          RenderText {TEXT} at (0,0) size 314x18
            text run at (0,0) width 314: "This tests RebalanceWhitespace's ability to Undo."
        RenderBlock {P} at (0,34) size 784x18
          RenderText {TEXT} at (0,0) size 328x18
            text run at (0,0) width 328: "You should see \"( this is a test. )\", minus the quotes."
        RenderBlock {HR} at (0,68) size 784x2 [border: (1px inset #000000)]
        RenderBlock {DIV} at (0,78) size 784x26 [border: (2px solid #FFAAAA)]
          RenderBlock {DIV} at (2,2) size 780x22 [border: (2px solid #AAAAFF)]
            RenderText {TEXT} at (2,2) size 94x18
              text run at (2,2) width 94: "( this is a test. )"
  caret: position 18 of child 0 {TEXT} of child 1 {DIV} of child 7 {DIV} of child 1 {BODY} of child 0 {HTML} of document
  
  
  
  1.1                  WebCore/layout-tests/editing/undo/4063751.html
  
  Index: 4063751.html
  ===================================================================
  <html> 
  <head>
  
  <link rel=stylesheet href="../editingStyle.css" type="text/css">
  <script src=../editing.js language="JavaScript" type="text/JavaScript" ></script>
  
  <script>
  
  function editingTest() {
      moveSelectionForwardByCharacterCommand();
      moveSelectionForwardByCharacterCommand();
      
      var string = "this is a test. ";
      for (var i = 0; i < string.length; i++)
          typeCharacterCommand(string[i]);
      undoCommand();
      redoCommand();
      undoCommand();
      redoCommand();
  }
  
  </script>
  
  <title>Redo Typing can add extra space characters</title> 
  </head> 
  <body>
  
  <p>This tests RebalanceWhitespace's ability to Undo.</p>
  <p>You should see "( this is a test. )", minus the quotes.</p>
  
  <hr>
  
  <div contenteditable id="root" style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space;">
  <div id="test" class="editing">( )</div>
  </div>
  
  <script>
  runEditingTest();
  </script>
  
  </body>
  </html>
  
  
  



More information about the webkit-changes mailing list