///|
/// Return cpdfcontent's initial page-boundary clipping path.
pub fn pdf_content_initial_clipping_path(
  minx : Double,
  miny : Double,
  maxx : Double,
  maxy : Double,
) -> Array[@shape.PdfPath] {
  [
    {
      winding_rule: PdfPathEvenOdd,
      subpaths: [
        {
          hole: PdfPathNotHole,
          closure: PdfPathClosed,
          segments: [
            PdfPathStraight(
              @geometry.point2(minx, miny),
              @geometry.point2(minx, maxy),
            ),
            PdfPathStraight(
              @geometry.point2(minx, maxy),
              @geometry.point2(maxx, maxy),
            ),
            PdfPathStraight(
              @geometry.point2(maxx, maxy),
              @geometry.point2(maxx, miny),
            ),
            PdfPathStraight(
              @geometry.point2(maxx, miny),
              @geometry.point2(minx, miny),
            ),
          ],
        },
      ],
    },
  ]
}

///|
/// Return cpdfcontent's initial drawn-path placeholder.
pub fn pdf_content_initial_drawn_path() -> @shape.PdfDrawnPath {
  {
    stroked: false,
    filled: false,
    path: { winding_rule: PdfPathEvenOdd, subpaths: [], },
  }
}

///|
fn pdf_content_initial_dash_pattern() -> PdfContentDashPattern {
  { array: [], phase: 0.0, }
}

///|
fn pdf_content_initial_colour_values(
  space : PdfColourSpace,
) -> PdfContentColourValues {
  match space {
    PdfDeviceGray | PdfCalGray(_) | PdfPattern => PdfContentColourFloats([0.0])
    PdfDeviceRGB | PdfCalRGB(_) => PdfContentColourFloats([0.0, 0.0, 0.0])
    PdfLab(_) => PdfContentColourFloats([0.0, 0.0, 0.0, 0.0])
    PdfDeviceCMYK => PdfContentColourFloats([0.0, 0.0, 0.0, 1.0])
    PdfICCBased(components, _, _, _, _) =>
      PdfContentColourFloats([ for _ in 0.. 0.0 ])
    PdfIndexed(_) => PdfContentColourFloats([0.0])
    PdfPatternWithBaseColourSpace(base)
    | PdfSeparation(_, base, _)
    | PdfDeviceN(_, base, _, _) => pdf_content_initial_colour_values(base)
  }
}

///|
/// Return cpdfcontent's initial path drawing state for a page boundary.
pub fn pdf_content_initial_path_state(
  minx : Double,
  miny : Double,
  maxx : Double,
  maxy : Double,
) -> PdfContentPathState {
  {
    clipping_path: pdf_content_initial_clipping_path(minx, miny, maxx, maxy),
    colourspace_stroke: PdfDeviceGray,
    colourspace_non_stroke: PdfDeviceGray,
    colour_stroke: PdfContentColourFloats([1.0]),
    colour_non_stroke: PdfContentColourFloats([1.0]),
    line_width: 1.0,
    line_cap: 0,
    line_join: 0,
    dash_pattern: pdf_content_initial_dash_pattern(),
    rendering_intent: "/RelativeColorimetric",
  }
}

///|
/// Return cpdfcontent's initial clipping-only state for a page boundary.
pub fn pdf_content_initial_clipping_state(
  minx : Double,
  miny : Double,
  maxx : Double,
  maxy : Double,
) -> PdfContentClippingState {
  { clipping_path: pdf_content_initial_clipping_path(minx, miny, maxx, maxy), }
}

///|
/// Return cpdfcontent's initial glyph state fields for a page boundary.
pub fn pdf_content_initial_glyph_state(
  minx : Double,
  miny : Double,
  maxx : Double,
  maxy : Double,
) -> PdfContentGlyphState {
  {
    rendering_mode: 0,
    knockout: true,
    font: "",
    font_size: 12.0,
    clipping_path: pdf_content_initial_clipping_path(minx, miny, maxx, maxy),
  }
}