VLC_EXPORT( char *, FromLocale, ( const char * ) );
VLC_EXPORT( char *, ToLocale, ( const char * ) );
VLC_EXPORT( char *, EnsureUTF8, ( char * ) );
+VLC_EXPORT( char *, FromUTF32, ( wchar_t * ) );
VLC_EXPORT( char *, __vlc_fix_readdir_charset, ( vlc_object_t *, const char * ) );
#define vlc_fix_readdir_charset(a,b) __vlc_fix_readdir_charset(VLC_OBJECT(a),b)
char * httpd_MsgGet (httpd_message_t *, char *psz_name);
const iso639_lang_t * GetLang_1 (const char *);
void aout_FormatsPrint (aout_instance_t * p_aout, const char * psz_text, const audio_sample_format_t * p_format1, const audio_sample_format_t * p_format2);
+char * FromUTF32 (wchar_t *);
void __vout_OSDMessage (vlc_object_t *, int, char *, ...);
void intf_StopThread (intf_thread_t *);
stream_t * __stream_MemoryNew (vlc_object_t *p_obj, uint8_t *p_buffer, int64_t i_size, vlc_bool_t i_preserve_memory);
osd_state_t * (*__osd_StateChange_inner) (osd_state_t *, const int);
void (*osd_ConfigUnload_inner) (vlc_object_t *, osd_menu_t **);
void (*__osd_MenuShow_inner) (vlc_object_t *);
- void *__osd_VolumeDown_deprecated;
void (*__osd_MenuNext_inner) (vlc_object_t *);
void (*__osd_MenuDelete_inner) (vlc_object_t *, osd_menu_t *);
void (*__osd_MenuHide_inner) (vlc_object_t *);
void (*osd_Message_inner) (spu_t *, int, char *, ...);
int (*osd_ShowTextAbsolute_inner) (spu_t *, int, char *, text_style_t *, int, int, int, mtime_t, mtime_t);
char * (*config_GetUserDir_inner) (void);
+ char * (*FromUTF32_inner) (wchar_t *);
};
# if defined (__PLUGIN__)
# define aout_FiltersCreatePipeline (p_symbols)->aout_FiltersCreatePipeline_inner
# define osd_Message (p_symbols)->osd_Message_inner
# define osd_ShowTextAbsolute (p_symbols)->osd_ShowTextAbsolute_inner
# define config_GetUserDir (p_symbols)->config_GetUserDir_inner
+# define FromUTF32 (p_symbols)->FromUTF32_inner
# elif defined (HAVE_DYNAMIC_PLUGINS) && !defined (__BUILTIN__)
/******************************************************************
* STORE_SYMBOLS: store VLC APIs into p_symbols for plugin access.
((p_symbols)->osd_Message_inner) = osd_Message; \
((p_symbols)->osd_ShowTextAbsolute_inner) = osd_ShowTextAbsolute; \
((p_symbols)->config_GetUserDir_inner) = config_GetUserDir; \
+ ((p_symbols)->FromUTF32_inner) = FromUTF32; \
(p_symbols)->net_ConvertIPv4_deprecated = NULL; \
- (p_symbols)->__osd_VolumeDown_deprecated = NULL; \
# endif /* __PLUGIN__ */
# endif /* HAVE_SHARED_LIBVLC */
* charset.c: Determine a canonical name for the current locale's character
* encoding.
*****************************************************************************
- * Copyright (C) 2003-2004 the VideoLAN team
+ * Copyright (C) 2003-2005 the VideoLAN team
* $Id$
*
- * Author: Derk-Jan Hartman <thedj at users.sf.net>
+ * Authors: Derk-Jan Hartman <thedj at users.sf.net>
+ * Rémi Denis-Courmont <rem at videolan.org>
*
* vlc_current_charset() an adaption of mp_locale_charset():
*
return strdup( psz_string );
}
+
+/**********************************************************************
+ * UTF32toUTF8: converts UTF-32 to UTF-8
+ *********************************************************************/
+char *UTF32toUTF8( wchar_t *src, size_t len, size_t *newlen )
+{
+ char *res, *out;
+
+ /* allocate memory */
+ out = res = (char *)malloc( 6 * len );
+ if( res == NULL )
+ return NULL;
+
+ while( len >= sizeof( wchar_t ) )
+ {
+ uint32_t uv = *src++;
+ len--;
+
+ if( uv < 0x80 )
+ {
+ *out++ = uv;
+ continue;
+ }
+ else
+ if( uv < 0x800 )
+ {
+ *out++ = (( uv >> 6) | 0xc0);
+ *out++ = (( uv & 0x3f) | 0x80);
+ continue;
+ }
+ else
+ if( uv < 0x10000 )
+ {
+ *out++ = (( uv >> 12) | 0xe0);
+ *out++ = (((uv >> 6) & 0x3f) | 0x80);
+ *out++ = (( uv & 0x3f) | 0x80);
+ continue;
+ }
+ else
+ {
+ *out++ = (( uv >> 18) | 0xf0);
+ *out++ = (((uv >> 12) & 0x3f) | 0x80);
+ *out++ = (((uv >> 6) & 0x3f) | 0x80);
+ *out++ = (( uv & 0x3f) | 0x80);
+ continue;
+ }
+ }
+ len = out - res;
+ res = realloc( res, len );
+ if( newlen != NULL )
+ *newlen = len;
+ return res;
+}
+
+
+char *FromUTF32( wchar_t *src )
+{
+ size_t len;
+ wchar_t *in;
+
+ /* determine the size of the string */
+ for( len = 1, in = src; GetWBE( in ); len++ )
+ in++;
+
+ return UTF32toUTF8( src, len, NULL );
+}