import {Command, ParseContext, wrapString} from "./command.js"; import {LexInput} from "../lexer.js"; import {StrVM} from "../vm.js"; import {Awaitable} from "../../util/types.js"; export class Words extends Command<{}> { attemptParse(context: ParseContext): {} { return {} } getDisplayName(): string { return 'words' } isParseCandidate(token: LexInput): boolean { return this.isKeyword(token, 'words') } execute(vm: StrVM): Awaitable { return vm.replaceContextMatchingTerm({ destructure: sub => { const separators = [...sub.matchAll(/\s+/sg)] const parts = sub.split(/\s+/sg) return parts.map((part, idx) => ({ prefix: idx ? separators[idx - 1][0] : undefined, value: wrapString(part), })) } }) } }