///|
/// Read a tiling pattern as the current placeholder representation.
pub fn pdf_content_read_tiling_pattern(
  _pattern : @syntax.PdfObject,
) -> PdfContentPattern {
  PdfContentColouredTilingPattern(PdfContentTiling)
}

///|
/// Read a `/PatternType 2` shading pattern dictionary.
pub fn PdfDocument::content_read_shading_pattern(
  self : PdfDocument,
  pattern : @syntax.PdfObject,
) -> PdfContentPattern raise @core.PdfError {
  let matrix = self.parse_matrix(pdf_content_shading_matrix_name, pattern)
  let extgstate = match
    self.lookup_direct(pdf_content_shading_extgstate_name, pattern) {
    Some(PdfDictionary(_) as dictionary) => dictionary
    _ => @syntax.pdf_dictionary([])
  }
  match self.lookup_direct(pdf_content_shading_shading_name, pattern) {
    Some(shading) =>
      PdfContentShadingPattern(
        self.content_read_shading(matrix, extgstate, shading),
      )
    None => raise SoftError("No shading dictionary")
  }
}

///|
/// Look up and read a named pattern resource.
pub fn PdfDocument::content_read_pattern(
  self : PdfDocument,
  resources : @syntax.PdfObject,
  name : @core.PdfName,
) -> PdfContentPattern? raise @core.PdfError {
  match self.lookup_direct(pdf_content_shading_pattern_name, resources) {
    Some(pattern_dictionary) =>
      match self.lookup_direct(name, pattern_dictionary) {
        Some(pattern) =>
          match
            self.lookup_direct(pdf_content_shading_pattern_type_name, pattern) {
            Some(PdfInteger(1)) =>
              Some(pdf_content_read_tiling_pattern(pattern))
            Some(PdfInteger(2)) =>
              Some(self.content_read_shading_pattern(pattern))
            _ => None
          }
        None => None
      }
    None => None
  }
}

///|
/// Function wrapper for `PdfDocument::content_read_pattern`.
pub fn pdf_content_read_pattern(
  document : PdfDocument,
  resources : @syntax.PdfObject,
  name : @core.PdfName,
) -> PdfContentPattern? raise @core.PdfError {
  document.content_read_pattern(resources, name)
}