|
@@ -59,6 +59,8 @@ import net.miginfocom.swing.MigLayout;
|
59
|
59
|
|
60
|
60
|
import org.jdesktop.jxlayer.JXLayer;
|
61
|
61
|
|
|
62
|
+import static com.google.common.base.Preconditions.checkArgument;
|
|
63
|
+
|
62
|
64
|
/**
|
63
|
65
|
* Styled, scrollable text pane.
|
64
|
66
|
*/
|
|
@@ -288,18 +290,21 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
288
|
290
|
}
|
289
|
291
|
} else if (i == selectedRange.getStartLine()) {
|
290
|
292
|
//loop from start of range to the end
|
291
|
|
- if (selectedRange.getStartPos() != -1) {
|
292
|
|
- selectedText.append(getText(line, selectedRange.getStartPos(),
|
293
|
|
- Styliser.stipControlCodes(line).length(), styled));
|
|
293
|
+ final int length = Styliser.stipControlCodes(line).length();
|
|
294
|
+ if (selectedRange.getStartPos() != -1 && selectedRange.getStartPos() < length) {
|
|
295
|
+ // Ensure that we're actually selecting some text on this line
|
|
296
|
+ selectedText.append(getText(line, selectedRange.getStartPos(), length,
|
|
297
|
+ styled));
|
294
|
298
|
}
|
295
|
299
|
} else if (i == selectedRange.getEndLine()) {
|
296
|
300
|
//loop from start to end of range
|
297
|
|
- if (selectedRange.getEndPos() != -1) {
|
298
|
|
- selectedText.append(getText(line, 0, selectedRange .getEndPos(), styled));
|
|
301
|
+ if (selectedRange.getEndPos() > 0) {
|
|
302
|
+ selectedText.append(getText(line, 0, selectedRange.getEndPos(), styled));
|
299
|
303
|
}
|
300
|
304
|
} else {
|
301
|
305
|
//loop the whole line
|
302
|
|
- selectedText.append(getText(line, 0, line.length(), styled));
|
|
306
|
+ final int length = Styliser.stipControlCodes(line).length();
|
|
307
|
+ selectedText.append(getText(line, 0, length, styled));
|
303
|
308
|
}
|
304
|
309
|
}
|
305
|
310
|
}
|
|
@@ -319,6 +324,9 @@ public final class TextPane extends JComponent implements MouseWheelListener,
|
319
|
324
|
*/
|
320
|
325
|
private String getText(final String text, final int start, final int end,
|
321
|
326
|
final boolean styled) {
|
|
327
|
+ checkArgument(start < end, "'start' (" + start + ") must be less than 'end' (" + end + ')');
|
|
328
|
+ checkArgument(start >= 0, "'start' (" + start + ") must be non-negative");
|
|
329
|
+
|
322
|
330
|
if (styled) {
|
323
|
331
|
return Styliser.getStyledText(text, start, end);
|
324
|
332
|
} else {
|