static boolean isEscape(str, i) { if (i < 0 || str.charAt(i) != '\\') return false; else return !isEscape(str, i-1); } static boolean isQuote(str, i) { if (i < 0 || str.charAt(i) != '"') return false; else if ( i > 1 && i+1 < str.length() && str.charAt(i-1) == '\'' && str.charAt(i+1) == '\'' ) return false; else return !isEscape(str, i-1); } static void selectStr(JEditTextArea t) { oldLeft = oldRight = t.getCaretPosition(); if (t.getSelectionCount() > 0) { oldLeft = t.getSelection()[0].getStart(); oldRight = t.getSelection()[0].getEnd(); } tex = t.getText(); len = tex.length(); if (len == 0) return; car = t.getCaretPosition(); left = car - 1; right = car; while (left >= 0 && !isQuote(tex, left)) left--; while (right < len && !isQuote(tex, right)) right++; if (oldLeft == left+1 && oldRight == right) { t.setCaretPosition(right+1 > len ? len : right+1); t.setSelection(new Selection.Range( left < 0 ? 0 : left, right+1 > len ? len : right+1)); } else t.setSelection(new Selection.Range(left+1, right)); } selectStr(textArea);