diff --git a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java index 1ec5314ad034..97fb80293322 100644 --- a/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java +++ b/platform/platform-impl/src/com/intellij/openapi/editor/impl/view/LineLayout.java @@ -150,15 +150,18 @@ abstract class LineLayout { List runs = new ArrayList<>(); int flags = view.getBidiFlags(); if (startOffsetInEditor >= 0) { - // running bidi algorithm separately for text fragments corresponding to different lexer tokens + // skipping indent int relLastOffset = 0; + while (relLastOffset < text.length && text[relLastOffset] == ' ' || text[relLastOffset] == '\t') relLastOffset++; + addRuns(runs, text, 0, relLastOffset, flags); + // running bidi algorithm separately for text fragments corresponding to different lexer tokens IElementType lastToken = null; - HighlighterIterator iterator = view.getEditor().getHighlighter().createIterator(startOffsetInEditor); + HighlighterIterator iterator = view.getEditor().getHighlighter().createIterator(startOffsetInEditor + relLastOffset); while (!iterator.atEnd() && iterator.getStart() - startOffsetInEditor < textLength) { int iteratorRelStart = alignToCodePointBoundary(text, iterator.getStart() - startOffsetInEditor); int iteratorRelEnd = alignToCodePointBoundary(text, iterator.getEnd() - startOffsetInEditor); IElementType currentToken = iterator.getTokenType(); - int relStartOffset = Math.max(0, iteratorRelStart); + int relStartOffset = Math.max(relLastOffset, iteratorRelStart); String lcPrefix = getLineCommentPrefix(currentToken); // for line comments we process prefix and following text separately if (!StringUtil.isEmpty(lcPrefix) && lcPrefix.length() <= iteratorRelEnd - iteratorRelStart && diff --git a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java index ad960c90f0bc..f5808f60b9aa 100644 --- a/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java +++ b/platform/platform-tests/testSrc/com/intellij/openapi/editor/impl/EditorRtlTest.java @@ -590,4 +590,8 @@ public class EditorRtlTest extends AbstractRtlTest { right(); checkResult("// R"); } + + public void testIndentIsTreatedSeparately() throws Exception { + checkBidiRunBoundaries(" |R", "txt"); + } }