📄 pyselection.java
字号:
* @return the offset of the line where the cursor is
*/
public int getLineOffset() {
return getLineOffset(getCursorLine());
}
/**
* @return the offset of the specified line
*/
public int getLineOffset(int line) {
try {
return getDoc().getLineInformation(line).getOffset();
} catch (Exception e) {
return 0;
}
}
/**
* Deletes a line from the document
* @param i
*/
public void deleteLine(int i) {
deleteLine(getDoc(), i);
}
/**
* Deletes a line from the document
* @param i
*/
public static void deleteLine(IDocument doc, int i) {
try {
IRegion lineInformation = doc.getLineInformation(i);
int offset = lineInformation.getOffset();
int length = -1;
if(doc.getNumberOfLines() > i){
int nextLineOffset = doc.getLineInformation(i+1).getOffset();
length = nextLineOffset - offset;
}else{
length = lineInformation.getLength();
}
if(length > -1){
doc.replace(offset, length, "");
}
} catch (BadLocationException e) {
e.printStackTrace();
}
}
public void deleteSpacesAfter(int offset) {
try {
final int len = countSpacesAfter(offset);
if(len > 0){
doc.replace(offset, len, "");
}
} catch (Exception e) {
//ignore
}
}
public int countSpacesAfter(int offset) throws BadLocationException {
if(offset >= doc.getLength()){
return 0;
}
int initial = offset;
String next = doc.get(offset, 1);
//don't delete 'all' that is considered whitespace (as \n and \r)
try {
while (next.charAt(0) == ' ' || next.charAt(0) == '\t') {
offset++;
next = doc.get(offset, 1);
}
} catch (Exception e) {
// ignore
}
return offset-initial;
}
/**
* Deletes the current selected text
*
* @throws BadLocationException
*/
public void deleteSelection() throws BadLocationException {
int offset = textSelection.getOffset();
doc.replace(offset, textSelection.getLength(), "");
}
public void addLine(String contents, int afterLine){
addLine(getDoc(), getEndLineDelim(), contents, afterLine);
}
public static void addLine(IDocument doc, String endLineDelim, String contents, int afterLine){
try {
int offset = -1;
if(doc.getNumberOfLines() > afterLine){
offset = doc.getLineInformation(afterLine+1).getOffset();
}else{
offset = doc.getLineInformation(afterLine).getOffset();
}
if(doc.getNumberOfLines()-1 == afterLine){
contents = endLineDelim + contents;
}
if (!contents.endsWith(endLineDelim)){
contents += endLineDelim;
}
if(offset >= 0){
doc.replace(offset, 0, contents);
}
} catch (BadLocationException e) {
e.printStackTrace();
}
}
/**
* @param ps
* @return the line where the cursor is (from the cursor position to the end of the line).
* @throws BadLocationException
*/
public String getLineContentsFromCursor() throws BadLocationException {
int lineOfOffset = getDoc().getLineOfOffset(getAbsoluteCursorOffset());
IRegion lineInformation = getDoc().getLineInformation(lineOfOffset);
String lineToCursor = getDoc().get(getAbsoluteCursorOffset(), lineInformation.getOffset() + lineInformation.getLength() - getAbsoluteCursorOffset());
return lineToCursor;
}
/**
* Get the current line up to where the cursor is without any comments or literals.
*/
public String getLineContentsToCursor(boolean removeComments, boolean removeLiterals) throws BadLocationException {
if(removeComments == false || removeLiterals == false){
throw new RuntimeException("Currently only accepts removing the literals and comments.");
}
int cursorOffset = getAbsoluteCursorOffset();
IRegion lineInformationOfOffset = doc.getLineInformationOfOffset(cursorOffset);
IDocumentPartitioner partitioner = PyPartitionScanner.checkPartitionScanner(doc);
if(partitioner == null){
throw new RuntimeException("Partitioner not set up.");
}
StringBuffer buffer = new StringBuffer();
int offset = lineInformationOfOffset.getOffset();
int length = lineInformationOfOffset.getLength();
for (int i = offset; i <= offset+length && i < cursorOffset; i++) {
String contentType = partitioner.getContentType(i);
if(contentType.equals(IPythonPartitions.PY_DEFAULT)){
buffer.append(doc.getChar(i));
}else{
buffer.append(' ');
}
}
return buffer.toString();
}
/**
* @param ps
* @return the line where the cursor is (from the beggining of the line to the cursor position).
* @throws BadLocationException
*/
public String getLineContentsToCursor() throws BadLocationException {
int lineOfOffset = getDoc().getLineOfOffset(getAbsoluteCursorOffset());
IRegion lineInformation = getDoc().getLineInformation(lineOfOffset);
String lineToCursor = getDoc().get(lineInformation.getOffset(), getAbsoluteCursorOffset() - lineInformation.getOffset());
return lineToCursor;
}
/**
* Readjust the selection so that the whole document is selected.
*
* @param onlyIfNothingSelected: If false, check if we already have a selection. If we
* have a selection, it is not changed, however, if it is true, it always selects everything.
*/
public void selectAll(boolean forceNewSelection) {
if (!forceNewSelection){
if(getSelLength() > 0)
return;
}
textSelection = new TextSelection(doc, 0, doc.getLength());
}
/**
* @return Returns the startLineIndex.
*/
public int getStartLineIndex() {
return this.getTextSelection().getStartLine();
}
/**
* @return Returns the endLineIndex.
*/
public int getEndLineIndex() {
return this.getTextSelection().getEndLine();
}
/**
* @return Returns the doc.
*/
public IDocument getDoc() {
return doc;
}
/**
* @return Returns the selLength.
*/
public int getSelLength() {
return this.getTextSelection().getLength();
}
/**
* @return Returns the selection.
*/
public String getCursorLineContents() {
try {
int start = getStartLine().getOffset();
int end = getEndLine().getOffset() + getEndLine().getLength();
return this.doc.get(start, end-start);
} catch (BadLocationException e) {
Log.log(e);
}
return "";
}
/**
* @return the delimiter that should be used for the passed document
*/
public static String getDelimiter(IDocument doc){
return TextUtilities.getDefaultLineDelimiter(doc);
}
/**
* @return Returns the endLineDelim.
*/
public String getEndLineDelim() {
return getDelimiter(getDoc());
}
/**
* @return Returns the startLine.
*/
public IRegion getStartLine() {
try {
return getDoc().getLineInformation(getStartLineIndex());
} catch (BadLocationException e) {
Log.log(e);
}
return null;
}
/**
* @return Returns the endLine.
*/
public IRegion getEndLine() {
try {
int endLineIndex = getEndLineIndex();
if(endLineIndex == -1){
return null;
}
return getDoc().getLineInformation(endLineIndex);
} catch (BadLocationException e) {
Log.log(e);
}
return null;
}
/**
* @return Returns the cursorLine.
*/
public int getCursorLine() {
return this.getTextSelection().getEndLine();
}
/**
* @return Returns the absoluteCursorOffset.
*/
public int getAbsoluteCursorOffset() {
return this.getTextSelection().getOffset();
}
/**
* @return Returns the textSelection.
*/
public ITextSelection getTextSelection() {
return textSelection;
}
/**
* @return the Selected text
*/
public String getSelectedText() {
ITextSelection txtSel = getTextSelection();
int start = txtSel.getOffset();
int len = txtSel.getLength();
try {
return this.doc.get(start, len);
} catch (BadLocationException e) {
throw new RuntimeException(e);
}
}
/**
* @return
* @throws BadLocationException
*/
public char getCharAfterCurrentOffset() throws BadLocationException {
return getDoc().getChar(getAbsoluteCursorOffset()+1);
}
/**
* @return
* @throws BadLocationException
*/
public char getCharAtCurrentOffset() throws BadLocationException {
return getDoc().getChar(getAbsoluteCursorOffset());
}
/**
* @return the offset mapping to the end of the line passed as parameter.
* @throws BadLocationException
*/
public int getEndLineOffset(int line) throws BadLocationException {
IRegion lineInformation = doc.getLineInformation(line);
return lineInformation.getOffset() + lineInformation.getLength();
}
/**
* @return the offset mapping to the end of the current 'end' line.
*/
public int getEndLineOffset() {
IRegion endLine = getEndLine();
return endLine.getOffset() + endLine.getLength();
}
/**
* @return the offset mapping to the start of the current line.
*/
public int getStartLineOffset() {
IRegion startLine = getStartLine();
return startLine.getOffset();
}
/**
* @return the complete dotted string given the current selection and the strings after
*
* e.g.: if we have a text of
* 'value = aa.bb.cc()' and 'aa' is selected, this method would return the whole dotted string ('aa.bb.cc')
* @throws BadLocationException
*/
public String getFullRepAfterSelection() throws BadLocationException {
int absoluteCursorOffset = getAbsoluteCursorOffset();
int length = doc.getLength();
int end = absoluteCursorOffset;
char ch = doc.getChar(end);
while(Character.isLetterOrDigit(ch) || ch == '.'){
end++;
//check if we can still get some char
if(length-1 < end){
break;
}
ch = doc.getChar(end);
}
return doc.get(absoluteCursorOffset, end-absoluteCursorOffset);
}
/**
* @return the current token and its initial offset for this token
* @throws BadLocationException
*/
public Tuple<String, Integer> getCurrToken() throws BadLocationException {
Tuple<String, Integer> tup = extractActivationToken(doc, getAbsoluteCursorOffset(), false);
String prefix = tup.o1;
// ok, now, get the rest of the token, as we already have its prefix
int start = tup.o2-prefix.length();
int end = start;
while (doc.getLength() - 1 >= end) {
char ch = doc.getChar(end);
if(Character.isJavaIdentifierPart(ch)){
end++;
}else{
break;
}
}
String post = doc.get(tup.o2, end-tup.o2);
return new Tuple<String, Integer>(prefix+post, start);
}
/**
* This function gets the tokens inside the parenthesis that start at the current selection line
*
* @param addSelf: this defines whether tokens named self should be added if it is found.
*
* @return a Tuple so that the first param is the list and
* the second the offset of the end of the parentesis it may return null if no starting parentesis was found at the current line
*/
public Tuple<List<String>, Integer> getInsideParentesisToks(boolean addSelf) {
List<String> l = new ArrayList<String>();
String line = getLine();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -