/*
 * This file is part of Beastie <https://purl.org/nxg/dist/beastie>
 * SPDX-FileCopyrightText: 2025 Norman Gray <https://nxg.me.uk>
 * SPDX-License-Identifier: BSD-2-Clause
 */

#ifndef UNICODE_SCM_H
#define UNICODE_SCM_H 1

#include "unicode.h"

s7_pointer unicode_load_hook(s7_scheme* sc, s7_pointer args);

// the ..._proc functions here are to be defined as scheme functions;
// the other functions are to support C code.

int is_unicode_reader_p(s7_pointer obj);
s7_pointer is_unicode_reader_proc(s7_scheme* sc, s7_pointer args);
s7_pointer make_unicode_reader_file_proc(s7_scheme* sc, s7_pointer args);
s7_pointer make_unicode_reader_string_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_reader_read_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_decode_utf8_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_decode1_port_utf8_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_encode_utf8_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_encode1_utf8_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_reader_source_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_reader_location_proc(s7_scheme* sc, s7_pointer args);

s7_pointer unicode_reader_location(s7_scheme* sc, unicode_reader* reader); // for other C code
int unicode_reader_same_source_p(s7_scheme* sc, unicode_reader* r1, unicode_reader* r2);

s7_pointer make_ustring_obj(s7_scheme* sc, ustring_t us);
s7_pointer make_ustring_proc(s7_scheme* sc, s7_pointer args);
s7_pointer is_ustring_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_length_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_append_inplace_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_append_new_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_car_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_ref_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_substring_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_index_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_map_internal_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_cache_object_get_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_cache_object_set_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_to_string_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_to_symbol_proc(s7_scheme* sc, s7_pointer args);
s7_pointer symbol_to_ustring_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_is_equal_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_lt_proc(s7_scheme* sc, s7_pointer args);
s7_pointer ustring_hash_proc(s7_scheme* sc, s7_pointer args);

s7_pointer unicode_set_locale_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_get_locale_proc(s7_scheme* sc, s7_pointer args);
s7_pointer unicode_get_locale_list_proc(s7_scheme* sc, s7_pointer args);

s7_pointer make_ustring_iterator_proc(s7_scheme* sc, s7_pointer args);

#endif // UNICODE_SCM_H
