/** * https://tools.ietf.org/html/rfc5228#section-2.9 * A control structure is a control command that ends with a block instead of a semicolon. */ import { ControlCommand, GrammarStringList, GrammarQuotedString } from 'Sieve/Grammar'; /** * https://tools.ietf.org/html/rfc5228#section-3.1 * Usage: * if * elsif * else */ export class ConditionalCommand extends ControlCommand { constructor() { super(); this.test = null; } toString() { return this.identifier + ' ' + this.test + ' ' + this.commands; } /* public function pushArguments(array $args): void { args.forEach((arg, i) => { if (i && ':' === args[i-1][0]) { this[args[i-1].replace(':','_')].value = arg.value; } }); print_r($args); exit; } */ } export class IfCommand extends ConditionalCommand { } export class ElsIfCommand extends ConditionalCommand { } export class ElseCommand extends ConditionalCommand { toString() { return this.identifier + ' ' + this.commands; } } /** * https://tools.ietf.org/html/rfc5228#section-3.2 */ export class RequireCommand extends ControlCommand { constructor() { super(); this.capabilities = new GrammarStringList(); } toString() { return 'require ' + this.capabilities + ';'; } pushArguments(args) { if (args[0] instanceof GrammarStringList) { this.capabilities = args[0]; } else if (args[0] instanceof GrammarQuotedString) { this.capabilities.push(args[0]); } } } /** * https://tools.ietf.org/html/rfc5228#section-3.3 */ export class StopCommand extends ControlCommand { }