mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-14 19:27:04 -04:00
Merge pull request #18 from storytold/pr/never-crash-organize
Never crash: organize has no expect/unreachable
This commit is contained in:
4 files changed
+9
-4
No files matched your search
@@ -562,6 +562,7 @@ fn add_outline(doc: &mut Document, marks: &[Mark<'_>]) -> Result<(), OrganizeErr
|
||||
}
|
||||
let outlines = doc.add(Object::Null);
|
||||
let items: Vec<ObjRef> = marks.iter().map(|_| doc.add(Object::Null)).collect();
|
||||
let (Some(&first_item), Some(&last_item)) = (items.first(), items.last()) else { return Ok(()) };
|
||||
for (i, ((title, page, src, page_map), r)) in marks.iter().zip(&items).enumerate() {
|
||||
let mut d = Dict::new();
|
||||
d.set(b"Title".to_vec(), Object::String(printcraft_cos::PdfString::text(title)));
|
||||
@@ -589,8 +590,8 @@ fn add_outline(doc: &mut Document, marks: &[Mark<'_>]) -> Result<(), OrganizeErr
|
||||
}
|
||||
let mut o = Dict::new();
|
||||
o.set(b"Type".to_vec(), Object::name("Outlines"));
|
||||
o.set(b"First".to_vec(), Object::Ref(items[0]));
|
||||
o.set(b"Last".to_vec(), Object::Ref(*items.last().expect("non-empty")));
|
||||
o.set(b"First".to_vec(), Object::Ref(first_item));
|
||||
o.set(b"Last".to_vec(), Object::Ref(last_item));
|
||||
o.set(b"Count".to_vec(), Object::Int(items.len() as i64));
|
||||
doc.set(outlines, Object::Dict(o));
|
||||
let root = doc.root().ok_or(OrganizeError::NoPageTree)?;
|
||||
|
||||
@@ -212,7 +212,8 @@ pub fn number_pages(doc: &mut Document, from: usize, to: usize, style: LabelStyl
|
||||
if old.first().is_none_or(|r| r.start > 0) {
|
||||
old.insert(0, default_range());
|
||||
}
|
||||
let at = |p: usize| old.iter().rev().find(|r| r.start <= p).cloned().expect("a range starts at 0");
|
||||
// `old` starts at page 0, so a range is always found.
|
||||
let at = |p: usize| old.iter().rev().find(|r| r.start <= p).cloned().unwrap_or_else(default_range);
|
||||
let mut ranges: Vec<LabelRange> = old.iter().filter(|r| r.start < from).cloned().collect();
|
||||
ranges.push(LabelRange { start: from, style, prefix: prefix.to_string(), first: first.max(1) });
|
||||
if to + 1 < n {
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
//! save drops them; an incremental save leaves them untouched). Flat trees are valid for any
|
||||
//! page count and are what most producers write for small documents.
|
||||
|
||||
#![deny(clippy::unwrap_used, clippy::expect_used, clippy::panic, clippy::unimplemented, clippy::todo, clippy::unreachable)]
|
||||
|
||||
use printcraft_cos::{Dict, Document, ObjRef, Object, PdfString};
|
||||
|
||||
mod boxes;
|
||||
|
||||
@@ -112,7 +112,8 @@ fn resolve_path(doc: &Document, path: &[usize]) -> Result<(ObjRef, ObjRef)> {
|
||||
}
|
||||
parent = r;
|
||||
}
|
||||
unreachable!("the loop returns on the last index")
|
||||
// The loop returns on the last index.
|
||||
Err(OutlineError::NoSuchBookmark(path.to_vec()))
|
||||
}
|
||||
|
||||
/// The object that holds children at `parent_path` (`[]` = the outline root, created if needed).
|
||||
|
||||
Reference in new issue
Block a user