+\r
+ if ( mergeConsequent )\r
+ {\r
+ // Figure out how many ranges should be merged.\r
+ var mergeCount = 0;\r
+ while ( rangeList[ current + mergeCount + 1 ] )\r
+ {\r
+ var doc = range.document,\r
+ found = 0,\r
+ left = doc.getById( bookmarks[ mergeCount ].endNode ),\r
+ right = doc.getById( bookmarks[ mergeCount + 1 ].startNode ),\r
+ next;\r
+\r
+ // Check subsequent range.\r
+ while ( 1 )\r
+ {\r
+ next = left.getNextSourceNode( false );\r
+ if ( !right.equals( next ) )\r
+ {\r
+ // This could be yet another bookmark or\r
+ // walking across block boundaries.\r
+ if ( bookmark( next ) || ( next.type == CKEDITOR.NODE_ELEMENT && next.isBlockBoundary() ) )\r
+ {\r
+ left = next;\r
+ continue;\r
+ }\r
+ }\r
+ else\r
+ found = 1;\r
+\r
+ break;\r
+ }\r
+\r
+ if ( !found )\r
+ break;\r
+\r
+ mergeCount++;\r
+ }\r
+ }\r
+\r
+ range.moveToBookmark( bookmarks.shift() );\r
+\r
+ // Merge ranges finally after moving to bookmarks.\r
+ while( mergeCount-- )\r
+ {\r
+ next = rangeList[ ++current ];\r
+ next.moveToBookmark( bookmarks.shift() );\r
+ range.setEnd( next.endContainer, next.endOffset );\r
+ }\r