689
690
public findMatchesInNode(node: TreeNode, searcher: Searcher, startLineNumber: number, startColumn: number, startCursor: BufferCursor, endCursor: BufferCursor, searchData: SearchData, captureMatches: boolean, limitResultCount: number, resultLen: number, result: FindMatch[]) {
692
>
const startOffsetInBuffer = this.offsetInBuffer(node.piece.bufferIndex, node.piece.start);
693
>
const start = this.offsetInBuffer(node.piece.bufferIndex, startCursor);
694
>
const end = this.offsetInBuffer(node.piece.bufferIndex, endCursor);
695
>
696
>
let m: RegExpExecArray | null;
697
>
// Reset regex to search from the beginning
698
>
const ret: BufferCursor = { line: 0, column: 0 };
699
>
let searchText: string;
700
>
let offsetInBuffer: (offset: number) => number;
701
>
702
>
if (searcher._wordSeparators) {
703
searchText = buffer.buffer.substring(start, end);
704
offsetInBuffer = (offset: number) => offset + start;
705
searcher.reset(0);
707
searchText = buffer.buffer;
708
offsetInBuffer = (offset: number) => offset;
709
searcher.reset(start);
710
}
712
>
do {
713
>
m = searcher.next(searchText);
714
>
715
>
if (m) {
716
>
if (offsetInBuffer(m.index) >= end) {
717
return resultLen;
718
}
719
>
this.positionInBuffer(node, offsetInBuffer(m.index) - startOffsetInBuffer, ret);
pieceTreeBase.ts
720
>
const lineFeedCnt = this.getLineFeedCnt(node.piece.bufferIndex, startCursor, ret);
721
>
const retStartColumn = ret.line === startCursor.line ? ret.column - startCursor.column + startColumn : ret.column + 1;
722
>
const retEndColumn = retStartColumn + m[0].length;
723
>
result[resultLen++] = createFindMatch(new Range(startLineNumber + lineFeedCnt, retStartColumn, startLineNumber + lineFeedCnt, retEndColumn), m, captureMatches);
724
>
725
>
if (offsetInBuffer(m.index) + m[0].length >= end) {
726
return resultLen;
727
}
729
return resultLen;
730
}
732
>
733
>
} while (m);
734
>
735
>
return resultLen;
736
>
}
737
738
public findMatchesLineByLine(searchRange: Range, searchData: SearchData, captureMatches: boolean, limitResultCount: number): FindMatch[] {