///|
fn pdf_metadata_xml_parse_element(
data : BytesView,
start : Int,
context : ArrayView[(String, String)],
) -> (@metadata.PdfMetadataXmlTree, Int) raise @core.PdfError {
let (qualified_name, tag, child_context, self_closing, after_tag) = pdf_metadata_xml_parse_start_tag(
data, start, context,
)
if self_closing {
(PdfMetadataXmlElement(tag, []), after_tag)
} else {
let children : Array[@metadata.PdfMetadataXmlTree] = []
let mut index = after_tag
let mut closed = false
while !closed {
guard index < data.length() else { raise BadText }
if pdf_metadata_view_matches_at(data, index, b"") {
let (close_name, after_close) = pdf_metadata_xml_parse_close_tag(
data, index,
)
guard close_name == qualified_name else { raise BadText }
index = after_close
closed = true
} else if pdf_metadata_view_matches_at(data, index, b"