286
287
constructor(private readonly text: string, brackets: BracketTokens) {
288
>
const regExpStr = brackets.getRegExpStr();
tokenizer.ts
289
>
const regexp = regExpStr ? new RegExp(regExpStr + '|\n', 'gi') : null;
290
>
291
>
const tokens: Token[] = [];
292
>
293
>
let match: RegExpExecArray | null;
294
>
let curLineCount = 0;
295
>
let lastLineBreakOffset = 0;
296
>
297
>
let lastTokenEndOffset = 0;
298
>
let lastTokenEndLine = 0;
299
>
300
>
const smallTextTokens0Line: Token[] = [];
301
>
for (let i = 0; i < 60; i++) {
302
>
smallTextTokens0Line.push(
303
>
new Token(
304
>
toLength(0, i), TokenKind.Text, -1, SmallImmutableSet.getEmpty(),
305
>
new TextAstNode(toLength(0, i))
306
>
)
307
>
);
308
>
}
309
>
310
>
const smallTextTokens1Line: Token[] = [];
311
>
for (let i = 0; i < 60; i++) {
312
>
smallTextTokens1Line.push(
313
>
new Token(
314
>
toLength(1, i), TokenKind.Text, -1, SmallImmutableSet.getEmpty(),
315
>
new TextAstNode(toLength(1, i))
316
>
)
317
>
);
318
>
}
319
>
320
>
if (regexp) {
321
>
regexp.lastIndex = 0;
322
>
// If a token contains indentation, it also contains \n{INDENTATION+}(?!{INDENTATION})
323
>
while ((match = regexp.exec(text)) !== null) {
324
>
const curOffset = match.index;
325
>
const value = match[0];
326
>
if (value === '\n') {
327
curLineCount++;
328
lastLineBreakOffset = curOffset + 1;
330
if (lastTokenEndOffset !== curOffset) {
331
let token: Token;