monaco-editor-core
Version:
A browser based code editor
25 lines (24 loc) • 925 B
JavaScript
import { OffsetRange } from './offsetRange.js';
import { TextLength } from './textLength.js';
export class PositionOffsetTransformer {
constructor(text) {
this.text = text;
this.lineStartOffsetByLineIdx = [];
this.lineStartOffsetByLineIdx.push(0);
for (let i = 0; i < text.length; i++) {
if (text.charAt(i) === '\n') {
this.lineStartOffsetByLineIdx.push(i + 1);
}
}
}
getOffset(position) {
return this.lineStartOffsetByLineIdx[position.lineNumber - 1] + position.column - 1;
}
getOffsetRange(range) {
return new OffsetRange(this.getOffset(range.getStartPosition()), this.getOffset(range.getEndPosition()));
}
get textLength() {
const lineIdx = this.lineStartOffsetByLineIdx.length - 1;
return new TextLength(lineIdx, this.text.length - this.lineStartOffsetByLineIdx[lineIdx]);
}
}