From: <kp...@us...> - 2006-09-04 11:51:38
|
Revision: 6880 http://svn.sourceforge.net/jedit/?rev=6880&view=rev Author: kpouer Date: 2006-09-04 04:51:27 -0700 (Mon, 04 Sep 2006) Log Message: ----------- format empty paragraph throws exception fixed (#1548902) Modified Paths: -------------- jEdit/trunk/doc/CHANGES.txt jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java Modified: jEdit/trunk/doc/CHANGES.txt =================================================================== --- jEdit/trunk/doc/CHANGES.txt 2006-09-03 17:31:03 UTC (rev 6879) +++ jEdit/trunk/doc/CHANGES.txt 2006-09-04 11:51:27 UTC (rev 6880) @@ -88,6 +88,9 @@ the expected replace behavior, a new method was added to SearchMatcher, and users of that class should adjust the offsets of subsequent searches when an EOL is matched. (Marcelo Vanzin) + +- Formatting an empty paragraph do not throw a StringIndexOutOfBoundsException + anymore (#1548902) (Matthieu Casanova) }}} {{{ Miscellaneous Modified: jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java 2006-09-03 17:31:03 UTC (rev 6879) +++ jEdit/trunk/org/gjt/sp/jedit/TextUtilities.java 2006-09-04 11:51:27 UTC (rev 6880) @@ -263,7 +263,7 @@ * @since jedit 4.3pre3 */ public static String join(Collection c, String delim) { - StringBuffer retval = new StringBuffer(); + StringBuilder retval = new StringBuilder(); Iterator itr = c.iterator(); if (itr.hasNext()) { retval.append( itr.next().toString() ); @@ -314,14 +314,7 @@ noWordSep = ""; //{{{ the character under the cursor changes how we behave. - int type; - if(Character.isWhitespace(ch)) - type = WHITESPACE; - else if(Character.isLetterOrDigit(ch) - || noWordSep.indexOf(ch) != -1) - type = WORD_CHAR; - else - type = SYMBOL; + int type = getCharType(ch, noWordSep); //}}} loop: for(int i = pos; i >= 0; i--) @@ -439,14 +432,7 @@ noWordSep = ""; //{{{ the character under the cursor changes how we behave. - int type; - if(Character.isWhitespace(ch)) - type = WHITESPACE; - else if(Character.isLetterOrDigit(ch) - || noWordSep.indexOf(ch) != -1) - type = WORD_CHAR; - else - type = SYMBOL; + int type = getCharType(ch, noWordSep); //}}} loop: for(int i = pos; i < line.length(); i++) @@ -508,6 +494,26 @@ return line.length(); } //}}} + /** + * Returns the type of the char. + * + * @param ch the character + * @param noWordSep Characters that are non-alphanumeric, but + * should be treated as word characters anyway + * @return the type of the char : {@link #WHITESPACE}, {@link #WORD_CHAR}, {@link #SYMBOL} + */ + private static int getCharType(char ch, String noWordSep) { + int type; + if(Character.isWhitespace(ch)) + type = WHITESPACE; + else if(Character.isLetterOrDigit(ch) + || noWordSep.indexOf(ch) != -1) + type = WORD_CHAR; + else + type = SYMBOL; + return type; + } + //{{{ spacesToTabs() method /** * Converts consecutive spaces to tabs in the specified string. @@ -516,7 +522,7 @@ */ public static String spacesToTabs(String in, int tabSize) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); int width = 0; int whitespace = 0; for(int i = 0; i < in.length(); i++) @@ -563,7 +569,7 @@ width - whitespace)); } - return buf.toString(); + return buf.toString(); } //}}} //{{{ tabsToSpaces() method @@ -574,7 +580,7 @@ */ public static String tabsToSpaces(String in, int tabSize) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); int width = 0; for(int i = 0; i < in.length(); i++) { @@ -594,9 +600,9 @@ width++; buf.append(in.charAt(i)); break; - } - } - return buf.toString(); + } + } + return buf.toString(); } //}}} //{{{ format() method @@ -609,7 +615,7 @@ */ public static String format(String text, int maxLineLength, int tabSize) { - StringBuffer buf = new StringBuffer(); + StringBuilder buf = new StringBuilder(); int index = 0; @@ -637,7 +643,7 @@ //{{{ indexIgnoringWhitespace() method /** * Inverse of <code>ignoringWhitespaceIndex()</code>. - * @param str A string + * @param str a string (not an empty string) * @param index The index * @return The number of non-whitespace characters that precede the index. * @since jEdit 4.3pre2 @@ -653,7 +659,7 @@ //{{{ ignoringWhitespaceIndex() method /** * Inverse of <code>indexIgnoringWhitespace()</code>. - * @param str A string + * @param str a string (not an empty string) * @param index The index * @return The index into the string where the number of non-whitespace * characters that precede the index is count. @@ -754,7 +760,7 @@ //{{{ formatParagraph() method private static void formatParagraph(String text, int maxLineLength, - int tabSize, StringBuffer buf) + int tabSize, StringBuilder buf) { // align everything to paragraph's leading indent int leadingWhitespaceCount = StandardUtilities.getLeadingWhiteSpace(text); Modified: jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java =================================================================== --- jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java 2006-09-03 17:31:03 UTC (rev 6879) +++ jEdit/trunk/org/gjt/sp/jedit/textarea/JEditTextArea.java 2006-09-04 11:51:27 UTC (rev 6880) @@ -4104,9 +4104,14 @@ text = TextUtilities.format( text,maxLineLen,buffer.getTabSize()); buffer.insert(start,text); - moveCaretPosition(start + Math.min(text.length(), + int caretPos = start; + if (text.length() != 0) + { + caretPos += Math.min(text.length(), TextUtilities.ignoringWhitespaceIndex( - text,noSpaceOffset))); + text,noSpaceOffset)); + } + moveCaretPosition(caretPos); } finally { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |