[Pydev-cvs] org.python.pydev.core/src/org/python/pydev/core/docutils PySelection.java, 1.35, 1.36
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2007-01-25 12:25:39
|
Update of /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/docutils In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv23386/src/org/python/pydev/core/docutils Modified Files: PySelection.java Log Message: Index: PySelection.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev.core/src/org/python/pydev/core/docutils/PySelection.java,v retrieving revision 1.35 retrieving revision 1.36 diff -C2 -d -r1.35 -r1.36 *** PySelection.java 21 Jan 2007 20:42:08 -0000 1.35 --- PySelection.java 25 Jan 2007 12:25:38 -0000 1.36 *************** *** 12,15 **** --- 12,16 ---- import java.util.List; import java.util.StringTokenizer; + import java.util.regex.Pattern; import org.eclipse.jface.text.BadLocationException; *************** *** 1365,1380 **** * Class to help iterating through the document */ ! private class DocIterator implements Iterator{ private int startingLine; private boolean forward; private boolean isFirst = true; public DocIterator(boolean forward){ this.startingLine = getCursorLine(); this.forward = forward; } public boolean hasNext() { if(forward){ ! throw new RuntimeException("Forward iterator not implemented."); }else{ return startingLine >= 0; --- 1366,1384 ---- * Class to help iterating through the document */ ! private class DocIterator implements Iterator<String>{ private int startingLine; private boolean forward; private boolean isFirst = true; + private int numberOfLines; + public DocIterator(boolean forward){ this.startingLine = getCursorLine(); this.forward = forward; + numberOfLines = getDoc().getNumberOfLines(); } public boolean hasNext() { if(forward){ ! return startingLine < numberOfLines; }else{ return startingLine >= 0; *************** *** 1384,1401 **** /** * Note that the first thing it returns is the lineContents to cursor (and only after that ! * does it return from the full line). */ ! public Object next() { try { String line; - if (isFirst) { - line = getLineContentsToCursor(); - isFirst = false; - }else{ - line = getLine(startingLine); - } if (forward) { ! throw new RuntimeException("Forward iterator not implemented."); } else { startingLine--; } --- 1388,1406 ---- /** * Note that the first thing it returns is the lineContents to cursor (and only after that ! * does it return from the full line -- if it is iterating backwards). */ ! public String next() { try { String line; if (forward) { ! line = getLine(startingLine); ! startingLine++; } else { + if (isFirst) { + line = getLineContentsToCursor(); + isFirst = false; + }else{ + line = getLine(startingLine); + } startingLine--; } *************** *** 1451,1455 **** --- 1456,1495 ---- } + /** + * @return the contents from the document starting at the cursor line until a colon is reached. + */ + public String getToColon() { + StringBuffer buffer = new StringBuffer(); + + for(int i = getLineOffset(); i < doc.getLength();i++){ + try { + char c = doc.getChar(i); + buffer.append(c); + if(c == ':'){ + return buffer.toString(); + } + } catch (BadLocationException e) { + throw new RuntimeException(e); + } + } + return ""; //unable to find a colon + } + + public boolean isInFunctionLine() { + return FunctionPattern.matcher(getToColon().trim()).matches(); + } + + public boolean isInClassLine() { + return ClassPattern.matcher(getToColon().trim()).matches(); + } + //(\\s|\\w|\\.|\\,|\\=|\\*) + //(\\s|\\w) + + //spaces* 'def' space+ identifier space* ( (space|char|.|,|=|*|(|))* ): + private static final Pattern FunctionPattern = Pattern.compile("\\s*def\\s+[a-zA-Z]\\w*\\s*\\((\\s|\\w|\\.|\\,|\\=|\\*|\\(|\\))*\\)\\s*:"); + + //spaces* 'class' space+ identifier space* (? (.|char|space |,)* )? + private static final Pattern ClassPattern = Pattern.compile("\\s*class\\s+[a-zA-Z]\\w*\\s*\\(?(\\s|\\w|\\.|\\,)*\\)?\\s*:"); |