Update of /cvsroot/e-p-i-c/org.epic.perleditor/src/org/epic/perleditor/actions In directory sc8-pr-cvs17.sourceforge.net:/tmp/cvs-serv23981/src/org/epic/perleditor/actions Modified Files: Tag: stable ExportHtmlSourceAction.java ExtractSubroutineAction.java FormatSourceAction.java Log Message: Merged in the fix for bug [ 1102327 ] Perltidy - wrong option causes Error from 'testing'. Index: ExportHtmlSourceAction.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.perleditor/src/org/epic/perleditor/actions/ExportHtmlSourceAction.java,v retrieving revision 1.7.2.1 retrieving revision 1.7.2.2 diff -u -d -r1.7.2.1 -r1.7.2.2 --- ExportHtmlSourceAction.java 6 Apr 2007 15:06:56 -0000 1.7.2.1 +++ ExportHtmlSourceAction.java 1 May 2008 20:34:29 -0000 1.7.2.2 @@ -4,6 +4,8 @@ import java.util.List; import java.util.StringTokenizer; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.DirectoryDialog; @@ -47,9 +49,8 @@ directoryDialog.setFilterPath(lastSelectedDir); String outputDir = directoryDialog.open(); + if (outputDir == null) return; - if (outputDir != null) - { lastSelectedDir = outputDir; // Export options @@ -72,8 +73,21 @@ // last thing has to be the input file name cmdList.add(filePath); - SourceFormatter.format(editor.getViewer().getDocument().get(), cmdList, getLog()); + try + { + SourceFormatter.format( + editor.getViewer().getDocument().get(), + cmdList, + getLog()); } + catch (CoreException e) + { + log(e.getStatus()); + MessageDialog.openError( + getEditor().getSite().getShell(), + "HTML export failed", + e.getMessage()); + } } protected String getPerlEditorActionId() Index: FormatSourceAction.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.perleditor/src/org/epic/perleditor/actions/FormatSourceAction.java,v retrieving revision 1.13.2.2 retrieving revision 1.13.2.3 diff -u -d -r1.13.2.2 -r1.13.2.3 --- FormatSourceAction.java 6 Apr 2007 15:06:55 -0000 1.13.2.2 +++ FormatSourceAction.java 1 May 2008 20:34:29 -0000 1.13.2.3 @@ -1,12 +1,15 @@ package org.epic.perleditor.actions; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.source.ISourceViewer; -import org.eclipse.swt.custom.StyledText; +import org.eclipse.swt.graphics.Point; import org.epic.perleditor.editors.PerlEditor; import org.epic.perleditor.editors.PerlEditorActionIds; import org.epic.perleditor.editors.util.SourceFormatter; +import org.epic.perleditor.editors.util.SourceFormatterException; /** @@ -27,103 +30,123 @@ protected void doRun() { - PerlEditor editor = getEditor(); - IDocument document = editor.getDocumentProvider().getDocument(editor.getEditorInput()); + IDocument doc = getEditor().getDocumentProvider().getDocument( + getEditor().getEditorInput()); - StringBuffer text = new StringBuffer(); - text.append(document.get()); - if (text.length() == 0) { return; } + if (doc.getLength() == 0) return; - // create an Anchor + StringBuffer text = new StringBuffer(doc.get()); + String anchor = getAnchorString(text); - String myLineSep = ""; + ISourceViewer viewer = getEditor().getViewer(); + int anchorOffset = getAnchorOffset(viewer, doc); + // insert an anchor comment at the end of the line with carret + // we'll find it back to reposition the caret after reformatting + text.insert(anchorOffset, anchor); - try - { - myLineSep = document.getLineDelimiter(0); + String formattedText = runFormatter(text); + + if (formattedText == null || formattedText.equals(text.toString()) || formattedText.equals(anchor)) { + return; } - catch (BadLocationException e) + + StringBuffer newText = new StringBuffer(formattedText); + anchorOffset = newText.indexOf(anchor); + if (anchorOffset > 0) { - // nothing needs to be done, no LineSep + // remove the anchor comment and the preceeding whitespace + // which might have been inserted by perltidy + int len = anchor.length() + 1; + anchorOffset--; + while (anchorOffset >= 0 && + Character.isWhitespace(newText.charAt(anchorOffset))) + { + anchorOffset--; + len++; + } + newText.delete(anchorOffset+1, anchorOffset+len); } + else + anchorOffset = 0; - String posAnchor = "öߧ²"; - String insertAnchor = "#" + posAnchor; + doc.set(newText.toString()); + viewer.setSelectedRange(anchorOffset, 0); + viewer.revealRange(anchorOffset, 0); + } - while (text.indexOf(insertAnchor) >= 0) + protected String getPerlEditorActionId() { - insertAnchor += posAnchor; + return PerlEditorActionIds.FORMAT_SOURCE; } - ISourceViewer viewer = editor.getViewer(); - StyledText myTextWidget = viewer.getTextWidget(); - - // get the point to insert the Anchor - - int lineOfScreen = myTextWidget.getLineAtOffset(myTextWidget.getCaretOffset()); - - int insPos = 0; - - if (lineOfScreen > 0) + private int getAnchorOffset(ISourceViewer viewer, IDocument doc) { - if (lineOfScreen == myTextWidget.getLineCount() - 1) { - insPos = text.length(); + try + { + Point sel = viewer.getSelectedRange(); + int docOffset = sel != null ? sel.x : 0; + int line = doc.getLineOfOffset(docOffset); + int i = doc.getLineOffset(line) + doc.getLineLength(line); + i--; + while ( + (doc.getChar(i) == '\n' || doc.getChar(i) == '\r') && + doc.getLineOfOffset(i) == line) i--; + return i+1; } - else + catch (BadLocationException e) { - insPos = myTextWidget.getOffsetAtLine(lineOfScreen + 1) - myLineSep.length(); + return 0; } + } - // insert the Anchor - - text.insert(insPos, insertAnchor); - - // rel. Pos on the Screen - - lineOfScreen -= myTextWidget.getTopIndex(); + private String getAnchorString(StringBuffer docText) + { + String posAnchor = "öߧ²"; + StringBuffer buf = new StringBuffer(); + buf.append('#'); + buf.append(posAnchor); + while (docText.indexOf(buf.toString()) >= 0) + buf.append(posAnchor); + return buf.toString(); } - StringBuffer newText = new StringBuffer(); - String formatText = SourceFormatter.format(text + "", getLog()); - newText.append(formatText); - - if (formatText == null || formatText.length() == 0 || newText.equals(text) || formatText.equals(insertAnchor)) { - // no news after formatting! - return; + private void handleCoreException(CoreException e) + { + log(e.getStatus()); + MessageDialog.openError( + getEditor().getSite().getShell(), + "Source formatter failed", + e.getMessage()); } - int newPosAnchor = 0; - - if (insPos > 0) + private String runFormatter(StringBuffer text) { - newPosAnchor = newText.indexOf(insertAnchor); - // fix for [ 1077441 ] - LeO: Frankly said, don't know how this - // could happen! - if (newPosAnchor < 0) + try { - newText.delete(0, newText.length()); - newText.append(SourceFormatter.format(document.get(), getLog())); - newPosAnchor = 0; + return SourceFormatter.format(text.toString(), getLog()); } - else + catch (SourceFormatterException e) { - newText.delete(newPosAnchor, newPosAnchor + insertAnchor.length()); + if (e.output == null) + { + handleCoreException(e); + return null; } + if (MessageDialog.openQuestion( + getEditor().getSite().getShell(), + "Source formatter failed", + e.getMessage() + + "\nUse formatter's output anyway?")) + { + return e.output; } - - document.set(newText.toString()); - - // set the new Cursor pos at the beginning of the Line - - myTextWidget.setCaretOffset(myTextWidget.getOffsetAtLine( - myTextWidget.getLineAtOffset(newPosAnchor))); - - myTextWidget.setTopIndex(myTextWidget.getLineAtOffset(newPosAnchor) - lineOfScreen); + return null; } - - protected String getPerlEditorActionId() + catch (CoreException e) { - return PerlEditorActionIds.FORMAT_SOURCE; + handleCoreException(e); + return null; } } +} Index: ExtractSubroutineAction.java =================================================================== RCS file: /cvsroot/e-p-i-c/org.epic.perleditor/src/org/epic/perleditor/actions/ExtractSubroutineAction.java,v retrieving revision 1.1.2.1 retrieving revision 1.1.2.2 diff -u -d -r1.1.2.1 -r1.1.2.2 --- ExtractSubroutineAction.java 6 Apr 2007 15:06:55 -0000 1.1.2.1 +++ ExtractSubroutineAction.java 1 May 2008 20:34:29 -0000 1.1.2.2 @@ -1,5 +1,6 @@ package org.epic.perleditor.actions; +import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.text.BadLocationException; @@ -86,6 +87,10 @@ // format and insert the new subroutine code doc.replace(offset, 0, lineSep + SourceFormatter.format(result[1], getLog())); } + catch (CoreException e) + { + log(e.getStatus()); + } catch (BadLocationException e) { e.printStackTrace(); |