@launchmenu/core
Version:
An environment for visual keyboard controlled applets
90 lines • 8.34 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.indentText = void 0;
const rangeConversion_1 = require("../../utils/rangeConversion");
const performNormalizedTextEdit_1 = require("../performNormalizedTextEdit");
/**
* Indents or dedents the selected text in the
* @param targetField The text field to indent or dedent the text of
* @param indent The indentation amount, negative to dedent
* @param indentCharacter The character to indent or dedent by
* @param caret The caret to insert the text at
*/
function indentText(targetField, indent, indentCharacter = " ".repeat(4), caret, updateCaret = true) {
performNormalizedTextEdit_1.performNormalizedTextEdit(targetField, textField => {
if (!caret)
caret = textField.getSelection();
const text = textField.get();
const lines = rangeConversion_1.getTextLines(text);
// Get a 2d selection
const startPoint = rangeConversion_1.get2dIndex(text, caret.start);
const endPoint = rangeConversion_1.get2dIndex(text, caret.end);
const startRow = Math.min(startPoint.row, endPoint.row);
const endRow = Math.max(startPoint.row, endPoint.row);
// Retrieve the changes to indent or dedent each line
let lineStart = 0;
const changes = lines.map((line, i) => {
// If the line isn't in range, don't alter it
if (i < startRow || i > endRow) {
lineStart += line.length;
return { change: undefined, newLine: line };
}
const orLine = line;
// Indent the line if specified
let indentLine = indent;
while (indentLine > 0) {
indentLine--;
line = indentCharacter + line;
}
// Dedent the line if specified
while (indentLine < 0 &&
line.slice(0, indentCharacter.length) == indentCharacter) {
indentLine++;
line = line.slice(indentCharacter.length);
}
// Dedent remaining space or other characters if some are left
if (indentLine < 0) {
for (let length = indentCharacter.length; length > 0; length--) {
if (line.slice(0, length) == indentCharacter.slice(0, length)) {
line = line.slice(length);
break;
}
}
}
// Move the caret if on this line
const lineDelta = line.length - orLine.length;
if (startPoint.row == i)
startPoint.column = Math.max(0, startPoint.column + lineDelta);
if (endPoint.row == i)
endPoint.column = Math.max(0, endPoint.column + lineDelta);
// Return the adjusted line
const lineData = {
change: lineDelta > 0
? {
start: lineStart,
end: lineStart,
text: line.substring(0, lineDelta),
}
: { start: lineStart, end: lineStart - lineDelta, text: "" },
newLine: line,
};
lineStart += orLine.length; // Increase the lineStart index, for the next iteration
return lineData;
});
// Extract both the new text and the alterations from the change data
const alterations = changes
.map(({ change }) => change)
.filter((change) => !!change);
const newText = changes.map(({ newLine }) => newLine).join("");
// Calculate the new selection
let selection;
if (updateCaret) {
const startIndex = rangeConversion_1.get1dIndex(newText, startPoint);
const endIndex = rangeConversion_1.get1dIndex(newText, endPoint);
selection = { start: startIndex, end: endIndex };
}
return { alterations, selection };
});
}
exports.indentText = indentText;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZW50VGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXh0RmllbGRzL2ludGVyYWN0aW9uL2FkdmFuY2VkL2luZGVudFRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQWlGO0FBR2pGLDRFQUF1RTtBQUd2RTs7Ozs7O0dBTUc7QUFDSCxTQUFnQixVQUFVLENBQ3RCLFdBQTRCLEVBQzVCLE1BQWMsRUFDZCxrQkFBMEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDdkMsS0FBc0IsRUFDdEIsY0FBdUIsSUFBSTtJQUUzQixxREFBeUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyw4QkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyw0QkFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsNEJBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0RCxxREFBcUQ7UUFDckQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFH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
;