change to a library

This commit is contained in:
Jacob Lifshay 2026-01-06 15:04:47 -08:00
parent 76438b727c
commit b68cb274da
Signed by: programmerjake
SSH key fingerprint: SHA256:HnFTLGpSm4Q4Fj502oCFisjZSoakwEuTsJJMSke63RQ
2 changed files with 25 additions and 6 deletions

View file

@ -2016,7 +2016,7 @@ struct Parser<'ctx> {
}
#[derive(Debug)]
struct Error(String, Backtrace);
pub struct Error(String, Backtrace);
impl fmt::Display for Error {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
@ -2026,6 +2026,8 @@ impl fmt::Display for Error {
}
}
impl std::error::Error for Error {}
trait IntoError: fmt::Display {}
impl<T: IntoError> From<T> for Error {
@ -3831,10 +3833,22 @@ fn main_inner() -> Result<(), Error> {
} else {
None
};
std::fs::write(
"powerisa-instructions.xml",
parse_powerisa_pdf_and_generate_xml(&args[1], page_numbers, dump_mupdf_page_xml)?,
)?;
Ok(())
}
pub fn parse_powerisa_pdf_and_generate_xml(
file_name: &str,
page_numbers: Option<Box<dyn Iterator<Item = NonZero<u32>>>>,
dump_mupdf_page_xml: bool,
) -> Result<String, Error> {
mupdf_ffi::Context::with(|ctx| {
let mut parser = Parser::new();
let is_subset = page_numbers.is_some();
let file_name = &args[1];
parser.parse_pdf(ctx, file_name, page_numbers, dump_mupdf_page_xml)?;
let mut insns = xml_tree::Element::new(
"instructions".into(),
@ -3858,16 +3872,15 @@ fn main_inner() -> Result<(), Error> {
}
let mut output = Vec::new();
insns.write(&mut output, true)?;
std::fs::write("powerisa-instructions.xml", output)?;
Ok(())
Ok(String::from_utf8(output).expect("known to generate valid utf-8"))
})
}
fn main() -> std::process::ExitCode {
pub fn main() -> std::process::ExitCode {
match main_inner() {
Ok(()) => std::process::ExitCode::SUCCESS,
Err(e) => {
println!("Error: {e}");
eprintln!("Error: {e}");
std::process::ExitCode::FAILURE
}
}

6
src/main.rs Normal file
View file

@ -0,0 +1,6 @@
// SPDX-License-Identifier: LGPL-3.0-or-later
// See Notices.txt for copyright information
fn main() -> std::process::ExitCode {
parse_powerisa_pdf::main()
}