Factored character encoders out to separate files (iconv system).
[yaz-moved-to-github.git] / src / iconv-p.h
index 04a51b0..f9cc91e 100644 (file)
@@ -2,7 +2,6 @@
  * Copyright (C) 2005-2008, Index Data ApS
  * See the file LICENSE for details.
  *
- * $Id: zoom-p.h,v 1.25 2007-09-11 08:40:28 adam Exp $
  */
 /**
  * \file
@@ -21,30 +20,54 @@ void yaz_iconv_set_errno(yaz_iconv_t cd, int no);
 unsigned long yaz_read_iso5428_1984(yaz_iconv_t cd, unsigned char *inp,
                                     size_t inbytesleft, size_t *no_read);
 
-size_t yaz_write_iso5428_1984(yaz_iconv_t cd, unsigned long x,
-                              char **outbuf, size_t *outbytesleft);
-
 size_t yaz_init_UTF8(yaz_iconv_t cd, unsigned char *inp,
                      size_t inbytesleft, size_t *no_read);
 unsigned long yaz_read_UTF8(yaz_iconv_t cd, unsigned char *inp,
                             size_t inbytesleft, size_t *no_read);
 
 
-size_t yaz_write_UTF8(yaz_iconv_t cd, unsigned long x,
-                      char **outbuf, size_t *outbytesleft);
-
 unsigned long yaz_read_UCS4(yaz_iconv_t cd, unsigned char *inp,
                             size_t inbytesleft, size_t *no_read);
 unsigned long yaz_read_UCS4LE(yaz_iconv_t cd, unsigned char *inp,
                               size_t inbytesleft, size_t *no_read);
-size_t yaz_write_UCS4(yaz_iconv_t cd, unsigned long x,
-                      char **outbuf, size_t *outbytesleft);
-size_t yaz_write_UCS4LE(yaz_iconv_t cd, unsigned long x,
-                        char **outbuf, size_t *outbytesleft);
 unsigned long yaz_read_advancegreek(yaz_iconv_t cd, unsigned char *inp,
                                     size_t inbytesleft, size_t *no_read);
-size_t yaz_write_advancegreek(yaz_iconv_t cd, unsigned long x,
-                              char **outbuf, size_t *outbytesleft);
+
+typedef struct yaz_iconv_encoder_s *yaz_iconv_encoder_t;
+struct yaz_iconv_encoder_s {
+    void *data;
+    size_t (*write_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e,
+                           unsigned long x,
+                           char **outbuf, size_t *outbytesleft);
+    size_t (*flush_handle)(yaz_iconv_t cd, yaz_iconv_encoder_t e,
+                           char **outbuf, size_t *outbytesleft);
+    void (*init_handle)(yaz_iconv_encoder_t e);
+    void (*destroy_handle)(yaz_iconv_encoder_t e);
+};
+
+yaz_iconv_encoder_t yaz_marc8_encoder(const char *name,
+                                      yaz_iconv_encoder_t e);
+yaz_iconv_encoder_t yaz_utf8_encoder(const char *name,
+                                     yaz_iconv_encoder_t e);
+yaz_iconv_encoder_t yaz_ucs4_encoder(const char *name,
+                                     yaz_iconv_encoder_t e);
+yaz_iconv_encoder_t yaz_iso_8859_1_encoder(const char *name,
+                                           yaz_iconv_encoder_t e);
+yaz_iconv_encoder_t yaz_iso_5428_encoder(const char *name,
+                                         yaz_iconv_encoder_t e);
+yaz_iconv_encoder_t yaz_advancegreek_encoder(const char *name,
+                                             yaz_iconv_encoder_t e);
+yaz_iconv_encoder_t yaz_wchar_encoder(const char *name,
+                                      yaz_iconv_encoder_t e);
+typedef unsigned long yaz_conv_func_t(unsigned char *inp, size_t inbytesleft,
+                                      size_t *no_read, int *combining,
+                                      unsigned mask, int boffset);
+
+int yaz_iso_8859_1_lookup_y(unsigned long v,
+                            unsigned long *x1, unsigned long *x2);
+
+int yaz_iso_8859_1_lookup_x12(unsigned long x1, unsigned long x2,
+                              unsigned long *y);
 
 #endif
 /*