Implemented an encoding state.
[gedcom-parse.git] / gedcom / encoding.h
index d4bd632d9aaeef6800f51da8321429bf63f61b84..93f69863562cedba392b94916e5673b0af810e37 100644 (file)
 #ifndef __ENCODING_H
 #define __ENCODING_H
 
-typedef enum _ENC {
-  ONE_BYTE = 0,
-  TWO_BYTE_HILO = 1,
-  TWO_BYTE_LOHI = 2
-} ENCODING;
+#include "gedcom.h"
+#include "utf8tools.h"
+
+#define MAX_CHARSET_LEN 32
+#define MAX_TERMINATOR_LEN 2
+
+struct encoding_state {
+  char         charset[MAX_CHARSET_LEN + 1];
+  const char*  encoding;
+  Encoding     width;
+  Enc_bom      bom;
+  char         terminator[MAX_TERMINATOR_LEN + 1];
+};
+
+struct encoding_state read_encoding;
 
-int open_conv_to_internal(const char* fromcode);
-void close_conv_to_internal();
-char* to_internal(const char* str, size_t len,
-                 char* output_buffer, size_t out_len);
 void init_encodings();
-void set_encoding_width(ENCODING enc);
+char* get_encoding(const char* gedcom_n, Encoding enc);
 void update_gconv_search_path();
 
+int open_conv_to_internal(const char* fromcode);
+void close_conv_to_internal();
+char* to_internal(const char* str, size_t len, struct conv_buffer *output_buf);
+void set_encoding_width(Encoding enc);
+void set_encoding_bom(Enc_bom bom);
+void set_encoding_terminator(char* term);
+
 #endif /* __ENCODING_H */