///|
fn pdf_content_copy_view(
output : Array[Byte],
position : Int,
view : BytesView,
) -> Int {
let mut position = position
for byte in view {
output[position] = byte
position += 1
}
position
}
///|
fn pdf_content_section_bytes(
operands : ArrayView[@syntax.PdfObject],
operator : BytesView,
) -> @core.PdfBytes raise @core.PdfError {
let rendered_operands : Array[@core.PdfBytes] = Array(
capacity=operands.length(),
)
let mut length = operator.length()
for operand in operands {
let bytes = pdf_write_object(operand)
length += bytes.length()
rendered_operands.push(bytes)
}
if operands.length() > 0 {
length += operands.length()
}
let output = Array::make(length, b' ')
let mut position = 0
for operand in rendered_operands {
if position > 0 {
output[position] = b' '
position += 1
}
position = pdf_content_copy_view(output, position, operand)
}
if position > 0 {
output[position] = b' '
position += 1
}
position = pdf_content_copy_view(output, position, operator)
Bytes::from_array(output[:position])
}
///|
fn pdf_content_number_object(value : Double) -> @syntax.PdfObject {
PdfReal(value)
}
///|
fn pdf_content_matrix_operands(
matrix : @geometry.TransformMatrix,
) -> Array[@syntax.PdfObject] {
[
pdf_content_number_object(matrix.a),
pdf_content_number_object(matrix.b),
pdf_content_number_object(matrix.c),
pdf_content_number_object(matrix.d),
pdf_content_number_object(matrix.e),
pdf_content_number_object(matrix.f),
]
}
///|
fn pdf_content_number_array(values : ArrayView[Double]) -> @syntax.PdfObject {
PdfArray([ for value in values => pdf_content_number_object(value) ])
}
///|
fn pdf_content_number_operands(
values : ArrayView[Double],
) -> Array[@syntax.PdfObject] {
[
for value in values => pdf_content_number_object(value)
]
}