Merge remote-tracking branch 'origin/master' into windows
[scilab.git] / scilab / modules / localization / includes / charEncoding.h
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) INRIA - Allan CORNET
4 * Copyright (C) 2009 - DIGITEO - Antoine ELIAS , Allan CORNET
5  * Copyright (C) 2012 - 2016 - Scilab Enterprises
6  *
7  * This file is hereby licensed under the terms of the GNU GPL v2.0,
8  * pursuant to article 5.3.4 of the CeCILL v.2.1.
9  * This file was originally licensed under the terms of the CeCILL v2.1,
10  * and continues to be available under such terms.
11  * For more information, see the COPYING file which you should have received
12  * along with this program.
13 *
14 */
15 #ifndef __CHARENCODING_H__
16 #define __CHARENCODING_H__
17
18 #include <wchar.h>
19 #include <sys/stat.h>
20 #include <sys/types.h>
21 #include "BOOL.h"
22
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26
27 /**
28 * wcfopen macro for fopen Multibyte char multiplatform
29 * @param[out] fp file descriptor
30 * @param[in] x filename
31 * @param[in] y mode
32 */
33
34 #ifdef _MSC_VER
35 #define wcfopen(fp, x,y) \
36 {\
37         wchar_t* wfilename = NULL;\
38         wchar_t* wmode = NULL;\
39         wfilename = to_wide_string(x);\
40         wmode = to_wide_string(y);\
41         if(wfilename == NULL || wmode == NULL){fp = 0;}\
42         else {fp = _wfopen(wfilename, wmode);}\
43         if(wfilename != NULL){FREE(wfilename);}\
44         if(wmode != NULL){FREE(wmode);} \
45 }
46 #else
47 #define wcfopen(fp, x,y) \
48 {\
49         fp = fopen(x, y);\
50 }
51 #endif
52
53 /**
54 * convert a UTF string to wide char string
55 * @param[in] UTF string
56 * @return wide char string converted
57 */
58 wchar_t* to_wide_string(const char *_UTFStr);
59
60 /**
61 * convert a wide char string to UTF-8
62 * @param[in] wide char string
63 * @return UTF string converted
64 */
65 char *wide_string_to_UTF8(const wchar_t *_wide);
66
67 int get_codepoint_count(const char* _UTFStr);
68
69 /*file management with UTF filename*/
70 #ifdef _MSC_VER
71 int wcstat(char* filename, struct _stat *st);
72 #endif
73
74 /**
75 * checks input text is a valid UTF-8 format
76 * @param[in] string to check
77 * @return TRUE or FALSE
78 */
79 BOOL IsValidUTF8(const char* pStText);
80
81
82 #ifdef __cplusplus
83 }
84 #endif
85 #endif /* __CHARENCODING_H__ */
86