mirror of
https://github.com/processing/processing4.git
synced 2026-02-13 18:35:37 +01:00
hopefully fixes the tricky #38
This commit is contained in:
@@ -199,31 +199,37 @@ public class CompletionPanel {
|
||||
}
|
||||
|
||||
/**
|
||||
* Inserts the CompletionCandidate chosen from the suggestion list
|
||||
* Inserts the CompletionCandidate chosen from the suggestion list
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public boolean insertSelection() {
|
||||
if (completionList.getSelectedValue() != null) {
|
||||
try {
|
||||
String currentSubword = fetchCurrentSubword();
|
||||
String selectedSuggestion = ((CompletionCandidate) completionList
|
||||
.getSelectedValue()).getCompletionString().substring(subWord.length());
|
||||
logE(subWord+" <= subword,Inserting suggestion=> " + selectedSuggestion + " Current sub: " + fetchPhrase());
|
||||
textarea.getDocument().remove(insertionPosition-subWord.length(), subWord.length());
|
||||
textarea.getDocument().insertString(insertionPosition-subWord.length(),
|
||||
((CompletionCandidate) completionList
|
||||
.getSelectedValue()).getCompletionString(), null);
|
||||
if(selectedSuggestion.endsWith(")"))
|
||||
{
|
||||
if(!selectedSuggestion.endsWith("()")){
|
||||
.getSelectedValue()).getCompletionString().substring(currentSubword
|
||||
.length());
|
||||
logE(subWord + " <= subword,Inserting suggestion=> "
|
||||
+ selectedSuggestion + " Current sub: " + currentSubword);
|
||||
textarea.getDocument().remove(insertionPosition
|
||||
- currentSubword.length(),
|
||||
currentSubword.length());
|
||||
textarea.getDocument()
|
||||
.insertString(insertionPosition - currentSubword.length(),
|
||||
((CompletionCandidate) completionList
|
||||
.getSelectedValue()).getCompletionString(), null);
|
||||
if (selectedSuggestion.endsWith(")")) {
|
||||
if (!selectedSuggestion.endsWith("()")) {
|
||||
int x = selectedSuggestion.indexOf('(');
|
||||
if(x != -1){
|
||||
if (x != -1) {
|
||||
//log("X................... " + x);
|
||||
textarea.setCaretPosition(insertionPosition + (x+1));
|
||||
textarea.setCaretPosition(insertionPosition + (x + 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
textarea.setCaretPosition(insertionPosition + selectedSuggestion.length());
|
||||
} else {
|
||||
textarea.setCaretPosition(insertionPosition
|
||||
+ selectedSuggestion.length());
|
||||
}
|
||||
log("Suggestion inserted: " + System.currentTimeMillis());
|
||||
return true;
|
||||
@@ -235,17 +241,17 @@ public class CompletionPanel {
|
||||
return false;
|
||||
}
|
||||
|
||||
private String fetchPhrase() {
|
||||
private String fetchCurrentSubword() {
|
||||
TextArea ta = editor.ta;
|
||||
int off = ta.getCaretPosition();
|
||||
log2("off " + off);
|
||||
//log2("off " + off);
|
||||
if (off < 0)
|
||||
return null;
|
||||
int line = ta.getCaretLine();
|
||||
if (line < 0)
|
||||
return null;
|
||||
String s = ta.getLineText(line);
|
||||
log2("lin " + line);
|
||||
//log2("lin " + line);
|
||||
/*
|
||||
* if (s == null) return null; else if (s.length() == 0) return null;
|
||||
*/
|
||||
@@ -255,7 +261,7 @@ public class CompletionPanel {
|
||||
int x = ta.getCaretPosition() - ta.getLineStartOffset(line) - 1, x2 = x + 1, x1 = x - 1;
|
||||
if(x >= s.length() || x < 0)
|
||||
return null; //TODO: Does this check cause problems? Verify.
|
||||
log2(" x char: " + s.charAt(x));
|
||||
//log2(" x char: " + s.charAt(x));
|
||||
//int xLS = off - getLineStartNonWhiteSpaceOffset(line);
|
||||
|
||||
String word = (x < s.length() ? s.charAt(x) : "") + "";
|
||||
@@ -281,54 +287,16 @@ public class CompletionPanel {
|
||||
//TODO: currently works on single line only. "a. <new line> b()" won't be detected
|
||||
if (x1 >= 0) {
|
||||
// if (s.charAt(x1) != ';' && s.charAt(x1) != ',' && s.charAt(x1) != '(')
|
||||
if (Character.isLetterOrDigit(s.charAt(x1)) || s.charAt(x1) == '_'
|
||||
|| s.charAt(x1) == '.' || s.charAt(x1) == ')' || s.charAt(x1) == ']') {
|
||||
if (Character.isLetterOrDigit(s.charAt(x1)) || s.charAt(x1) == '_') {
|
||||
|
||||
word = s.charAt(x1--) + word;
|
||||
|
||||
if (s.charAt(x1) == ')') {
|
||||
word = s.charAt(x1--) + word;
|
||||
closeB++;
|
||||
while (x1 >= 0 && closeB > 0) {
|
||||
word = s.charAt(x1) + word;
|
||||
if (s.charAt(x1) == '(')
|
||||
closeB--;
|
||||
if (s.charAt(x1) == ')')
|
||||
closeB++;
|
||||
x1--;
|
||||
}
|
||||
}
|
||||
else if (s.charAt(x1) == ']') {
|
||||
word = s.charAt(x1--) + word;
|
||||
closeB++;
|
||||
while (x1 >= 0 && closeB > 0) {
|
||||
word = s.charAt(x1) + word;
|
||||
if (s.charAt(x1) == '[')
|
||||
closeB--;
|
||||
if (s.charAt(x1) == ']')
|
||||
closeB++;
|
||||
x1--;
|
||||
}
|
||||
}
|
||||
else {
|
||||
word = s.charAt(x1--) + word;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
|
||||
// if (x2 >= 0 && x2 < s.length()) {
|
||||
// if (Character.isLetterOrDigit(s.charAt(x2)) || s.charAt(x2) == '_'
|
||||
// || s.charAt(x2) == '$')
|
||||
// word = word + s.charAt(x2++);
|
||||
// else
|
||||
// x2 = -1;
|
||||
// } else
|
||||
// x2 = -1;
|
||||
|
||||
// if (x1 < 0 )//&& x2 < 0
|
||||
// break;
|
||||
if (i > 200) {
|
||||
// time out!
|
||||
break;
|
||||
@@ -339,13 +307,11 @@ public class CompletionPanel {
|
||||
if (Character.isDigit(word.charAt(0)))
|
||||
return null;
|
||||
word = word.trim();
|
||||
// if (word.endsWith("."))
|
||||
// word = word.substring(0, word.length() - 1);
|
||||
if(word.length() > 1)
|
||||
if (word.endsWith("."))
|
||||
word = word.substring(0, word.length() - 1);
|
||||
|
||||
//showSuggestionLater();
|
||||
return word;
|
||||
else return "";
|
||||
//}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user