Home | History | Annotate | Line # | Download | only in src
      1 /* Message list character set conversion.
      2    Copyright (C) 2001-2003, 2005-2006 Free Software Foundation, Inc.
      3    Written by Bruno Haible <haible (at) clisp.cons.org>, 2001.
      4 
      5    This program is free software; you can redistribute it and/or modify
      6    it under the terms of the GNU General Public License as published by
      7    the Free Software Foundation; either version 2, or (at your option)
      8    any later version.
      9 
     10    This program is distributed in the hope that it will be useful,
     11    but WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     13    GNU General Public License for more details.
     14 
     15    You should have received a copy of the GNU General Public License
     16    along with this program; if not, write to the Free Software Foundation,
     17    Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */
     18 
     19 #ifndef _MSGL_ICONV_H
     20 #define _MSGL_ICONV_H
     21 
     22 #include <stdbool.h>
     23 #if HAVE_ICONV
     24 #include <iconv.h>
     25 #endif
     26 
     27 #include "message.h"
     28 
     29 
     30 #ifdef __cplusplus
     31 extern "C" {
     32 #endif
     33 
     34 
     35 #if HAVE_ICONV
     36 
     37 /* A context, used for accurate error messages.  */
     38 struct conversion_context
     39 {
     40   const char *from_code;     /* canonicalized encoding name for input */
     41   const char *to_code;       /* canonicalized encoding name for output */
     42   const char *from_filename; /* file name where the input comes from */
     43   const message_ty *message; /* message being converted, or NULL */
     44 };
     45 
     46 /* Converts the STRING through the conversion descriptor CD.  */
     47 extern char *convert_string (iconv_t cd, const char *string,
     48 			     const struct conversion_context* context);
     49 
     50 #endif
     51 
     52 /* Converts the message list MLP to the (already canonicalized) encoding
     53    CANON_TO_CODE.  The (already canonicalized) encoding before conversion
     54    can be passed as CANON_FROM_CODE; if NULL is passed instead, the
     55    encoding is looked up in the header entry.  Returns true if and only if
     56    some msgctxt or msgid changed due to the conversion.  */
     57 extern bool
     58        iconv_message_list (message_list_ty *mlp,
     59 			   const char *canon_from_code,
     60 			   const char *canon_to_code,
     61 			   const char *from_filename);
     62 
     63 /* Converts all the message lists in MDLP to the encoding TO_CODE.  */
     64 extern msgdomain_list_ty *
     65        iconv_msgdomain_list (msgdomain_list_ty *mdlp,
     66 			     const char *to_code,
     67 			     const char *from_filename);
     68 
     69 /* Tests whether the message list MLP could be converted to CANON_TO_CODE.
     70    The (already canonicalized) encoding before conversion can be passed as
     71    CANON_FROM_CODE; if NULL is passed instead, the encoding is looked up
     72    in the header entry.  */
     73 extern bool
     74        is_message_list_iconvable (message_list_ty *mlp,
     75 				  const char *canon_from_code,
     76 				  const char *canon_to_code);
     77 
     78 
     79 #ifdef __cplusplus
     80 }
     81 #endif
     82 
     83 
     84 #endif /* _MSGL_ICONV_H */
     85