UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

90 lines 8.34 kB
"use strict"; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZW50VGV4dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90ZXh0RmllbGRzL2ludGVyYWN0aW9uL2FkdmFuY2VkL2luZGVudFRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUVBQWlGO0FBR2pGLDRFQUF1RTtBQUd2RTs7Ozs7O0dBTUc7QUFDSCxTQUFnQixVQUFVLENBQ3RCLFdBQTRCLEVBQzVCLE1BQWMsRUFDZCxrQkFBMEIsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDdkMsS0FBc0IsRUFDdEIsY0FBdUIsSUFBSTtJQUUzQixxREFBeUIsQ0FBQyxXQUFXLEVBQUUsU0FBUyxDQUFDLEVBQUU7UUFDL0MsSUFBSSxDQUFDLEtBQUs7WUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzdDLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLEtBQUssR0FBRyw4QkFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRWpDLHFCQUFxQjtRQUNyQixNQUFNLFVBQVUsR0FBRyw0QkFBVSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDakQsTUFBTSxRQUFRLEdBQUcsNEJBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDeEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUV0RCxxREFBcUQ7UUFDckQsSUFBSSxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbEMsNkNBQTZDO1lBQzdDLElBQUksQ0FBQyxHQUFHLFFBQVEsSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFO2dCQUM1QixTQUFTLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQztnQkFDekIsT0FBTyxFQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDO2FBQzdDO1lBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBRXBCLCtCQUErQjtZQUMvQixJQUFJLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDeEIsT0FBTyxVQUFVLEdBQUcsQ0FBQyxFQUFFO2dCQUNuQixVQUFVLEVBQUUsQ0FBQztnQkFDYixJQUFJLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQzthQUNqQztZQUVELCtCQUErQjtZQUMvQixPQUNJLFVBQVUsR0FBRyxDQUFDO2dCQUNkLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxlQUFlLEVBQzFEO2dCQUNFLFVBQVUsRUFBRSxDQUFDO2dCQUNiLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUM3QztZQUVELDhEQUE4RDtZQUM5RCxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssSUFBSSxNQUFNLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUM1RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFO3dCQUMzRCxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDMUIsTUFBTTtxQkFDVDtpQkFDSjthQUNKO1lBRUQsaUNBQWlDO1lBQ2pDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxJQUFJLFVBQVUsQ0FBQyxHQUFHLElBQUksQ0FBQztnQkFDbkIsVUFBVSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDO1lBQ25FLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNqQixRQUFRLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUM7WUFFL0QsMkJBQTJCO1lBQzNCLE1BQU0sUUFBUSxHQUFHO2dCQUNiLE1BQU0sRUFDRixTQUFTLEdBQUcsQ0FBQztvQkFDVCxDQUFDLENBQUM7d0JBQ0ksS0FBSyxFQUFFLFNBQVM7d0JBQ2hCLEdBQUcsRUFBRSxTQUFTO3dCQUNkLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUM7cUJBQ3JDO29CQUNILENBQUMsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBQztnQkFDbEUsT0FBTyxFQUFFLElBQUk7YUFDaEIsQ0FBQztZQUNGLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsdURBQXVEO1lBQ25GLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUMsQ0FBQyxDQUFDO1FBRUgscUVBQXFFO1FBQ3JFLE1BQU0sV0FBVyxHQUFHLE9BQU87YUFDdEIsR0FBRyxDQUFDLENBQUMsRUFBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDO2FBQ3pCLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBNkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3RCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRTdELDhCQUE4QjtRQUM5QixJQUFJLFNBQXFDLENBQUM7UUFDMUMsSUFBSSxXQUFXLEVBQUU7WUFDYixNQUFNLFVBQVUsR0FBRyw0QkFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNuRCxNQUFNLFFBQVEsR0FBRyw0QkFBVSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUMvQyxTQUFTLEdBQUcsRUFBQyxLQUFLLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUMsQ0FBQztTQUNsRDtRQUVELE9BQU8sRUFBQyxXQUFXLEVBQUUsU0FBUyxFQUFDLENBQUM7SUFDcEMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDO0FBN0ZELGdDQTZGQyJ9