diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java index 519d2de9efca..eefce10b4619 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByBlockCommentHandler.java @@ -532,12 +532,11 @@ public class CommentByBlockCommentHandler extends MultiCaretCodeInsightActionHan static TextRange processDocument(Document document, RangeMarker marker, Commenter commenter, boolean escape) { if (commenter instanceof EscapingCommenter) { - TextRange range = TextRange.create(marker.getStartOffset(), marker.getEndOffset()); if (escape) { - ((EscapingCommenter)commenter).escape(document, range); + ((EscapingCommenter)commenter).escape(document, marker); } else { - ((EscapingCommenter)commenter).unescape(document, range); + ((EscapingCommenter)commenter).unescape(document, marker); } } return TextRange.create(marker.getStartOffset(), marker.getEndOffset()); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java index 850e62564dc3..212b7812c408 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/CommentByLineCommentHandler.java @@ -600,6 +600,8 @@ public class CommentByLineCommentHandler extends MultiCaretCodeInsightActionHand String prefix = commenter.getLineCommentPrefix(); int endOffset = document.getLineEndOffset(line); RangeMarker marker = document.createRangeMarker(offset, endOffset); + marker.setGreedyToLeft(true); + marker.setGreedyToRight(true); if (prefix != null) { if (commenter instanceof CommenterWithLineSuffix) { endOffset = CharArrayUtil.shiftBackward(document.getCharsSequence(), endOffset, " \t"); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/generation/EscapingCommenter.java b/platform/lang-impl/src/com/intellij/codeInsight/generation/EscapingCommenter.java index c9116f624863..47ed0eee60d8 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/generation/EscapingCommenter.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/generation/EscapingCommenter.java @@ -17,14 +17,14 @@ package com.intellij.codeInsight.generation; import com.intellij.lang.Commenter; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.editor.RangeMarker; /** * @author Dmitry Avdeev */ public interface EscapingCommenter extends Commenter { - void escape(Document document, TextRange range); + void escape(Document document, RangeMarker range); - void unescape(Document document, TextRange range); + void unescape(Document document, RangeMarker range); } diff --git a/xml/impl/src/com/intellij/lang/xml/XmlCommenter.java b/xml/impl/src/com/intellij/lang/xml/XmlCommenter.java index 598096a698fb..fa3e1ac80913 100644 --- a/xml/impl/src/com/intellij/lang/xml/XmlCommenter.java +++ b/xml/impl/src/com/intellij/lang/xml/XmlCommenter.java @@ -17,7 +17,7 @@ package com.intellij.lang.xml; import com.intellij.codeInsight.generation.EscapingCommenter; import com.intellij.openapi.editor.Document; -import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.editor.RangeMarker; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NotNull; @@ -59,7 +59,7 @@ public class XmlCommenter implements EscapingCommenter { } @Override - public void escape(Document document, TextRange range) { + public void escape(Document document, RangeMarker range) { String prefix = getBlockCommentPrefix(); String suffix = getBlockCommentSuffix(); @@ -71,6 +71,8 @@ public class XmlCommenter implements EscapingCommenter { if (CharArrayUtil.regionMatches(document.getCharsSequence(), end - suffix.length(), suffix)) { end -= suffix.length(); } + if (start >= end) return; + for (int i = end - DOUBLE_DASH.length(); i >= start; i--) { if (CharArrayUtil.regionMatches(document.getCharsSequence(), i, DOUBLE_DASH) && !CharArrayUtil.regionMatches(document.getCharsSequence(), i, suffix) && @@ -81,10 +83,16 @@ public class XmlCommenter implements EscapingCommenter { if (CharArrayUtil.regionMatches(document.getCharsSequence(), start, GT)) { document.replaceString(start, start + GT.length(), ESCAPED_GT); } + if (CharArrayUtil.regionMatches(document.getCharsSequence(), range.getStartOffset(), prefix + "-")) { + document.insertString(start, " "); + } + if (CharArrayUtil.regionMatches(document.getCharsSequence(), range.getEndOffset() - suffix.length() - 1, "-" + suffix)) { + document.insertString(range.getEndOffset() - suffix.length(), " "); + } } @Override - public void unescape(Document document, TextRange range) { + public void unescape(Document document, RangeMarker range) { final int start = range.getStartOffset(); for (int i = range.getEndOffset(); i >= start; i--) { if (CharArrayUtil.regionMatches(document.getCharsSequence(), i, ESCAPED_DOUBLE_DASH)) {