// Main package file for your library code.
// Put public APIs and shared helpers here.
// Keep blocks small and focused for easy refactors.

///|
pub using @core {
  type PdfCryptType,
  type PdfError,
  type PdfBytes,
  type PdfName,
  type ByteCursor,
  type ByteOutput,
  type BitStream,
  type BitStreamPosition,
  type BitWriter,
  pdf_no_more,
  byte_cursor_of_bytes,
  byte_cursor_of_view,
  bitstream_of_cursor,
  bitstream_of_bytes,
  bitstream_of_view,
  pdf_error,
  pdf_soft_error,
  pdf_hard_error,
  pdf_error_summary,
  pdf_byte_of_int,
  pdf_bytes_of_array_view,
  pdf_bytes_of_view,
  pdf_bytes_copy,
  pdf_bytes_make,
  pdf_bytes_concat_views,
  pdf_bytes_of_int_array,
  pdf_bytes_of_int_arrays,
  pdf_bytes_map_int,
  pdf_int_array_of_bytes,
  pdf_string_of_int_arrays,
  pdf_string_of_int_array,
  pdf_bytes_length,
  pdf_bytes_get,
  pdf_bytes_to_array,
  pdf_bytes_to_fixed_array,
  pdf_name_of_bytes,
  pdf_name_of_view,
  pdf_is_whitespace_byte,
  pdf_is_newline_byte,
  pdf_is_not_whitespace_byte,
  pdf_is_delimiter_byte,
  pdf_is_whitespace_or_delimiter_byte,
  byte_output_new,
  bit_writer_new,
}

///|
pub using @syntax {
  type ToGet,
  type PdfStreamData,
  type PdfStreamDataCrypt,
  type PdfStream,
  type PdfObject,
  type PdfParsedIndirectObject,
  type PdfLexeme,
  pdf_array,
  pdf_dictionary,
  pdf_recurse_array,
  pdf_recurse_dict,
  pdf_stream,
  stream_to_get,
  pdf_parse_lexemes,
  pdf_parse_single_lexeme_object,
  pdf_parse_object_from_view,
  pdf_parse_object_from_bytes,
  pdf_parse_indirect_object_lexemes,
  pdf_parse_indirect_object_from_bytes,
  pdf_parse_indirect_object_from_view,
  pdf_parse_indirect_objects,
  pdf_cursor_drop_whitespace,
  pdf_cursor_read_until_whitespace_or_delimiter,
  pdf_cursor_read_regular_token_view,
  pdf_cursor_lex_bool,
  pdf_cursor_lex_number,
  pdf_cursor_lex_name,
  pdf_cursor_lex_comment,
  pdf_cursor_lex_hex_string,
  pdf_cursor_lex_keyword,
  pdf_cursor_lex_literal_string,
  pdf_cursor_lex_delimiter,
  pdf_cursor_lex_token,
  pdf_cursor_lex_tokens,
  pdf_lex_single_view,
  pdf_lex_view,
  pdf_lex_bytes,
  pdf_lexeme_debug_name,
  pdf_string_of_lexeme,
  pdf_string_of_lexemes,
}

///|
pub using @geometry {
  type PdfUnit,
  type PaperSize,
  type Point2,
  type TransformOp,
  type TransformMatrix,
  type TransformDecomposition,
  unit_points,
  unit_inches,
  unit_centimetres,
  unit_millimetres,
  paper_size_make,
  paper_a0,
  paper_a1,
  paper_a2,
  paper_a3,
  paper_a4,
  paper_a5,
  paper_a6,
  paper_a7,
  paper_a8,
  paper_a9,
  paper_a10,
  paper_usletter,
  paper_uslegal,
  transform_string_of_op,
  transform_string_of_ops,
  transform_string_of_transform,
  transform_string_of_matrix,
  point2,
  transform_identity_matrix,
  transform_identity,
  transform_translate,
  transform_matrix_compose,
  transform_scale,
  transform_rotate,
  transform_shear_x,
  transform_shear_y,
  transform_compose_op,
  transform_append,
  transform_apply_matrix,
  transform_matrix_of_op,
  transform_matrix_of_ops,
  transform_matrix_of_transform,
  transform_apply_ops,
  transform_apply,
  transform_matrix_invert,
  transform_decompose,
  transform_recompose,
  transform_recompose_components,
}

///|
pub using @crypt_core {
  type PdfPermission,
  type PdfEncryptionMethod,
  type PdfAesV3RandomField,
  pdf_p_of_permissions,
  pdf_permissions_of_p,
}

///|
pub using @date {
  type PdfDate,
  pdf_string_of_date,
  pdf_date_of_view,
  pdf_date_of_bytes,
  pdf_date_of_string,
  pdf_bytes_of_date,
}

///|
pub using @flate {
  pdf_flate_encode_view_with_level,
  pdf_flate_encode_view,
  pdf_flate_encode_with_level,
  pdf_flate_encode,
  pdf_flate_decode_view,
  pdf_flate_decode,
}