#include <iconv.h>#include <string.h>#include "loadhashtableslocalization.h"#include "localization.h"#include "getmodules.h"#include "setgetSCIpath.h"#include "libxml/xmlreader.h"#include "../../fileio/includes/FileExist.h"Include dependency graph for loadhashtableslocalization.c:

Go to the source code of this file.
Defines | |
| #define | FILEERRORS "errors" |
| #define | FILEMSGS "messages" |
| #define | FILEMENUS "menus" |
| #define | FILEFORMATPATH "%s/modules/%s/languages/%s/%s.xml" |
Functions | |
| BOOL | LoadHashTableLocalization (struct hashtable *table, char *filenamexml) |
| static char * | GetXmlFileEncoding (const char *filename) |
| static unsigned char * | ConvertEncoding (char *encodingFrom, char *encodingTo, char *inputStr) |
| BOOL | LoadHashTablesLocalization (char *language) |
| #define FILEERRORS "errors" |
Definition at line 14 of file loadhashtableslocalization.c.
Referenced by LoadHashTablesLocalization().
Definition at line 17 of file loadhashtableslocalization.c.
Referenced by LoadHashTablesLocalization().
| #define FILEMENUS "menus" |
Definition at line 16 of file loadhashtableslocalization.c.
Referenced by LoadHashTablesLocalization().
| #define FILEMSGS "messages" |
Definition at line 15 of file loadhashtableslocalization.c.
Referenced by LoadHashTablesLocalization().
| static unsigned char * ConvertEncoding | ( | char * | encodingFrom, | |
| char * | encodingTo, | |||
| char * | inputStr | |||
| ) | [static] |
Definition at line 232 of file loadhashtableslocalization.c.
References MALLOC, NULL, and result.
Referenced by LoadHashTableLocalization().
00233 { 00234 unsigned char *strBufOut=NULL; 00235 unsigned char *outputStr=NULL; 00236 size_t inputLen, outputLen, result; 00237 iconv_t c_pt; 00238 00239 strBufOut=(unsigned char *)MALLOC(sizeof(unsigned char)*2048); 00240 00241 if ((c_pt = iconv_open(encodingTo, encodingFrom)) == (iconv_t)(-1)) 00242 { 00243 printf("iconv_open failed!\n"); 00244 return NULL; 00245 } 00246 00247 iconv(c_pt, NULL, NULL, NULL, NULL); 00248 00249 inputLen = strlen(inputStr) + 1; 00250 outputLen = 2048; 00251 outputStr = strBufOut; 00252 result = iconv(c_pt, &inputStr, &inputLen, (char**)(&outputStr), &outputLen); 00253 00254 if (result == -1) 00255 { 00256 return NULL; 00257 } 00258 00259 iconv_close(c_pt); 00260 return strBufOut; 00261 }
Here is the caller graph for this function:

