import { stringWidth } from './stringWidth.js'; import { createTokenizer } from './termio/tokenize.js'; const DEFAULT_TAB_INTERVAL = 8; export function expandTabs(text: string, interval = DEFAULT_TAB_INTERVAL): string { if (!text.includes('\t')) return text; const tokenizer = createTokenizer(); const tokens = tokenizer.feed(text); tokens.push(...tokenizer.flush()); let out = ''; let column = 0; for (const token of tokens) { if (token.type === 'sequence') { out += token.value; continue; } const segments = token.value.split(/(\t|\n)/); for (const segment of segments) { if (segment === '\t') { const padding = interval - (column % interval); out += ' '.repeat(padding); column += padding; } else if (segment === '\n') { out += segment; column = 0; } else { out += segment; column += stringWidth(segment); } } } return out; }