///|
let pdf_content_inline_decode_parms_key_name : @core.PdfName = pdf_content_name(
"/DecodeParms",
)
///|
let pdf_content_inline_dp_key_name : @core.PdfName = pdf_content_name("/DP")
///|
let pdf_content_inline_filter_key_name : @core.PdfName = pdf_content_name(
"/Filter",
)
///|
let pdf_content_inline_f_key_name : @core.PdfName = pdf_content_name("/F")
///|
let pdf_content_inline_dctdecode_name_value : @core.PdfName = pdf_content_name(
"/DCTDecode",
)
///|
let pdf_content_inline_dct_name_value : @core.PdfName = pdf_content_name("/DCT")
///|
let pdf_content_inline_ascii_hexdecode_name_value : @core.PdfName = pdf_content_name(
"/ASCIIHexDecode",
)
///|
let pdf_content_inline_ahx_name_value : @core.PdfName = pdf_content_name("/AHx")
///|
let pdf_content_inline_ascii85decode_name_value : @core.PdfName = pdf_content_name(
"/ASCII85Decode",
)
///|
let pdf_content_inline_a85_name_value : @core.PdfName = pdf_content_name("/A85")
///|
let pdf_content_inline_runlengthdecode_name_value : @core.PdfName = pdf_content_name(
"/RunLengthDecode",
)
///|
let pdf_content_inline_rl_name_value : @core.PdfName = pdf_content_name("/RL")
///|
let pdf_content_inline_flatedecode_name_value : @core.PdfName = pdf_content_name(
"/FlateDecode",
)
///|
let pdf_content_inline_fl_name_value : @core.PdfName = pdf_content_name("/Fl")
///|
let pdf_content_inline_lzwdecode_name_value : @core.PdfName = pdf_content_name(
"/LZWDecode",
)
///|
let pdf_content_inline_lzw_name_value : @core.PdfName = pdf_content_name("/LZW")
///|
let pdf_content_inline_im_key_name : @core.PdfName = pdf_content_name("/IM")
///|
let pdf_content_inline_image_mask_key_name : @core.PdfName = pdf_content_name(
"/ImageMask",
)
///|
let pdf_content_inline_cs_key_name : @core.PdfName = pdf_content_name("/CS")
///|
let pdf_content_inline_colorspace_key_name : @core.PdfName = pdf_content_name(
"/ColorSpace",
)
///|
let pdf_content_inline_g_name : @core.PdfName = pdf_content_name("/G")
///|
let pdf_content_inline_device_gray_name : @core.PdfName = pdf_content_name(
"/DeviceGray",
)
///|
let pdf_content_inline_rgb_name : @core.PdfName = pdf_content_name("/RGB")
///|
let pdf_content_inline_device_rgb_name : @core.PdfName = pdf_content_name(
"/DeviceRGB",
)
///|
let pdf_content_inline_cmyk_name : @core.PdfName = pdf_content_name("/CMYK")
///|
let pdf_content_inline_device_cmyk_name : @core.PdfName = pdf_content_name(
"/DeviceCMYK",
)
///|
let pdf_content_inline_bpc_key_name : @core.PdfName = pdf_content_name("/BPC")
///|
let pdf_content_inline_bits_per_component_key_name : @core.PdfName = pdf_content_name(
"/BitsPerComponent",
)
///|
let pdf_content_inline_w_key_name : @core.PdfName = pdf_content_name("/W")
///|
let pdf_content_inline_width_key_name : @core.PdfName = pdf_content_name(
"/Width",
)
///|
let pdf_content_inline_h_key_name : @core.PdfName = pdf_content_name("/H")
///|
let pdf_content_inline_height_key_name : @core.PdfName = pdf_content_name(
"/Height",
)
///|
fn pdf_content_inline_decode_parms_name() -> @core.PdfName {
pdf_content_inline_decode_parms_key_name
}
///|
fn pdf_content_inline_dp_name() -> @core.PdfName {
pdf_content_inline_dp_key_name
}
///|
fn pdf_content_inline_filter_name() -> @core.PdfName {
pdf_content_inline_filter_key_name
}
///|
fn pdf_content_inline_f_name() -> @core.PdfName {
pdf_content_inline_f_key_name
}
///|
fn pdf_content_inline_dctdecode_name() -> @core.PdfName {
pdf_content_inline_dctdecode_name_value
}
///|
fn pdf_content_inline_dct_name() -> @core.PdfName {
pdf_content_inline_dct_name_value
}
///|
fn pdf_content_inline_ascii_hexdecode_name() -> @core.PdfName {
pdf_content_inline_ascii_hexdecode_name_value
}
///|
fn pdf_content_inline_ahx_name() -> @core.PdfName {
pdf_content_inline_ahx_name_value
}
///|
fn pdf_content_inline_ascii85decode_name() -> @core.PdfName {
pdf_content_inline_ascii85decode_name_value
}
///|
fn pdf_content_inline_a85_name() -> @core.PdfName {
pdf_content_inline_a85_name_value
}
///|
fn pdf_content_inline_runlengthdecode_name() -> @core.PdfName {
pdf_content_inline_runlengthdecode_name_value
}
///|
fn pdf_content_inline_rl_name() -> @core.PdfName {
pdf_content_inline_rl_name_value
}
///|
fn pdf_content_inline_flatedecode_name() -> @core.PdfName {
pdf_content_inline_flatedecode_name_value
}
///|
fn pdf_content_inline_fl_name() -> @core.PdfName {
pdf_content_inline_fl_name_value
}
///|
fn pdf_content_inline_lzwdecode_name() -> @core.PdfName {
pdf_content_inline_lzwdecode_name_value
}
///|
fn pdf_content_inline_lzw_name() -> @core.PdfName {
pdf_content_inline_lzw_name_value
}
///|
fn pdf_content_inline_filter_value(
dictionary : @syntax.PdfObject,
) -> @syntax.PdfObject? {
match dictionary.lookup_immediate(pdf_content_inline_f_name()) {
Some(value) => Some(value)
None => dictionary.lookup_immediate(pdf_content_inline_filter_name())
}
}
///|
fn pdf_content_inline_lookup_orelse(
dictionary : @syntax.PdfObject,
first : @core.PdfName,
second : @core.PdfName,
) -> @syntax.PdfObject? {
match dictionary.lookup_immediate(first) {
Some(value) => Some(value)
None => dictionary.lookup_immediate(second)
}
}
///|
fn pdf_content_inline_int_orelse(
dictionary : @syntax.PdfObject,
first : @core.PdfName,
second : @core.PdfName,
) -> Int? {
match pdf_content_inline_lookup_orelse(dictionary, first, second) {
Some(PdfInteger(value)) if value >= 0 => Some(value)
_ => None
}
}
///|
fn pdf_content_inline_image_mask(dictionary : @syntax.PdfObject) -> Bool {
match
pdf_content_inline_lookup_orelse(
dictionary, pdf_content_inline_im_key_name, pdf_content_inline_image_mask_key_name,
) {
Some(PdfBoolean(true)) => true
_ => false
}
}
///|
fn pdf_content_inline_components(
colour_space_components : PdfContentColourSpaceComponents?,
dictionary : @syntax.PdfObject,
) -> Int? raise @core.PdfError {
match
pdf_content_inline_lookup_orelse(
dictionary, pdf_content_inline_cs_key_name, pdf_content_inline_colorspace_key_name,
) {
Some(PdfNameObject(name)) =>
if name == pdf_content_inline_g_name ||
name == pdf_content_inline_device_gray_name {
Some(1)
} else if name == pdf_content_inline_rgb_name ||
name == pdf_content_inline_device_rgb_name {
Some(3)
} else if name == pdf_content_inline_cmyk_name ||
name == pdf_content_inline_device_cmyk_name {
Some(4)
} else {
match colour_space_components {
Some(components) => Some(components(PdfNameObject(name)))
None => None
}
}
Some(colour_space) =>
match colour_space_components {
Some(components) => Some(components(colour_space))
None => None
}
None if pdf_content_inline_image_mask(dictionary) => Some(1)
_ => None
}
}
///|
fn pdf_content_inline_bits_per_component(
dictionary : @syntax.PdfObject,
) -> Int? {
match
pdf_content_inline_int_orelse(
dictionary, pdf_content_inline_bpc_key_name, pdf_content_inline_bits_per_component_key_name,
) {
Some(value) if value > 0 => Some(value)
None if pdf_content_inline_image_mask(dictionary) => Some(1)
_ => None
}
}
///|
fn pdf_content_inline_declared_data_length(
dictionary : @syntax.PdfObject,
) -> Int? {
pdf_content_inline_int_orelse(
dictionary, pdf_content_inline_l_key_name, pdf_content_length_key_name,
)
}
///|
fn pdf_content_inline_filter_is_empty(dictionary : @syntax.PdfObject) -> Bool {
match pdf_content_inline_filter_value(dictionary) {
None | Some(PdfArray([])) => true
_ => false
}
}
///|
fn pdf_content_inline_image_data_length(
colour_space_components : PdfContentColourSpaceComponents?,
dictionary : @syntax.PdfObject,
) -> Int? raise @core.PdfError {
if !pdf_content_inline_filter_is_empty(dictionary) {
pdf_content_inline_declared_data_length(dictionary)
} else {
let declared = pdf_content_inline_declared_data_length(dictionary)
let metadata_length = try {
match
(
pdf_content_inline_int_orelse(
dictionary, pdf_content_inline_w_key_name, pdf_content_inline_width_key_name,
),
pdf_content_inline_int_orelse(
dictionary, pdf_content_inline_h_key_name, pdf_content_inline_height_key_name,
),
pdf_content_inline_bits_per_component(dictionary),
pdf_content_inline_components(colour_space_components, dictionary),
) {
(Some(width), Some(height), Some(bits), Some(components)) => {
let row_bits = width * components * bits
let row_bytes = if row_bits % 8 == 0 {
row_bits / 8
} else {
row_bits / 8 + 1
}
Some(row_bytes * height)
}
_ => None
}
} catch {
error =>
match declared {
Some(_) => declared
None => raise error
}
}
match metadata_length {
Some(length) => Some(length)
None => declared
}
}
}