it works! produces the exact same xml as the python version
Some checks failed
/ test (push) Failing after 24s

This commit is contained in:
Jacob Lifshay 2026-01-06 13:54:53 -08:00
parent 73c45323c8
commit 9bf15dc9d0
Signed by: programmerjake
SSH key fingerprint: SHA256:HnFTLGpSm4Q4Fj502oCFisjZSoakwEuTsJJMSke63RQ
2 changed files with 22 additions and 3 deletions

View file

@ -3838,7 +3838,14 @@ fn main_inner() -> Result<(), Error> {
parser.parse_pdf(ctx, file_name, page_numbers, dump_mupdf_page_xml)?;
let mut insns = xml_tree::Element::new(
"instructions".into(),
[("is-subset".into(), is_subset.to_string())],
[(
"is-subset".into(),
if is_subset {
"True".into()
} else {
"False".into()
},
)],
);
insns.text = "\n".into();
insns.tail = "\n".into();

View file

@ -3,7 +3,7 @@
use quick_xml::{
Writer,
events::{BytesDecl, BytesText, Event},
events::{BytesDecl, BytesStart, BytesText, Event},
};
use std::fmt;
@ -183,6 +183,15 @@ impl Element {
ElementTag::Normal(tag) if tag.is_empty() => {
writer.write_event(Event::Text(BytesText::new(text)))?;
}
ElementTag::Normal(tag)
if attrib.is_empty() && text.is_empty() && children.is_empty() =>
{
// write element like `<br />` to match python instead of like `<br/>`
writer.write_event(Event::Empty(BytesStart::from_content(
tag.clone() + " ",
tag.len(),
)))?;
}
ElementTag::Normal(tag) => {
let mut element_writer = writer.create_element(tag);
for (name, value) in attrib {
@ -212,7 +221,10 @@ impl Element {
) -> std::io::Result<()> {
let mut writer = Writer::new(writer);
if xml_declaration {
writer.write_event(Event::Decl(BytesDecl::new("1.0", Some("utf-8"), None)))?;
// use specific string to match python
writer.write_event(Event::Decl(BytesDecl::from_start(
BytesStart::from_content("xml version='1.0' encoding='utf-8'", 3),
)))?;
writer.write_event(Event::Text(BytesText::new("\n")))?;
}
self.write_to(&mut writer)