archive/directives/process/process_html_directives.js
function consume_char_data_with_entity_directives (proc_stack, decode_entities, break_on_a, break_on_b) {
  let parts = [];
  let cur_literal = "";

  while (!proc_stack.tMatches(break_on_a) &&
         (!break_on_b || !proc_stack.tMatches(break_on_b))) {
    let matched = false;

    if (proc_stack.tMatches("&zc-")) {
      if (decode_entities) {
        cur_literal = htmlEntities.decode(cur_literal);
      }
      parts.push(cur_literal);
      cur_literal = "";
      parts.push(consume_directive_entity(proc_stack));
      matched = true;
      break;
    } else {
      cur_literal += proc_stack.tAccept();
    }
  }

  if (decode_entities) {
    cur_literal = htmlEntities.decode(cur_literal);
  }
  parts.push(cur_literal);
  return parts;
}
function consume_char_data_with_entity_directives (proc_stack, decode_entities, break_on_a, break_on_b) {
  let parts = [];
  let cur_literal = "";

  while (!proc_stack.tMatches(break_on_a) &&
         (!break_on_b || !proc_stack.tMatches(break_on_b))) {
    let matched = false;

    if (proc_stack.tMatches("&zc-")) {
      if (decode_entities) {
        cur_literal = htmlEntities.decode(cur_literal);
      }
      parts.push(cur_literal);
      cur_literal = "";
      parts.push(consume_directive_entity(proc_stack));
      matched = true;
      break;
    } else {
      cur_literal += proc_stack.tAccept();
    }
  }

  if (decode_entities) {
    cur_literal = htmlEntities.decode(cur_literal);
  }
  parts.push(cur_literal);
  return parts;
}
Used to process: - directive entity argument values - directive tag argument values - attribute values