home *** CD-ROM | disk | FTP | other *** search
/ mail.altrad.com / 2015.02.mail.altrad.com.tar / mail.altrad.com / TEST / vlc-2-0-5-win32.exe / sdk / include / vlc / plugins / vlc_charset.h < prev    next >
C/C++ Source or Header  |  2012-12-12  |  4KB  |  121 lines

  1. /*****************************************************************************
  2.  * charset.h: Unicode UTF-8 wrappers function
  3.  *****************************************************************************
  4.  * Copyright (C) 2003-2005 VLC authors and VideoLAN
  5.  * Copyright ┬⌐ 2005-2010 R├⌐mi Denis-Courmont
  6.  * $Id: cd4d40725344eda07f51dd16f11aeadc351141e8 $
  7.  *
  8.  * Author: R├⌐mi Denis-Courmont <rem # videolan,org>
  9.  *
  10.  * This program is free software; you can redistribute it and/or modify it
  11.  * under the terms of the GNU Lesser General Public License as published by
  12.  * the Free Software Foundation; either version 2.1 of the License, or
  13.  * (at your option) any later version.
  14.  *
  15.  * This program is distributed in the hope that it will be useful,
  16.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18.  * GNU Lesser General Public License for more details.
  19.  *
  20.  * You should have received a copy of the GNU Lesser General Public License
  21.  * along with this program; if not, write to the Free Software Foundation,
  22.  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
  23.  *****************************************************************************/
  24.  
  25. #ifndef VLC_CHARSET_H
  26. #define VLC_CHARSET_H 1
  27.  
  28. /**
  29.  * \file
  30.  * This files handles locale conversions in vlc
  31.  */
  32.  
  33. /* iconv wrappers (defined in src/extras/libc.c) */
  34. typedef void *vlc_iconv_t;
  35. VLC_API vlc_iconv_t vlc_iconv_open( const char *, const char * ) VLC_USED;
  36. VLC_API size_t vlc_iconv( vlc_iconv_t, const char **, size_t *, char **, size_t * ) VLC_USED;
  37. VLC_API int vlc_iconv_close( vlc_iconv_t );
  38.  
  39. #include <stdarg.h>
  40.  
  41. VLC_API void LocaleFree( const char * );
  42. VLC_API char * FromLocale( const char * ) VLC_USED;
  43. VLC_API char * FromLocaleDup( const char * ) VLC_USED;
  44. VLC_API char * ToLocale( const char * ) VLC_USED;
  45. VLC_API char * ToLocaleDup( const char * ) VLC_USED;
  46.  
  47. VLC_API int utf8_vfprintf( FILE *stream, const char *fmt, va_list ap );
  48. VLC_API int utf8_fprintf( FILE *, const char *, ... ) VLC_FORMAT( 2, 3 );
  49. VLC_API char * vlc_strcasestr(const char *, const char *) VLC_USED;
  50.  
  51. VLC_API char * EnsureUTF8( char * );
  52. VLC_API const char * IsUTF8( const char * ) VLC_USED;
  53.  
  54. #ifdef WIN32
  55. VLC_USED
  56. static inline char *FromWide (const wchar_t *wide)
  57. {
  58.     size_t len = WideCharToMultiByte (CP_UTF8, 0, wide, -1, NULL, 0, NULL, NULL);
  59.     if (len == 0)
  60.         return NULL;
  61.  
  62.     char *out = (char *)malloc (len);
  63.  
  64.     if (likely(out))
  65.         WideCharToMultiByte (CP_UTF8, 0, wide, -1, out, len, NULL, NULL);
  66.     return out;
  67. }
  68.  
  69. VLC_USED
  70. static inline wchar_t *ToWide (const char *utf8)
  71. {
  72.     int len = MultiByteToWideChar (CP_UTF8, 0, utf8, -1, NULL, 0);
  73.     if (len == 0)
  74.         return NULL;
  75.  
  76.     wchar_t *out = (wchar_t *)malloc (len * sizeof (wchar_t));
  77.  
  78.     if (likely(out))
  79.         MultiByteToWideChar (CP_UTF8, 0, utf8, -1, out, len);
  80.     return out;
  81. }
  82. #endif
  83.  
  84. /**
  85.  * Converts a nul-terminated string from ISO-8859-1 to UTF-8.
  86.  */
  87. static inline char *FromLatin1 (const char *latin)
  88. {
  89.     char *str = (char *)malloc (2 * strlen (latin) + 1), *utf8 = str;
  90.     unsigned char c;
  91.  
  92.     if (str == NULL)
  93.         return NULL;
  94.  
  95.     while ((c = *(latin++)) != '\0')
  96.     {
  97.          if (c >= 0x80)
  98.          {
  99.              *(utf8++) = 0xC0 | (c >> 6);
  100.              *(utf8++) = 0x80 | (c & 0x3F);
  101.          }
  102.          else
  103.              *(utf8++) = c;
  104.     }
  105.     *(utf8++) = '\0';
  106.  
  107.     utf8 = (char *)realloc (str, utf8 - str);
  108.     return utf8 ? utf8 : str;
  109. }
  110.  
  111. VLC_API char * FromCharset( const char *charset, const void *data, size_t data_size ) VLC_USED;
  112. VLC_API void * ToCharset( const char *charset, const char *in, size_t *outsize ) VLC_USED;
  113.  
  114. VLC_API double us_strtod( const char *, char ** ) VLC_USED;
  115. VLC_API float us_strtof( const char *, char ** ) VLC_USED;
  116. VLC_API double us_atof( const char * ) VLC_USED;
  117. VLC_API int us_vasprintf( char **, const char *, va_list );
  118. VLC_API int us_asprintf( char **, const char *, ... ) VLC_USED;
  119.  
  120. #endif
  121.