📄 tokenrewritestream.java
字号:
if ( op instanceof ReplaceOp ) { boolean replaced = false; int i; // look for an existing replace for (i=pos; i<rewrites.size(); i++) { RewriteOperation prevOp = (RewriteOperation)rewrites.get(pos); if ( prevOp.index!=op.index ) { break; } if ( prevOp instanceof ReplaceOp ) { rewrites.set(pos, op); // replace old with new replaced=true; break; } // keep going; must be an insert } if ( !replaced ) { // add replace op to the end of all the inserts rewrites.add(i, op); } } else { // inserts are added in front of existing inserts rewrites.add(pos, op); } } else { //System.out.println("no instruction at pos=="+pos); rewrites.add(-pos-1, op); } //System.out.println("after, rewrites="+rewrites); } public void insertAfter(Token t, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, t, text); } public void insertAfter(int index, Object text) { insertAfter(DEFAULT_PROGRAM_NAME, index, text); } public void insertAfter(String programName, Token t, Object text) { insertAfter(programName,t.getTokenIndex(), text); } public void insertAfter(String programName, int index, Object text) { // to insert after, just insert before next index (even if past end) insertBefore(programName,index+1, text); //addToSortedRewriteList(programName, new InsertAfterOp(index,text)); } public void insertBefore(Token t, Object text) { insertBefore(DEFAULT_PROGRAM_NAME, t, text); } public void insertBefore(int index, Object text) { insertBefore(DEFAULT_PROGRAM_NAME, index, text); } public void insertBefore(String programName, Token t, Object text) { insertBefore(programName, t.getTokenIndex(), text); } public void insertBefore(String programName, int index, Object text) { addToSortedRewriteList(programName, new InsertBeforeOp(index,text)); } public void replace(int index, Object text) { replace(DEFAULT_PROGRAM_NAME, index, index, text); } public void replace(int from, int to, Object text) { replace(DEFAULT_PROGRAM_NAME, from, to, text); } public void replace(Token indexT, Object text) { replace(DEFAULT_PROGRAM_NAME, indexT, indexT, text); } public void replace(Token from, Token to, Object text) { replace(DEFAULT_PROGRAM_NAME, from, to, text); } public void replace(String programName, int from, int to, Object text) { if ( from > to || from<0 || to<0 ) { return; } addToSortedRewriteList(programName, new ReplaceOp(from, to, text)); /* // replace from..to by deleting from..to-1 and then do a replace // on last index for (int i=from; i<to; i++) { addToSortedRewriteList(new DeleteOp(i,i)); } addToSortedRewriteList(new ReplaceOp(to, to, text)); */ } public void replace(String programName, Token from, Token to, Object text) { replace(programName, from.getTokenIndex(), to.getTokenIndex(), text); } public void delete(int index) { delete(DEFAULT_PROGRAM_NAME, index, index); } public void delete(int from, int to) { delete(DEFAULT_PROGRAM_NAME, from, to); } public void delete(Token indexT) { delete(DEFAULT_PROGRAM_NAME, indexT, indexT); } public void delete(Token from, Token to) { delete(DEFAULT_PROGRAM_NAME, from, to); } public void delete(String programName, int from, int to) { replace(programName,from,to,null); } public void delete(String programName, Token from, Token to) { replace(programName,from,to,null); } public int getLastRewriteTokenIndex() { return getLastRewriteTokenIndex(DEFAULT_PROGRAM_NAME); } protected int getLastRewriteTokenIndex(String programName) { Integer I = (Integer)lastRewriteTokenIndexes.get(programName); if ( I==null ) { return -1; } return I.intValue(); } protected void setLastRewriteTokenIndex(String programName, int i) { lastRewriteTokenIndexes.put(programName, new Integer(i)); } protected List getProgram(String name) { List is = (List)programs.get(name); if ( is==null ) { is = initializeProgram(name); } return is; } private List initializeProgram(String name) { List is = new ArrayList(PROGRAM_INIT_SIZE); programs.put(name, is); return is; } public String toOriginalString() { return toOriginalString(MIN_TOKEN_INDEX, size()-1); } public String toOriginalString(int start, int end) { StringBuffer buf = new StringBuffer(); for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) { buf.append(get(i).getText()); } return buf.toString(); } public String toString() { return toString(MIN_TOKEN_INDEX, size()-1); } public String toString(String programName) { return toString(programName, MIN_TOKEN_INDEX, size()-1); } public String toString(int start, int end) { return toString(DEFAULT_PROGRAM_NAME, start, end); } public String toString(String programName, int start, int end) { List rewrites = (List)programs.get(programName); if ( rewrites==null || rewrites.size()==0 ) { return toOriginalString(start,end); // no instructions to execute } StringBuffer buf = new StringBuffer(); /// Index of first rewrite we have not done int rewriteOpIndex = 0; int tokenCursor=start; while ( tokenCursor>=MIN_TOKEN_INDEX && tokenCursor<=end && tokenCursor<tokens.size() ) { //System.out.println("tokenCursor="+tokenCursor); // execute instructions associated with this token index if ( rewriteOpIndex<rewrites.size() ) { RewriteOperation op = (RewriteOperation)rewrites.get(rewriteOpIndex); // skip all ops at lower index while ( op.index<tokenCursor && rewriteOpIndex<rewrites.size() ) { rewriteOpIndex++; if ( rewriteOpIndex<rewrites.size() ) { op = (RewriteOperation)rewrites.get(rewriteOpIndex); } } // while we have ops for this token index, exec them while ( tokenCursor==op.index && rewriteOpIndex<rewrites.size() ) { //System.out.println("execute "+op+" at instruction "+rewriteOpIndex); tokenCursor = op.execute(buf); //System.out.println("after execute tokenCursor = "+tokenCursor); rewriteOpIndex++; if ( rewriteOpIndex<rewrites.size() ) { op = (RewriteOperation)rewrites.get(rewriteOpIndex); } } } // dump the token at this index if ( tokenCursor<=end ) { buf.append(get(tokenCursor).getText()); tokenCursor++; } } // now see if there are operations (append) beyond last token index for (int opi=rewriteOpIndex; opi<rewrites.size(); opi++) { RewriteOperation op = (RewriteOperation)rewrites.get(opi); if ( op.index>=size() ) { op.execute(buf); // must be insertions if after last token } //System.out.println("execute "+op+" at "+opi); //op.execute(buf); // must be insertions if after last token } return buf.toString(); } public String toDebugString() { return toDebugString(MIN_TOKEN_INDEX, size()-1); } public String toDebugString(int start, int end) { StringBuffer buf = new StringBuffer(); for (int i=start; i>=MIN_TOKEN_INDEX && i<=end && i<tokens.size(); i++) { buf.append(get(i)); } return buf.toString(); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -