///|
/// Colour specification used by cpdf draw operations.
///
/// The `CYMK` spelling follows the OCaml source variant name in `cpdfdraw.ml`.
pub(all) enum PdfDrawColour {
PdfDrawNoCol
PdfDrawRGB(Double, Double, Double)
PdfDrawGrey(Double)
PdfDrawCYMK(Double, Double, Double, Double)
} derive(Debug, Eq, ToJson)
///|
/// Convert a cpdf content colour into the draw colour variant.
pub fn PdfContentColour::to_draw_colour(
self : PdfContentColour,
) -> PdfDrawColour {
match self {
PdfContentGrey(grey) => PdfDrawGrey(grey)
PdfContentRGB(red, green, blue) => PdfDrawRGB(red, green, blue)
PdfContentCMYK(cyan, magenta, yellow, black) =>
PdfDrawCYMK(cyan, magenta, yellow, black)
}
}
///|
/// Parse a cpdf draw-control colour argument.
///
/// This ports `cpdfdrawcontrol.ml`'s `parse_colour`/`col_of_string` path while
/// preserving the draw-layer `NoCol` sentinel separately from content colours.
pub fn pdf_parse_draw_colour(
text : String,
) -> PdfDrawColour raise @core.PdfError {
pdf_parse_content_colour(text).to_draw_colour()
}
///|
/// Parse a cpdf draw colour, returning `PdfDrawNoCol` on malformed input.
pub fn pdf_draw_colour_of_string(text : String) -> PdfDrawColour {
pdf_parse_draw_colour(text) catch {
_ => PdfDrawNoCol
}
}