///|
#warnings("-unused_value")
fn PdfDocument::pdf_impose_transform_content(
  self : PdfDocument,
  resources : @syntax.PdfObject,
  matrix : @geometry.TransformMatrix,
  content : ArrayView[@syntax.PdfObject],
  fast : Bool,
) -> Array[@syntax.PdfObject] raise @core.PdfError {
  if fast {
    let output : Array[@syntax.PdfObject] = [
      pdf_content_stream_of_ops([Op_q, Op_cm(matrix)]),
    ]
    pdf_impose_push_objects(output, content)
    output.push(pdf_content_stream_of_ops([Op_Q]))
    output
  } else {
    let old_ops = self.parse_content_ops_with_resources(resources, content)
    let protected_ops = pdf_page_concat_ops(pdf_page_protect(old_ops), old_ops)
    [
      pdf_content_stream_of_ops(
        pdf_page_concat_ops(
          [Op_q, Op_cm(matrix)],
          pdf_page_concat_ops(protected_ops, [Op_Q]),
        ),
      ),
    ]
  }
}

///|
fn PdfDocument::pdf_impose_combine_page_resources(
  self : PdfDocument,
  pages : ArrayView[@page.PdfPage],
) -> @syntax.PdfObject {
  let mut resources = pages[0].resources
  for index in 1.. @syntax.PdfObject {
  let mut rest = pages[0].rest
  for index in 1.. @page.PdfPage raise @core.PdfError {
  if pages.length() == 0 {
    raise BadNumberArgument("impose: pages must not be empty")
  }
  let first_page = pages[0]
  let transforms = self.pdf_impose_transforms(
    fit,
    x,
    y,
    columns,
    rtl,
    btt,
    center,
    margin,
    first_page.mediabox,
    output_mediabox,
    fit_extra_hspace,
    fit_extra_vspace,
    pages.length(),
  )
  for index in 0..