📄 selection.java
字号:
else startOffset += buffer.getLineStartOffset(startLine); int endOffset = buffer.getOffsetOfVirtualColumn(endLine, endColumn,width); if(endOffset == -1) { extraEndVirt = endColumn - width[0]; endOffset = buffer.getLineEndOffset(endLine) - 1; } else endOffset += buffer.getLineStartOffset(endLine); } //}}} //{{{ getStartColumn() method public int getStartColumn(Buffer buffer) { int virtColStart = buffer.getVirtualWidth(startLine, start - buffer.getLineStartOffset(startLine)) + extraStartVirt; int virtColEnd = buffer.getVirtualWidth(endLine, end - buffer.getLineStartOffset(endLine)) + extraEndVirt; return Math.min(virtColStart,virtColEnd); } //}}} //{{{ getEndColumn() method public int getEndColumn(Buffer buffer) { int virtColStart = buffer.getVirtualWidth(startLine, start - buffer.getLineStartOffset(startLine)) + extraStartVirt; int virtColEnd = buffer.getVirtualWidth(endLine, end - buffer.getLineStartOffset(endLine)) + extraEndVirt; return Math.max(virtColStart,virtColEnd); } //}}} //{{{ getStart() method public int getStart(Buffer buffer, int line) { return getColumnOnOtherLine(buffer,line, getStartColumn(buffer)); } //}}} //{{{ getEnd() method public int getEnd(Buffer buffer, int line) { return getColumnOnOtherLine(buffer,line, getEndColumn(buffer)); } //}}} //{{{ Package-private members int extraStartVirt; int extraEndVirt; //{{{ getText() method void getText(Buffer buffer, StringBuffer buf) { int start = getStartColumn(buffer); int end = getEndColumn(buffer); for(int i = startLine; i <= endLine; i++) { int lineStart = buffer.getLineStartOffset(i); int lineLen = buffer.getLineLength(i); int rectStart = buffer.getOffsetOfVirtualColumn( i,start,null); if(rectStart == -1) rectStart = lineLen; int rectEnd = buffer.getOffsetOfVirtualColumn( i,end,null); if(rectEnd == -1) rectEnd = lineLen; if(rectEnd < rectStart) System.err.println(i + ":::" + start + ":" + end + " ==> " + rectStart + ":" + rectEnd); buf.append(buffer.getText(lineStart + rectStart, rectEnd - rectStart)); if(i != endLine) buf.append('\n'); } } //}}} //{{{ setText() method int setText(Buffer buffer, String text) { int startColumn = getStartColumn(buffer); int endColumn = getEndColumn(buffer); int[] total = new int[1]; int tabSize = buffer.getTabSize(); int maxWidth = 0; int totalLines = 0; ArrayList lines = new ArrayList(); //{{{ Split the text into lines if(text != null) { int lastNewline = 0; int currentWidth = startColumn; for(int i = 0; i < text.length(); i++) { char ch = text.charAt(i); if(ch == '\n') { totalLines++; lines.add(text.substring( lastNewline,i)); lastNewline = i + 1; maxWidth = Math.max(maxWidth,currentWidth); lines.add(new Integer(currentWidth)); currentWidth = startColumn; } else if(ch == '\t') currentWidth += tabSize - (currentWidth % tabSize); else currentWidth++; } if(lastNewline != text.length()) { totalLines++; lines.add(text.substring(lastNewline)); lines.add(new Integer(currentWidth)); maxWidth = Math.max(maxWidth,currentWidth); } } //}}} //{{{ Insert the lines into the buffer int endOffset = 0; int lastLine = Math.max(startLine + totalLines - 1,endLine); for(int i = startLine; i <= lastLine; i++) { if(i == buffer.getLineCount()) buffer.insert(buffer.getLength(),"\n"); int lineStart = buffer.getLineStartOffset(i); int lineLen = buffer.getLineLength(i); int rectStart = buffer.getOffsetOfVirtualColumn( i,startColumn,total); int startWhitespace; if(rectStart == -1) { startWhitespace = (startColumn - total[0]); rectStart = lineLen; } else startWhitespace = 0; int rectEnd = buffer.getOffsetOfVirtualColumn( i,endColumn,null); if(rectEnd == -1) rectEnd = lineLen; buffer.remove(rectStart + lineStart,rectEnd - rectStart); if(startWhitespace != 0) { buffer.insert(rectStart + lineStart, MiscUtilities.createWhiteSpace(startWhitespace,0)); } int endWhitespace; if(totalLines == 0) { if(rectEnd == lineLen) endWhitespace = 0; else endWhitespace = maxWidth - startColumn; } else { int index = 2 * ((i - startLine) % totalLines); String str = (String)lines.get(index); buffer.insert(rectStart + lineStart + startWhitespace,str); if(rectEnd == lineLen) endWhitespace = 0; else { endWhitespace = maxWidth - ((Integer)lines.get(index+1)) .intValue(); } startWhitespace += str.length(); } if(endWhitespace != 0) { buffer.insert(rectStart + lineStart + startWhitespace, MiscUtilities.createWhiteSpace(endWhitespace,0)); } endOffset = rectStart + lineStart + startWhitespace + endWhitespace; } //}}} //{{{ Move the caret down a line if(text == null || text.length() == 0) return end; else return endOffset; //}}} } //}}} //{{{ contentInserted() method boolean contentInserted(Buffer buffer, int startLine, int start, int numLines, int length) { if(this.end < start) return false; this.end += length; if(this.startLine > startLine) { this.start += length; if(numLines != 0) { this.startLine = buffer.getLineOfOffset( this.start); } return true; } int endVirtualColumn = buffer.getVirtualWidth( this.endLine,end - buffer.getLineStartOffset(this.endLine)); if(this.start == start) { int startVirtualColumn = buffer.getVirtualWidth( this.startLine,start - buffer.getLineStartOffset( this.startLine)); this.start += length; int newStartVirtualColumn = buffer.getVirtualWidth( startLine,start - buffer.getLineStartOffset( this.startLine)); int[] totalVirtualWidth = new int[1]; int newEnd = buffer.getOffsetOfVirtualColumn( this.endLine,endVirtualColumn + newStartVirtualColumn - startVirtualColumn, totalVirtualWidth); if(newEnd != -1) { end = buffer.getLineStartOffset( this.endLine) + newEnd; } else { end = buffer.getLineEndOffset( this.endLine) - 1; extraEndVirt = totalVirtualWidth[0] - endVirtualColumn; } } else if(this.start > start) { this.start += length; if(numLines != 0) { this.startLine = buffer.getLineOfOffset( this.start); } } if(numLines != 0) this.endLine = buffer.getLineOfOffset(this.end); int newEndVirtualColumn = buffer.getVirtualWidth( endLine, end - buffer.getLineStartOffset(this.endLine)); if(startLine == this.endLine && extraEndVirt != 0) { extraEndVirt += (endVirtualColumn - newEndVirtualColumn); } else if(startLine == this.startLine && extraStartVirt != 0) { extraStartVirt += (endVirtualColumn - newEndVirtualColumn); } return true; } //}}} //{{{ contentRemoved() method boolean contentRemoved(Buffer buffer, int startLine, int start, int numLines, int length) { int end = start + length; boolean changed = false; if(this.start > start && this.start <= end) { this.start = start; changed = true; } else if(this.start > end) { this.start -= length; changed = true; } if(this.end > start && this.end <= end) { this.end = start; changed = true; } else if(this.end > end) { this.end -= length; changed = true; } if(changed && numLines != 0) { this.startLine = buffer.getLineOfOffset(this.start); this.endLine = buffer.getLineOfOffset(this.end); } return changed; } //}}} //}}} //{{{ Private members //{{{ getColumnOnOtherLine() method private int getColumnOnOtherLine(Buffer buffer, int line, int col) { int returnValue = buffer.getOffsetOfVirtualColumn( line,col,null); if(returnValue == -1) return buffer.getLineEndOffset(line) - 1; else return buffer.getLineStartOffset(line) + returnValue; } //}}} //}}} } //}}}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -