221
*/
222
public withInserted(insertTokens: { offset: number; text: string; tokenMetadata: number }[]): LineTokens {
224
return this;
225
}
227
>
let nextOriginalTokenIdx = 0;
228
>
let nextInsertTokenIdx = 0;
229
>
let text = '';
230
>
const newTokens = new Array<number>();
231
>
232
>
let originalEndOffset = 0;
233
>
while (true) {
234
>
const nextOriginalTokenEndOffset = nextOriginalTokenIdx < this._tokensCount ? this._tokens[nextOriginalTokenIdx << 1] : -1;
235
>
const nextInsertToken = nextInsertTokenIdx < insertTokens.length ? insertTokens[nextInsertTokenIdx] : null;
236
>
237
>
if (nextOriginalTokenEndOffset !== -1 && (nextInsertToken === null || nextOriginalTokenEndOffset <= nextInsertToken.offset)) {
238
>
// original token ends before next insert token
239
>
text += this._text.substring(originalEndOffset, nextOriginalTokenEndOffset);
240
>
const metadata = this._tokens[(nextOriginalTokenIdx << 1) + 1];
241
>
newTokens.push(text.length, metadata);
242
>
nextOriginalTokenIdx++;
243
>
originalEndOffset = nextOriginalTokenEndOffset;
244
>
245
>
} else if (nextInsertToken) {
246
>
if (nextInsertToken.offset > originalEndOffset) {
247
// insert token is in the middle of the next token.
248
text += this._text.substring(originalEndOffset, nextInsertToken.offset);