///|
fn pdf_ua_pdfua_marker_length(subformat : PdfUASubformat) -> Int {
  match subformat {
    PdfUA1 => pdf_ua_ascii_length("1\n")
    PdfUA2 =>
      pdf_ua_ascii_length("2\n") +
      pdf_ua_ascii_length("2024\n")
  }
}

///|
fn pdf_ua_write_pdfua_marker(
  output : Array[Byte],
  position : Int,
  subformat : PdfUASubformat,
) -> Int {
  match subformat {
    PdfUA1 =>
      pdf_ua_write_ascii(output, position, "1\n")
    PdfUA2 => {
      let mut current = pdf_ua_write_ascii(
        output, position, "2\n",
      )
      current = pdf_ua_write_ascii(
        output, current, "2024\n",
      )
      current
    }
  }
}

///|
fn pdf_ua_pdfua_marker_part_length(part : String, revision : Int?) -> Int {
  let mut length = pdf_ua_ascii_length("") +
    pdf_ua_ascii_length(part) +
    pdf_ua_ascii_length("\n")
  match revision {
    Some(year) =>
      length += pdf_ua_ascii_length("") +
        pdf_ua_ascii_length(year.to_string()) +
        pdf_ua_ascii_length("\n")
    None => ()
  }
  length
}

///|
fn pdf_ua_write_pdfua_marker_part(
  output : Array[Byte],
  position : Int,
  part : String,
  revision : Int?,
) -> Int {
  let mut current = pdf_ua_write_ascii(output, position, "")
  current = pdf_ua_write_ascii(output, current, part)
  current = pdf_ua_write_ascii(output, current, "\n")
  match revision {
    Some(year) => {
      current = pdf_ua_write_ascii(output, current, "")
      current = pdf_ua_write_ascii(output, current, year.to_string())
      current = pdf_ua_write_ascii(output, current, "\n")
      current
    }
    None => current
  }
}