MarkdownToolbar: make it always indent the start of the line

This commit is contained in:
Vishesh Handa
2021-07-13 18:16:31 +02:00
parent cd754e52b5
commit 7b93cfb919
2 changed files with 27 additions and 29 deletions

View File

@ -302,19 +302,14 @@ int prevWordPos(TextEditingValue textEditingValue) {
return lastSpacePos + 1;
}
var indentStr = '\t';
TextEditingValue addTab(TextEditingValue textEditingValue) {
var cursorPos = textEditingValue.selection.baseOffset;
var text = textEditingValue.text;
var newText = "";
if (cursorPos == text.length) {
newText = text + "\t";
} else {
newText = text.substring(0, cursorPos) + "\t" + text.substring(cursorPos);
}
return TextEditingValue(
text: newText,
text: indentStr + text,
selection: TextSelection.collapsed(offset: cursorPos + 1),
);
}
@ -323,25 +318,14 @@ TextEditingValue addBackTab(TextEditingValue textEditingValue) {
var cursorPos = textEditingValue.selection.baseOffset;
var text = textEditingValue.text;
if (cursorPos <= 0) {
return textEditingValue;
var newText = text;
if (newText.startsWith(indentStr)) {
newText = newText.substring(indentStr.length);
cursorPos -= indentStr.length;
}
var prevChar = text[cursorPos - 1];
if (prevChar == '\t') {
var newText = "";
if (cursorPos - 1 > 1) {
newText += text.substring(0, cursorPos - 1);
}
if (cursorPos != text.length) {
newText += text.substring(cursorPos);
}
return TextEditingValue(
text: newText,
selection: TextSelection.collapsed(offset: cursorPos - 1),
);
}
return textEditingValue;
return TextEditingValue(
text: newText,
selection: TextSelection.collapsed(offset: cursorPos),
);
}

View File

@ -321,17 +321,24 @@ void main() {
_testTab(
before: 'Hello',
beforeOffset: 1,
after: 'H\tello',
after: '\tHello',
afterOffset: 2,
);
_testTab(
before: 'Hi',
beforeOffset: 2,
after: 'Hi\t',
after: '\tHi',
afterOffset: 3,
);
_testTab(
before: '- Hi',
beforeOffset: 4,
after: '\t- Hi',
afterOffset: 5,
);
_testBackTab(
before: '\tHello',
beforeOffset: 1,
@ -339,6 +346,13 @@ void main() {
afterOffset: 0,
);
_testBackTab(
before: '\tHello',
beforeOffset: 4,
after: 'Hello',
afterOffset: 3,
);
_testBackTab(
before: 'Hi',
beforeOffset: 0,