///|
fn is_fragment_table_section_context(name : StringView) -> Bool {
match name {
"tbody" | "thead" | "tfoot" => true
_ => false
}
}
///|
fn Parser::parse_table_fragment_context(self : Parser) -> Unit {
let table = @dom.element("table")
self.fragment_context_table = Some(table)
self.root.append_child(table)
self.stack.push(table)
self.parse_all()
normalize_tables(table)
unwrap_fragment_context_element(self.root, table)
let table_index = self.last_stack_index_of_node(table)
let caption_index = self.last_stack_index_of("caption")
if table_index < 0 || caption_index <= table_index {
self.stack.clear()
self.stack.push(self.root)
}
self.fragment_context_table = None
}
///|
fn Parser::parse_table_section_fragment_context(
self : Parser,
name : String,
) -> Unit {
let table = @dom.element("table")
let section = @dom.element(name)
self.fragment_context_table = Some(table)
self.fragment_context_table_section = Some(section)
self.root.append_child(table)
table.append_child(section)
self.stack.push(table)
self.stack.push(section)
self.parse_all()
normalize_tables(section)
unwrap_fragment_context_element(table, section)
unwrap_fragment_context_element(self.root, table)
self.stack.clear()
self.stack.push(self.root)
self.fragment_context_table_section = None
self.fragment_context_table = None
}
///|
fn Parser::parse_table_row_fragment_context(self : Parser) -> Unit {
let table = @dom.element("table")
let section = @dom.element("tbody")
let row = @dom.element("tr")
self.fragment_context_table = Some(table)
self.fragment_context_table_section = Some(section)
self.fragment_context_table_row = Some(row)
self.root.append_child(table)
table.append_child(section)
section.append_child(row)
self.stack.push(table)
self.stack.push(section)
self.stack.push(row)
self.parse_all()
normalize_tables(row)
unwrap_fragment_context_element(section, row)
unwrap_fragment_context_element(table, section)
unwrap_fragment_context_element(self.root, table)
self.stack.clear()
self.stack.push(self.root)
self.fragment_context_table_row = None
self.fragment_context_table_section = None
self.fragment_context_table = None
}
///|
fn Parser::parse_table_cell_fragment_context(
self : Parser,
name : String,
) -> Unit {
let table = @dom.element("table")
let section = @dom.element("tbody")
let row = @dom.element("tr")
let cell = @dom.element(name)
self.fragment_context_table = Some(table)
self.fragment_context_table_section = Some(section)
self.fragment_context_table_row = Some(row)
self.fragment_context_table_cell = Some(cell)
self.root.append_child(table)
table.append_child(section)
section.append_child(row)
row.append_child(cell)
self.stack.push(table)
self.stack.push(section)
self.stack.push(row)
self.stack.push(cell)
self.parse_all()
normalize_tables(cell)
unwrap_fragment_context_element(row, cell)
unwrap_fragment_context_element(section, row)
unwrap_fragment_context_element(table, section)
unwrap_fragment_context_element(self.root, table)
self.stack.clear()
self.stack.push(self.root)
self.fragment_context_table_cell = None
self.fragment_context_table_row = None
self.fragment_context_table_section = None
self.fragment_context_table = None
}