package com.jetbrains.lang.dart.ide.editor;
import com.intellij.openapi.editor.DefaultLineWrapPositionStrategy;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public class DartLineWrapPositionStrategy extends DefaultLineWrapPositionStrategy {
public DartLineWrapPositionStrategy() {
super();
addRule(new Rule('\\', WrapCondition.BEFORE)); // Wrap before escape sequences in strings
}
@Override
public int calculateWrapPosition(@NotNull Document document,
@Nullable Project project,
int startOffset,
int endOffset,
int maxPreferredOffset,
boolean allowToBeyondMaxPreferredOffset,
boolean virtual) {
int pos =
super.calculateWrapPosition(document, project, startOffset, endOffset, maxPreferredOffset, allowToBeyondMaxPreferredOffset, virtual);
if (pos < 0) {
return pos;
}
char ch = document.getCharsSequence().charAt(pos);
if (ch == '\'' || ch == '"') {
return maxPreferredOffset;
}
return pos;
}
@Override
protected boolean canUseOffset(@NotNull Document document, int offset, boolean virtual) {
CharSequence chars = document.getCharsSequence();
char charAtOffset = chars.charAt(offset);
if (charAtOffset == '.') {
// Do not split the cascade token, but allow wrapping in front of it.
if (offset > 0 && chars.charAt(offset - 1) == '.') {
return false;
}
}
return true;
}
}