/*----------------------------------------------------------------------- $Id: utf8.h 1025 2008-04-08 22:59:38Z hubert@u.washington.edu $ -----------------------------------------------------------------------*/ /* * ======================================================================== * Copyright 2013-2021 Eduardo Chappa * Copyright 2006-2008 University of Washington * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * ======================================================================== */ #ifndef PITH_CHARCONV_UTF8_INCLUDED #define PITH_CHARCONV_UTF8_INCLUDED #include #include "../filttype.h" /* flags for convert_to_utf8 */ #define CU8_NONE 0x00 #define CU8_NOINFER 0x01 /* Not ok to infer charset */ /* * The data in vl and dl is UCS-4 characters. * They are arrays of size vlen and dlen of unsigned longs. */ struct display_line { int row, col; /* where display starts */ UCS *vl; /* virtual line, the actual data string */ int vlen; /* size of vl array */ int vused; /* elements of vl in use */ int vbase; /* index into array, first virtual char on display */ UCS *dl; /* visible part of virtual line on display */ UCS *olddl; int dlen; /* size of dl array */ int dwid; /* screenwidth avail for dl */ void (*movecursor)(int, int); void (*writechar)(UCS); }; /* * Exported Prototypes */ void init_utf8_display(int, void *); int wcellwidth(UCS); int wtomb(char *, UCS); UCS mbtow(void *, unsigned char **, unsigned long *); void set_locale_charmap(char *); char *convert_to_utf8(char *, char *, int); char *convert_to_locale(char *); int utf8_to_locale(int c, CBUF_S *cb, unsigned char obuf[], size_t obuf_size); unsigned ucs4_str_width(UCS *); unsigned ucs4_str_width_a_to_b(UCS *, int, int); unsigned ucs4_str_width_ptr_to_ptr(UCS *, UCS *); UCS *ucs4_particular_width(UCS*, int); UCS *utf8_to_ucs4_cpystr(char *); char *ucs4_to_utf8_cpystr(UCS *); char *ucs4_to_utf8_cpystr_n(UCS *, int); #ifdef _WINDOWS LPTSTR utf8_to_lptstr(LPSTR); LPSTR lptstr_to_utf8(LPTSTR); LPTSTR ucs4_to_lptstr(UCS *); UCS *lptstr_to_ucs4(LPTSTR); #endif /* _WINDOWS */ int utf8_to_ucs4_oneatatime(int, CBUF_S *, UCS *, int *); size_t ucs4_strlen(UCS *s); int ucs4_strcmp(UCS *s1, UCS *s2); UCS *ucs4_cpystr(UCS *s); UCS *ucs4_strncpy(UCS *ucs4dst, UCS *ucs4src, size_t n); UCS *ucs4_strncat(UCS *ucs4dst, UCS *ucs4src, size_t n); UCS *ucs4_strchr(UCS *s, UCS c); UCS *ucs4_strrchr(UCS *s, UCS c); unsigned utf8_width(char *); size_t utf8_to_width_rhs(char *, char *, size_t, unsigned); int utf8_snprintf(char *, size_t, char *, ...); size_t utf8_to_width(char *, char *, size_t, unsigned, unsigned *); size_t utf8_pad_to_width(char *, char *, size_t, unsigned, int); unsigned utf8_truncate(char *, unsigned); char *utf8_count_back_width(char *, char *, unsigned, unsigned *); char *utf8_count_forw_width(char *, unsigned, unsigned *); void sstrncpy(char **, char *, int); int setup_for_input_output(int, char **, char **, void **, char **); int input_charset_is_supported(char *); int output_charset_is_supported(char *); int posting_charset_is_supported(char *); char *utf8_to_charset(char *, char *, int); char *comatose(long); char *tose(long); void line_paint(int, struct display_line *, int *); int pith_ucs4width(UCS); #if !defined(_WINDOWS) && HAVE_LANGINFO_H && defined(CODESET) char *nl_langinfo_codeset_wrapper(void); #endif #endif /* PITH_CHARCONV_UTF8_INCLUDED */