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

View File

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