///|
/// Split a book into sequential gatherings, padding only the final one to four.
pub fn signatures(
pages : Int32,
maximum : Int32,
) -> Result[Array[Signature], PlanError] {
match validate_config(pages, maximum) {
Err(e) => return Err(e)
Ok(_) => ()
}
let result : Array[Signature] = []
let mut start = 1
let mut remaining = pages
while remaining > 0 {
let real_pages = if remaining < maximum { remaining } else { maximum }
let padded = (real_pages + 3) / 4 * 4
result.push({ index: result.length(), start, pages: padded, real_pages, })
start += real_pages
remaining -= real_pages
}
Ok(result)
}