Я ищу хорошее решение для нахождения горизонтального смещения, измеренного в символах позиции от начала линии. Это идентично столбцу, если между началом строки и целевой позицией нет символа табуляции.
123456|78 // column is 7, cursor offset is 7
^
\t56|78 // column is 4, cursor offset is 7 with a tabSize of 4
^
Код, который я сейчас использую:
/**
* Takes a line and a 0-based position within that line and returns a 0-based value telling
* how many character does that position appear to be from the start of the line
*/
countOffsetOf(line: string, position: number, tabSize: number): number {
let offset = 0;
let currPos = 0;
for (const ch of line) {
if (currPos == position) { break; }
if (ch === '\t') {
offset += tabSize - (position % tabSize);
} else { offset += 1; }
currPos += 1;
}
return offset;
}
Но самому неправильно считать это самому.
Есть ли способ сделать это с какой-нибудь существующей функцией Монако?