///|
fn Parser::report_form_end_tag_table_voodoo(
  self : Parser,
  name : String,
  start : Int,
) -> Unit {
  if name == "form" && self.current_is_table_or_section_context() {
    self.error_at("unexpected-end-tag-implies-table-voodoo", start)
  }
}

///|
fn Parser::handle_form_end_tag(self : Parser, start : Int) -> Unit {
  match self.form_element {
    Some(node) => {
      let removed = self.remove_open_node(node)
      self.form_element = None
      if !removed {
        self.error_at("unexpected-end-tag", start)
      }
    }
    None => self.error_at("unexpected-end-tag", start)
  }
}

///|
fn Parser::handle_duplicate_form_start_tag(
  self : Parser,
  name : StringView,
  start : Int,
) -> Bool {
  if name == "form" && self.form_element is Some(_) {
    self.error_at("unexpected-start-tag", start)
    true
  } else {
    false
  }
}

///|
fn Parser::track_form_start_element(
  self : Parser,
  name : StringView,
  node : @dom.Node,
) -> Unit {
  if name == "form" {
    self.form_element = Some(node)
  }
}