Смещение знака с учетом размера табуляции - PullRequest
0 голосов
/ 10 марта 2020

Я ищу хорошее решение для нахождения горизонтального смещения, измеренного в символах позиции от начала линии. Это идентично столбцу, если между началом строки и целевой позицией нет символа табуляции.

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;
}

Но самому неправильно считать это самому.

Есть ли способ сделать это с какой-нибудь существующей функцией Монако?

...