UNPKG

@launchmenu/core

Version:

An environment for visual keyboard controlled applets

88 lines 6.33 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.get1dSelectionRange = exports.get1dIndex = exports.get2dSelectionRange = exports.get2dIndex = exports.getTextLines = void 0; const getAce_1 = require("../../components/fields/editorField/getAce"); /** * Splits the text into its lines * @param text The text to split * @param includeEndings Whether to include line endings in the lines * @returns The split text */ function getTextLines(text, includeEndings = true) { if (!includeEndings) return text.split(/\r?\n/); const results = []; const tokens = text.split(/(\r?\n)/); for (let i = 0; i < tokens.length; i += 2) results.push(tokens[i] + (i + 1 < tokens.length ? tokens[i + 1] : "")); return results; } exports.getTextLines = getTextLines; /** * Creates a valid 2 dimensional index in the given text * @param text The text to perform the conversion with * @param index The 1 dimensional index * @returns The 2 dimensional index */ function get2dIndex(text, index) { const lines = getTextLines(text); let row = 0; let length; while ((length = lines[row].length) <= index && row < lines.length - 1) { index -= length; row++; } return { row, column: index }; } exports.get2dIndex = get2dIndex; /** * Creates a valid 2 dimensional range from a given 1 dimensional selection * @param text The text to perform the conversion with * @param selection The 1 dimensional selection * @returns The 2 dimensional selection range */ function get2dSelectionRange(text, selection) { const start = get2dIndex(text, selection.start); const end = get2dIndex(text, selection.end); return new (getAce_1.getAce().Range)(start.row, start.column, end.row, end.column); } exports.get2dSelectionRange = get2dSelectionRange; /** * Creates a valid 1 dimensional index in the given text * @param text The text to perform the conversion with * @param index The 2 dimensional index * @returns The 1 dimensional index */ function get1dIndex(text, index) { var _a, _b; const lines = getTextLines(text); const endinglessLines = getTextLines(text, false); let row = index.row; let out = Math.min(Math.max(0, ((_a = endinglessLines[row]) === null || _a === void 0 ? void 0 : _a.length) || 0), index.column); while (row > 0) out += ((_b = lines[--row]) === null || _b === void 0 ? void 0 : _b.length) || 0; return out; } exports.get1dIndex = get1dIndex; /** * Creates a valid 1 dimensional range from a given 2 dimensional selection * @param text The text to perform the conversion with * @param selection The 2 dimensional selection * @param reverse Whether the selection started at the end index * @returns The 1 dimensional selection range */ function get1dSelectionRange(text, selection, reverse) { const startIndex = get1dIndex(text, selection.start); const endIndex = get1dIndex(text, selection.end); return reverse ? { start: endIndex, end: startIndex, } : { start: startIndex, end: endIndex, }; } exports.get1dSelectionRange = get1dSelectionRange; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2VDb252ZXJzaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RleHRGaWVsZHMvdXRpbHMvcmFuZ2VDb252ZXJzaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVFQUFrRTtBQUdsRTs7Ozs7R0FLRztBQUNILFNBQWdCLFlBQVksQ0FBQyxJQUFZLEVBQUUsaUJBQTBCLElBQUk7SUFDckUsSUFBSSxDQUFDLGNBQWM7UUFBRSxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFaEQsTUFBTSxPQUFPLEdBQUcsRUFBYyxDQUFDO0lBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDckMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUM7UUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDM0UsT0FBTyxPQUFPLENBQUM7QUFDbkIsQ0FBQztBQVJELG9DQVFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixVQUFVLENBQUMsSUFBWSxFQUFFLEtBQWE7SUFDbEQsTUFBTSxLQUFLLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksTUFBTSxDQUFDO0lBQ1gsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNwRSxLQUFLLElBQUksTUFBTSxDQUFDO1FBQ2hCLEdBQUcsRUFBRSxDQUFDO0tBQ1Q7SUFDRCxPQUFPLEVBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsQ0FBQztBQUNoQyxDQUFDO0FBVEQsZ0NBU0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLG1CQUFtQixDQUFDLElBQVksRUFBRSxTQUF5QjtJQUN2RSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoRCxNQUFNLEdBQUcsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUM1QyxPQUFPLElBQUksQ0FBQyxlQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDOUUsQ0FBQztBQUpELGtEQUlDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixVQUFVLENBQUMsSUFBWSxFQUFFLEtBQW9DOztJQUN6RSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNsRCxJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDO0lBQ3BCLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsT0FBQSxlQUFlLENBQUMsR0FBRyxDQUFDLDBDQUFFLE1BQU0sS0FBSSxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDakYsT0FBTyxHQUFHLEdBQUcsQ0FBQztRQUFFLEdBQUcsSUFBSSxPQUFBLEtBQUssQ0FBQyxFQUFFLEdBQUcsQ0FBQywwQ0FBRSxNQUFNLEtBQUksQ0FBQyxDQUFDO0lBQ2pELE9BQU8sR0FBRyxDQUFDO0FBQ2YsQ0FBQztBQVBELGdDQU9DO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQy9CLElBQVksRUFDWixTQUFvQixFQUNwQixPQUFpQjtJQUVqQixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNyRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNqRCxPQUFPLE9BQU87UUFDVixDQUFDLENBQUM7WUFDSSxLQUFLLEVBQUUsUUFBUTtZQUNmLEdBQUcsRUFBRSxVQUFVO1NBQ2xCO1FBQ0gsQ0FBQyxDQUFDO1lBQ0ksS0FBSyxFQUFFLFVBQVU7WUFDakIsR0FBRyxFQUFFLFFBQVE7U0FDaEIsQ0FBQztBQUNaLENBQUM7QUFoQkQsa0RBZ0JDIn0=