/*
 * $LynxId: UCAux.h,v 1.22 2014/12/10 09:48:41 tom Exp $
 */
#ifndef UCAUX_H
#define UCAUX_H

#ifndef HTUTILS_H
#include <HTUtils.h>
#endif

#ifndef UCDEFS_H
#include <UCDefs.h>
#endif /* UCDEFS_H */

#ifndef HTSTREAM_H
#include <HTStream.h>
#endif /* HTSTREAM_H */

#ifndef UCMAP_H
#include <UCMap.h>
#endif /* UCMAP_H */

#ifdef __cplusplus
extern "C" {
#endif
    extern BOOL UCCanUniTranslateFrom(int from);
    extern BOOL UCCanTranslateUniTo(int to);
    extern BOOL UCCanTranslateFromTo(int from, int to);
    extern BOOL UCNeedNotTranslate(int from,
				   int to);

    struct _UCTransParams {
	BOOL transp;
	BOOL do_cjk;
	BOOL decode_utf8;
	BOOL output_utf8;
	BOOL use_raw_char_in;
	BOOL strip_raw_char_in;
	BOOL pass_160_173_raw;
	BOOL do_8bitraw;
	BOOL trans_to_uni;
	BOOL trans_C0_to_uni;
	BOOL repl_translated_C0;
	BOOL trans_from_uni;
	int ucs_mode;
    };
    typedef struct _UCTransParams UCTransParams;

    typedef struct {
	char utf_count;
	UCode_t utf_char;
	char utf_buf[8];
	char *utf_buf_p;
    } UTFDecodeState;

    typedef enum {
	dUTF8_ok,
	dUTF8_err,
	dUTF8_more
    } dUTF8;

    extern dUTF8 HTDecodeUTF8(UTFDecodeState * me, int *c_in_out, UCode_t *result);

    extern void UCSetTransParams(UCTransParams * pT, int cs_in,
				 const LYUCcharset *p_in,
				 int cs_out,
				 const LYUCcharset *p_out);

    extern void UCTransParams_clear(UCTransParams * pT);

    extern void UCSetBoxChars(int cset,
			      int *pvert_out,
			      int *phori_out,
			      int vert_in,
			      int hori_in);

    typedef void putc_func_t (HTStream *me,
			      int ch);

    extern BOOL UCPutUtf8_charstring(HTStream *target,
				     putc_func_t *actions,
				     UCode_t code);

    extern BOOL UCConvertUniToUtf8(UCode_t code,
				   char *buffer);

    extern UCode_t UCGetUniFromUtf8String(const char **ppuni);

#ifdef __cplusplus
}
#endif
#endif				/* UCAUX_H */
