[Pydev-cvs] org.python.pydev/src/org/python/pydev/editor/actions AbstractBlockCommentAction.java, N
Brought to you by:
fabioz
Update of /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/actions In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv19690/src/org/python/pydev/editor/actions Modified Files: PyAddBlockComment.java PyAddSingleBlockComment.java PyRemoveBlockComment.java Added Files: AbstractBlockCommentAction.java Log Message: Index: PyRemoveBlockComment.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/actions/PyRemoveBlockComment.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PyRemoveBlockComment.java 25 Feb 2006 00:14:23 -0000 1.4 --- PyRemoveBlockComment.java 24 Jan 2007 00:36:31 -0000 1.5 *************** *** 24,30 **** public class PyRemoveBlockComment extends PyAddBlockComment { - /* Selection element */ - private static PySelection ps; - /** --- 24,27 ---- *************** *** 36,42 **** { // Select from text editor ! ps = new PySelection ( getTextEditor ( )); // Perform the action ! perform ( ); // Put cursor at the first area of the selection --- 33,39 ---- { // Select from text editor ! PySelection ps = new PySelection ( getTextEditor ( )); // Perform the action ! perform (ps); // Put cursor at the first area of the selection *************** *** 49,64 **** } - - /** - * Performs the action with the class' PySelection. - * - * @return boolean The success or failure of the action - */ - public static boolean perform ( ) - { - return perform ( ps ); - } - - /** * Performs the action with a given PySelection --- 46,49 ---- *************** *** 67,71 **** * @return boolean The success or failure of the action */ ! public static boolean perform ( PySelection ps ) { // What we'll be replacing the selected text with --- 52,56 ---- * @return boolean The success or failure of the action */ ! public boolean perform ( PySelection ps ) { // What we'll be replacing the selected text with Index: PyAddBlockComment.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/actions/PyAddBlockComment.java,v retrieving revision 1.13 retrieving revision 1.14 diff -C2 -d -r1.13 -r1.14 *** PyAddBlockComment.java 23 Jan 2007 23:52:13 -0000 1.13 --- PyAddBlockComment.java 24 Jan 2007 00:36:31 -0000 1.14 *************** *** 8,16 **** import org.eclipse.core.runtime.Preferences; ! import org.eclipse.jface.action.IAction; ! import org.eclipse.jface.preference.IPreferenceStore; ! import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.editor.commentblocks.CommentBlocksPreferences; import org.python.pydev.plugin.PydevPlugin; --- 8,15 ---- import org.eclipse.core.runtime.Preferences; ! import org.python.pydev.core.Tuple; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.editor.commentblocks.CommentBlocksPreferences; + import org.python.pydev.editor.correctionassist.docstrings.AssistDocString; import org.python.pydev.plugin.PydevPlugin; *************** *** 24,57 **** * @author Parhaum Toofanian */ ! public class PyAddBlockComment extends PyAction { ! /* Selection element */ ! private static PySelection ps; - /** - * Grabs the selection information and performs the action. - */ - public void run(IAction action) { - try { - // Select from text editor - ps = new PySelection(getTextEditor()); - // Perform the action - perform(); ! // Put cursor at the first area of the selection ! getTextEditor().selectAndReveal(ps.getEndLine().getOffset(), 0); ! } catch (Exception e) { ! beep(e); ! } ! } /** ! * Performs the action with the class' PySelection. ! * ! * @return boolean The success or failure of the action */ ! public static boolean perform() { ! return perform(ps); } /** * Performs the action with a given PySelection --- 23,58 ---- * @author Parhaum Toofanian */ ! public class PyAddBlockComment extends AbstractBlockCommentAction { ! private boolean defaultClassNameBehaviour; + public PyAddBlockComment(){ + //default + } + /** ! * For tests: assigns the default values */ ! PyAddBlockComment(int defaultCols, boolean alignLeft, boolean classNameBehaviour){ ! super(defaultCols, alignLeft); ! this.defaultClassNameBehaviour = classNameBehaviour; } + @Override + protected void revealSelEndLine(PySelection ps) { + getTextEditor().selectAndReveal(ps.getEndLine().getOffset(), 0); + } + + + protected boolean getUseClassNameBehaviour(){ + try{ + Preferences prefs = PydevPlugin.getDefault().getPluginPreferences(); + return prefs.getBoolean(CommentBlocksPreferences.MULTI_BLOCK_COMMENT_SHOW_ONLY_CLASS_NAME); + }catch(NullPointerException e){ //tests + return defaultClassNameBehaviour; + } + } + /** * Performs the action with a given PySelection *************** *** 60,64 **** * @return boolean The success or failure of the action */ ! public static boolean perform(PySelection ps) { // What we'll be replacing the selected text with StringBuffer strbuf = new StringBuffer(); --- 61,65 ---- * @return boolean The success or failure of the action */ ! public boolean perform(PySelection ps) { // What we'll be replacing the selected text with StringBuffer strbuf = new StringBuffer(); *************** *** 67,85 **** ps.selectCompleteLine(); - int i; try { // Start of block ! strbuf.append("#" + getFullCommentLine() + ps.getEndLineDelim()); ! // For each line, comment them out ! for (i = ps.getStartLineIndex(); i <= ps.getEndLineIndex(); i++) { ! strbuf.append("#" + ps.getLine(i) + ps.getEndLineDelim()); } ! ! // End of block ! strbuf.append("#" + getFullCommentLine()); ! // Replace the text with the modified information ps.getDoc().replace(ps.getStartLine().getOffset(), ps.getSelLength(), strbuf.toString()); return true; } catch (Exception e) { --- 68,130 ---- ps.selectCompleteLine(); try { + String fullCommentLine = getFullCommentLine(); + String endLineDelim = ps.getEndLineDelim(); + + int startLineIndex = ps.getStartLineIndex(); + int endLineIndex = ps.getEndLineIndex(); + + boolean classBehaviour = false; + if(startLineIndex == endLineIndex && getUseClassNameBehaviour()){ + String line = ps.getLine(startLineIndex); + if(AssistDocString.ClassPattern.matcher(line).matches()){ + //just get the class name + classBehaviour = true; + } + } + // Start of block ! strbuf.append("#" + fullCommentLine + endLineDelim); ! if(classBehaviour){ ! String line = ps.getLine(startLineIndex); ! String initialLine = line; ! line = line.substring(line.indexOf("class ")+6); ! StringBuffer className = new StringBuffer(); ! for(int i=0;i<line.length();i++){ ! char cN = line.charAt(i); ! if(Character.isJavaIdentifierPart(cN)){ ! className.append(cN); ! }else{ ! break; ! } ! } ! ! strbuf.append("# "); ! strbuf.append(className); ! strbuf.append(endLineDelim); ! strbuf.append("#" + fullCommentLine); ! strbuf.append(endLineDelim); ! strbuf.append(initialLine); ! ! ! }else{ ! // For each line, comment them out ! for (int i = startLineIndex; i <= endLineIndex; i++) { ! strbuf.append("#"); ! String line = ps.getLine(i); ! if(!line.startsWith("\t") && !line.startsWith(" ")){ ! strbuf.append(" "); ! } ! strbuf.append(line); ! strbuf.append(endLineDelim); ! } ! // End of block ! strbuf.append("#" + fullCommentLine); } ! // Replace the text with the modified information ps.getDoc().replace(ps.getStartLine().getOffset(), ps.getSelLength(), strbuf.toString()); + return true; } catch (Exception e) { *************** *** 91,94 **** --- 136,144 ---- } + @Override + protected String getPreferencesNameForChar() { + return CommentBlocksPreferences.MULTI_BLOCK_COMMENT_CHAR; + } + /** * Currently returns a string with the comment block. *************** *** 96,120 **** * @return Comment line string, or a default one if Preferences are null */ ! protected static String getFullCommentLine() { ! try { ! IPreferenceStore chainedPrefStore = PydevPlugin.getChainedPrefStore(); ! int cols = chainedPrefStore ! .getInt(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN); ! StringBuffer buffer = new StringBuffer(cols); ! Preferences prefs = PydevPlugin.getDefault().getPluginPreferences(); ! char c; ! try { ! c = prefs.getString(CommentBlocksPreferences.MULTI_BLOCK_COMMENT_CHAR).charAt(0); ! } catch (Exception e) { ! c = '='; ! } ! for (int i = 0; i < cols-1; i++) { ! buffer.append(c); ! } ! return buffer.toString(); ! } catch (Exception e) { ! throw new RuntimeException(e); } } } --- 146,159 ---- * @return Comment line string, or a default one if Preferences are null */ ! protected String getFullCommentLine() { ! Tuple<Integer,Character> colsAndChar = getColsAndChar(); ! int cols = colsAndChar.o1; ! char c = colsAndChar.o2; ! StringBuffer buffer = new StringBuffer(cols); ! for (int i = 0; i < cols-1; i++) { ! buffer.append(c); } + return buffer.toString(); } } Index: PyAddSingleBlockComment.java =================================================================== RCS file: /cvsroot/pydev/org.python.pydev/src/org/python/pydev/editor/actions/PyAddSingleBlockComment.java,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** PyAddSingleBlockComment.java 23 Jan 2007 23:52:13 -0000 1.4 --- PyAddSingleBlockComment.java 24 Jan 2007 00:36:31 -0000 1.5 *************** *** 7,14 **** package org.python.pydev.editor.actions; - import org.eclipse.core.runtime.Preferences; - import org.eclipse.jface.action.IAction; - import org.eclipse.jface.preference.IPreferenceStore; - import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants; import org.python.pydev.core.Tuple; import org.python.pydev.core.docutils.PySelection; --- 7,10 ---- *************** *** 17,24 **** import org.python.pydev.plugin.PydevPlugin; ! public class PyAddSingleBlockComment extends PyAction { ! private boolean alignRight=true; ! private int defaultCols=80; ! public PyAddSingleBlockComment(){ //default --- 13,18 ---- import org.python.pydev.plugin.PydevPlugin; ! public class PyAddSingleBlockComment extends AbstractBlockCommentAction { ! public PyAddSingleBlockComment(){ //default *************** *** 29,48 **** */ PyAddSingleBlockComment(int defaultCols, boolean alignLeft){ ! this.defaultCols = defaultCols; ! this.alignRight = alignLeft; ! ! } ! ! public void run(IAction action) { ! try { ! PySelection ps = new PySelection(getTextEditor()); ! // Perform the action ! perform(ps); ! ! // Put cursor at the first area of the selection ! revealSelEndLine(ps); ! } catch (Exception e) { ! beep(e); ! } } --- 23,27 ---- */ PyAddSingleBlockComment(int defaultCols, boolean alignLeft){ ! super(defaultCols, alignLeft); } *************** *** 109,126 **** return this.alignRight; } ! ! protected Tuple<Integer, Character> getColsAndChar(){ ! int cols = this.defaultCols; ! char c = '-'; ! ! try{ ! IPreferenceStore chainedPrefStore = PydevPlugin.getChainedPrefStore(); ! cols = chainedPrefStore.getInt(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN); ! Preferences prefs = PydevPlugin.getDefault().getPluginPreferences(); ! c = prefs.getString(CommentBlocksPreferences.SINGLE_BLOCK_COMMENT_CHAR).charAt(0); ! }catch(NullPointerException e){ ! //ignore... we're in the tests env ! } ! return new Tuple<Integer, Character>(cols, c); } --- 88,95 ---- return this.alignRight; } ! ! @Override ! protected String getPreferencesNameForChar() { ! return CommentBlocksPreferences.SINGLE_BLOCK_COMMENT_CHAR; } --- NEW FILE: AbstractBlockCommentAction.java --- package org.python.pydev.editor.actions; import org.eclipse.core.runtime.Preferences; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.texteditor.AbstractDecoratedTextEditorPreferenceConstants; import org.python.pydev.core.Tuple; import org.python.pydev.core.docutils.PySelection; import org.python.pydev.plugin.PydevPlugin; public abstract class AbstractBlockCommentAction extends PyAction { protected boolean alignRight=true; protected int defaultCols=80; public AbstractBlockCommentAction(){ //default } /** * For tests: assigns the default values */ protected AbstractBlockCommentAction(int defaultCols, boolean alignLeft){ this.defaultCols = defaultCols; this.alignRight = alignLeft; } /** * Grabs the selection information and performs the action. */ public void run(IAction action) { try { // Select from text editor PySelection ps = new PySelection(getTextEditor()); // Perform the action perform(ps); // Put cursor at the first area of the selection revealSelEndLine(ps); } catch (Exception e) { beep(e); } } /** * Actually performs the action */ public abstract boolean perform(PySelection ps); /** * @return the number of columns to be used (and the char too) */ protected Tuple<Integer, Character> getColsAndChar(){ int cols = this.defaultCols; char c = '-'; try{ IPreferenceStore chainedPrefStore = PydevPlugin.getChainedPrefStore(); cols = chainedPrefStore.getInt(AbstractDecoratedTextEditorPreferenceConstants.EDITOR_PRINT_MARGIN_COLUMN); Preferences prefs = PydevPlugin.getDefault().getPluginPreferences(); c = prefs.getString(getPreferencesNameForChar()).charAt(0); }catch(NullPointerException e){ //ignore... we're in the tests env } return new Tuple<Integer, Character>(cols, c); } protected abstract String getPreferencesNameForChar() ; } |