archive/directives/process/process_html_directives.js
function consume_directive_entity (proc_stack) {
  let pos = proc_stack._tGetNPos();

  proc_stack.tSkip(4);
  let directive_name = proc_stack.tAcceptUntil("(");
  proc_stack.tSkip();

  let raw_args = {};
  do {
    proc_stack.tSkipWhile(WHITESPACE);
    if (proc_stack.tPeek() == ")") {
      break;
    }

    let arg_name = proc_stack.tAcceptUntil("=");
    proc_stack.tSkip();

    raw_args[arg_name] = consume_char_data_with_entity_directives(proc_stack, true, ",", ")");
  } while (proc_stack.tSkipIf(","));

  if (!proc_stack.tSkipIf(")")) {
    throw new SyntaxError(`HTML directive entity is missing closing parenthesis`);
  }
  proc_stack.tSkipIf(";");

  return new DirectiveExpr(proc_stack, pos, directive_name, raw_args);
}
function consume_directive_entity (proc_stack) {
  let pos = proc_stack._tGetNPos();

  proc_stack.tSkip(4);
  let directive_name = proc_stack.tAcceptUntil("(");
  proc_stack.tSkip();

  let raw_args = {};
  do {
    proc_stack.tSkipWhile(WHITESPACE);
    if (proc_stack.tPeek() == ")") {
      break;
    }

    let arg_name = proc_stack.tAcceptUntil("=");
    proc_stack.tSkip();

    raw_args[arg_name] = consume_char_data_with_entity_directives(proc_stack, true, ",", ")");
  } while (proc_stack.tSkipIf(","));

  if (!proc_stack.tSkipIf(")")) {
    throw new SyntaxError(`HTML directive entity is missing closing parenthesis`);
  }
  proc_stack.tSkipIf(";");

  return new DirectiveExpr(proc_stack, pos, directive_name, raw_args);
}
Called on match `&zc-`