3280d3ed3076aa09c229ce17327a7a1bc7287d84
[scilab.git] / scilab / modules / localization / sci_gateway / c / sci_addlocalizationdomain.c
1 /*
2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2013 - Scilab Enterprises - Antoine ELIAS
4 *
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 /*--------------------------------------------------------------------------*/
16 #include <string.h>
17 #include <stdlib.h>
18 #include "sci_malloc.h"
19 #include "localization.h"
20 #include "gw_localization.h"
21 #include "api_scilab.h"
22 #include "Scierror.h"
23 #include "strsubst.h"
24 #include "freeArrayOfString.h"
25 #include "expandPathVariable.h"
26
27 int sci_addlocalizationdomain(char *fname, void* pvApiCtx)
28 {
29     SciErr sciErr;
30     int* piAddr1 = NULL;
31     char* pstDomain = NULL;
32
33     int* piAddr2 = NULL;
34     char* pstPath = NULL;
35     char* expandedPath = NULL;
36
37     char* pstRet = NULL;
38
39     int iRhs = nbInputArgument(pvApiCtx);
40     int iLhs = nbOutputArgument(pvApiCtx);
41
42
43     CheckInputArgument(pvApiCtx, 2, 2);
44     CheckOutputArgument(pvApiCtx, 1, 1);
45
46     //get domain name
47     sciErr = getVarAddressFromPosition(pvApiCtx, 1, &piAddr1);
48     if (sciErr.iErr)
49     {
50         printError(&sciErr, 0);
51         Scierror(999, _("%s: Can not read input argument #%d.\n"), "addlocalizationdomain", 1);
52         return 0;
53     }
54
55     if (isStringType(pvApiCtx, piAddr1) == 0 || isScalar(pvApiCtx, piAddr1) == 0)
56     {
57         Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), "addlocalizationdomain", 1);
58         return 0;
59     }
60
61     if (getAllocatedSingleString(pvApiCtx, piAddr1, &pstDomain))
62     {
63         Scierror(999, _("%s: Memory allocation error.\n"), "addlocalizationdomain");
64         return 0;
65     }
66
67     //get domain path
68     sciErr = getVarAddressFromPosition(pvApiCtx, 2, &piAddr2);
69     if (sciErr.iErr)
70     {
71         printError(&sciErr, 0);
72         Scierror(999, _("%s: Can not read input argument #%d.\n"), "addlocalizationdomain", 2);
73         return 0;
74     }
75
76     if (isStringType(pvApiCtx, piAddr2) == 0 || isScalar(pvApiCtx, piAddr2) == 0)
77     {
78         Scierror(999, _("%s: Wrong size for input argument #%d: String expected.\n"), "addlocalizationdomain", 2);
79         return 0;
80     }
81
82     if (getAllocatedSingleString(pvApiCtx, piAddr2, &pstPath))
83     {
84         Scierror(999, _("%s: Memory allocation error.\n"), "addlocalizationdomain");
85         return 0;
86     }
87
88     expandedPath = expandPathVariable(pstPath);
89     pstRet = bindtextdomain(pstDomain, expandedPath);
90
91     freeAllocatedSingleString(pstPath);
92     FREE(expandedPath);
93
94     if (pstRet == NULL)
95     {
96         Scierror(999, _("%s: Unable to add new domain %s.\n"), "addlocalizationdomain", pstDomain);
97         freeAllocatedSingleString(pstDomain);
98         return 0;
99     }
100
101     bind_textdomain_codeset (pstDomain, "UTF-8"); /*such that gettext and dgettext return UTF8 string*/
102
103     if (createScalarBoolean(pvApiCtx, iRhs + 1, 1))
104     {
105         Scierror(999, _("%s: Unable to add new domain %s.\n"), "addlocalizationdomain", pstDomain);
106         freeAllocatedSingleString(pstDomain);
107         return 0;
108     }
109
110     freeAllocatedSingleString(pstDomain);
111     AssignOutputVariable(pvApiCtx, 1) = iRhs + 1;
112     ReturnArguments(pvApiCtx);
113     return 0;
114 }