Unicode port: Generate Unicode LangStrings even if source was an ANSI file

git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@6093 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
wizou 2010-05-28 13:10:16 +00:00
parent e097a25855
commit 90e05acdd3
8 changed files with 70 additions and 24 deletions

View file

@ -478,7 +478,7 @@ int CEXEBuild::DefineInnerLangString(int id, int process/*=-1*/) {
// @return If the language id, the variable name or string is invalid, it will
// return a PS_ERROR. If this function call is overwriting a set user string,
// this will return a PS_WARNING.
int CEXEBuild::SetLangString(TCHAR *name, LANGID lang, TCHAR *str) {
int CEXEBuild::SetLangString(TCHAR *name, LANGID lang, TCHAR *str, BOOL unicode) {
if (!str || !name) return PS_ERROR;
LanguageTable *table = GetLangTable(lang);
@ -490,7 +490,7 @@ int CEXEBuild::SetLangString(TCHAR *name, LANGID lang, TCHAR *str) {
if (pos < 0)
pos = build_langstrings.add(name, &sn);
if (table->lang_strings->set(sn, str))
if (table->lang_strings->set(sn, unicode ? str : CtoTString2(TtoCString(str),table->nlf.m_uCodePage)))
return PS_WARNING;
return PS_OK;
@ -912,7 +912,8 @@ TCHAR SkipComments(FILE *f) {
// NSIS Language File parser
LanguageTable * CEXEBuild::LoadLangFile(TCHAR *filename) {
FILE *f = FOPENTEXT(filename, "r");
BOOL unicode;
FILE *f = FOPENTEXT2(filename, "r", &unicode);
if (!f) {
ERROR_MSG(_T("Error: Can't open language file - \"%s\"!\n"),filename);
return 0;
@ -1014,6 +1015,15 @@ LanguageTable * CEXEBuild::LoadLangFile(TCHAR *filename) {
nlf->m_uCodePage = CP_ACP;
}
#ifdef _UNICODE
if (!unicode) // convert font name from ANSI to Unicode now that we know the language codepage
{
TCHAR* str = nlf->m_szFont;
nlf->m_szFont = _tcsdup(CtoTString2(TtoCString(str),table->nlf.m_uCodePage));
free(str);
}
#endif
// Get RTL setting
nlf->m_szStrings[NLF_RTL] = (TCHAR *)malloc(2*sizeof(TCHAR));
nlf->m_bRTL = false;
@ -1121,6 +1131,14 @@ LanguageTable * CEXEBuild::LoadLangFile(TCHAR *filename) {
else *out = *in;
}
*out = 0;
#ifdef _UNICODE
if (!unicode)
{
TCHAR* str = nlf->m_szStrings[i];
nlf->m_szStrings[i] = _tcsdup(CtoTString2(TtoCString(str),table->nlf.m_uCodePage));
free(str);
}
#endif
}
fclose(f);