| static char * GetXmlFileEncoding | ( | const char * | filename | ) | [static] |
Definition at line 187 of file loadhashtableslocalization.c.
References MALLOC, NULL, and strchr().
Referenced by LoadHashTableLocalization().
00188 { 00189 FILE *stream; 00190 char *encoding; 00191 encoding=(char *)MALLOC(sizeof(char)*32); 00192 00193 if( (stream = fopen(filename, "r" )) != NULL ) // C4996 00194 { 00195 char FirstLine[256]; 00196 if( fgets( FirstLine, 256, stream ) == NULL) 00197 { 00198 printf( "fgets error\n" ); 00199 return NULL; 00200 } 00201 else 00202 { 00203 char *pEncodingStart; 00204 char *pQuotationStart; 00205 char *pQuotationEnd; 00206 char *pTemp; 00207 size_t length; 00208 00209 pEncodingStart=strstr(FirstLine, "encoding"); 00210 pQuotationStart=strchr(pEncodingStart,'"'); 00211 pTemp=pQuotationStart+1; 00212 pQuotationEnd=strchr(pTemp,'"'); 00213 length=pQuotationEnd-pTemp; 00214 strncpy(encoding, pTemp, length); 00215 strcpy(encoding+length,"\0"); 00216 } 00217 fclose( stream ); 00218 } 00219 else 00220 { 00221 printf( "ERROR:xmlfile %s was not opened or xmlfile %s doesn't exist\n", filename, filename);//what to add to exit the whole program??? 00222 } 00223 00224 if(encoding==NULL) 00225 { 00226 strcpy(encoding,"utf-8"); 00227 } 00228 return encoding; 00229 00230 }
Here is the call graph for this function:

Here is the caller graph for this function:

| BOOL LoadHashTableLocalization | ( | struct hashtable * | table, | |
| char * | filenamexml | |||
| ) |
Definition at line 71 of file loadhashtableslocalization.c.
References AppendHashTableLocalization(), ConvertEncoding(), FALSE, FREE, GetXmlFileEncoding(), NULL, table, TRUE, and type.
Referenced by LoadHashTablesLocalization().
00072 { 00073 BOOL bOK=FALSE; 00074 BOOL bUTF_8_Mode=FALSE; 00075 00076 char *TAGVALUE=NULL; 00077 char *STRINGVALUE=NULL; 00078 00079 xmlTextReaderPtr reader; 00080 int ret=0; 00081 char *encoding=GetXmlFileEncoding(filenamexml); 00082 00083 if((strcmp("utf-8", encoding)==0)||(strcmp("UTF-8", encoding)==0)) bUTF_8_Mode=TRUE; 00084 else bUTF_8_Mode=FALSE; 00085 00086 reader = xmlReaderForFile(filenamexml, encoding, 0); 00087 00088 ret = xmlTextReaderRead (reader); 00089 00090 while (ret == 1) 00091 { 00092 const xmlChar *balise=NULL; 00093 xmlReaderTypes type; 00094 00095 type = xmlTextReaderNodeType (reader); 00096 if (type == XML_READER_TYPE_ELEMENT ) 00097 { 00098 balise = xmlTextReaderConstName (reader); 00099 00100 if (xmlStrEqual (balise, (const xmlChar *)"tag")) 00101 { 00102 ret = xmlTextReaderRead (reader); 00103 type = xmlTextReaderNodeType (reader); 00104 if (type == XML_READER_TYPE_TEXT ) 00105 { 00106 const xmlChar *node_value; 00107 if (bUTF_8_Mode) 00108 { 00109 node_value=(const xmlChar *)xmlTextReaderConstValue(reader); 00110 } 00111 else 00112 { 00113 node_value=ConvertEncoding("UTF-8",encoding,(char *)xmlTextReaderConstValue(reader)); 00114 } 00115 00116 TAGVALUE=(char*)node_value; 00117 } 00118 } 00119 00120 if (xmlStrEqual (balise, (const xmlChar *)"string")) 00121 { 00122 ret = xmlTextReaderRead (reader); 00123 type = xmlTextReaderNodeType (reader); 00124 if (type == XML_READER_TYPE_TEXT ) 00125 { 00126 const xmlChar *node_value; 00127 if (bUTF_8_Mode) 00128 { 00129 node_value=(const xmlChar *)xmlTextReaderConstValue(reader); 00130 } 00131 else 00132 { 00133 node_value=ConvertEncoding("UTF-8",encoding,(char *)xmlTextReaderConstValue(reader)); 00134 } 00135 00136 STRINGVALUE=(char*)node_value; 00137 } 00138 } 00139 } 00140 00141 if ( (TAGVALUE) && (STRINGVALUE)) 00142 { 00143 /* remove case TAGVALUE='' STRINGVALUE='' */ 00144 if ( (strlen(TAGVALUE)>0) & (strlen(STRINGVALUE)>0) ) 00145 { 00146 AppendHashTableLocalization(table,TAGVALUE,STRINGVALUE); 00147 } 00148 if (bUTF_8_Mode) 00149 { 00150 TAGVALUE=NULL; 00151 STRINGVALUE=NULL; 00152 } 00153 else 00154 { 00155 FREE(TAGVALUE); 00156 FREE(STRINGVALUE); 00157 TAGVALUE=NULL; 00158 STRINGVALUE=NULL; 00159 } 00160 } 00161 00162 ret = xmlTextReaderRead (reader); 00163 } 00164 00165 if (bUTF_8_Mode) 00166 { 00167 TAGVALUE=NULL; 00168 STRINGVALUE=NULL; 00169 } 00170 else 00171 { 00172 FREE(TAGVALUE); 00173 FREE(STRINGVALUE); 00174 TAGVALUE=NULL; 00175 STRINGVALUE=NULL; 00176 } 00177 00178 xmlFreeTextReader(reader); 00179 /* 00180 * Cleanup function for the XML library. 00181 */ 00182 xmlCleanupParser(); 00183 00184 return bOK; 00185 }
Here is the call graph for this function:

Here is the caller graph for this function:

| BOOL LoadHashTablesLocalization | ( | char * | language | ) |
load hash tables for localization
Definition at line 23 of file loadhashtableslocalization.c.
References FALSE, FILEERRORS, FileExist(), FILEFORMATPATH, FILEMENUS, FILEMSGS, FREE, GetHashTableScilabErrors(), GetHashTableScilabMenus(), GetHashTableScilabMessages(), getmodules(), getSCIpath(), i, LoadHashTableLocalization(), MALLOC, MODULESLIST::ModuleList, NULL, MODULESLIST::numberofModules, and TRUE.
Referenced by InitializeLocalization(), and setlanguage().
00024 { 00025 BOOL bOK=FALSE; 00026 char *SciPath=NULL; 00027 int i=0; 00028 00029 struct hashtable *Table_Errors=NULL; 00030 struct hashtable *Table_Messages=NULL; 00031 struct hashtable *Table_Menus=NULL; 00032 00033 struct MODULESLIST *moduleslist=NULL; 00034 moduleslist=getmodules(); 00035 00036 Table_Errors=GetHashTableScilabErrors(); 00037 Table_Messages=GetHashTableScilabMessages(); 00038 Table_Menus=GetHashTableScilabMenus(); 00039 00040 SciPath=getSCIpath(); 00041 00042 for(i=0;i<moduleslist->numberofModules;i++) 00043 { 00044 char *full_filename_errors=NULL; 00045 char *full_filename_messages=NULL; 00046 char *full_filename_menus=NULL; 00047 00048 full_filename_errors=(char*)MALLOC(sizeof(char)*(strlen(SciPath)+strlen(FILEFORMATPATH)+strlen(moduleslist->ModuleList[i])+strlen(FILEERRORS)+strlen(language)+1)); 00049 full_filename_messages=(char*)MALLOC(sizeof(char)*(strlen(SciPath)+strlen(FILEFORMATPATH)+strlen(moduleslist->ModuleList[i])+strlen(FILEMSGS)+strlen(language)+1)); 00050 full_filename_menus=(char*)MALLOC(sizeof(char)*(strlen(SciPath)+strlen(FILEFORMATPATH)+strlen(moduleslist->ModuleList[i])+strlen(FILEMENUS)+strlen(language)+1)); 00051 00052 sprintf(full_filename_errors,FILEFORMATPATH,SciPath,moduleslist->ModuleList[i],language,FILEERRORS); 00053 sprintf(full_filename_messages,FILEFORMATPATH,SciPath,moduleslist->ModuleList[i],language,FILEMSGS); 00054 sprintf(full_filename_menus,FILEFORMATPATH,SciPath,moduleslist->ModuleList[i],language,FILEMENUS); 00055 00056 if (FileExist(full_filename_errors)) LoadHashTableLocalization(Table_Errors,full_filename_errors); 00057 if (FileExist(full_filename_messages)) LoadHashTableLocalization(Table_Messages,full_filename_messages); 00058 if (FileExist(full_filename_menus)) LoadHashTableLocalization(Table_Menus,full_filename_menus); 00059 00060 if (full_filename_errors) {FREE(full_filename_errors);full_filename_errors=NULL;} 00061 if (full_filename_messages) {FREE(full_filename_messages);full_filename_messages=NULL;} 00062 if (full_filename_menus) {FREE(full_filename_menus);full_filename_menus=NULL;} 00063 bOK=TRUE; 00064 } 00065 00066 if (SciPath) {FREE(SciPath); SciPath=NULL;} 00067 00068 return bOK; 00069 }
Here is the call graph for this function:

Here is the caller graph for this function:

1.5.1