@launchmenu/core
Version:
An environment for visual keyboard controlled applets
88 lines • 6.33 kB
JavaScript
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=
;