mirror of
https://github.com/GitJournal/GitJournal.git
synced 2025-06-25 00:00:26 +08:00
MarkdownToolbar: make it always indent the start of the line
This commit is contained in:
@ -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;
|
|
||||||
}
|
}
|
||||||
|
@ -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,
|
||||||
|
Reference in New Issue
Block a user