implemented RFE #1564986 - block unsupported language
git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@5080 212acab6-be3b-0410-9dea-997c60f758d6
This commit is contained in:
parent
acaecfdade
commit
f1c873ba36
3 changed files with 39 additions and 11 deletions
|
@ -20,12 +20,14 @@ HWND g_hwndParent;
|
||||||
char temp[1024];
|
char temp[1024];
|
||||||
char g_wndtitle[1024], g_wndtext[1024];
|
char g_wndtitle[1024], g_wndtext[1024];
|
||||||
int dofont;
|
int dofont;
|
||||||
|
int docp;
|
||||||
|
|
||||||
int langs_num;
|
int langs_num;
|
||||||
|
|
||||||
struct lang {
|
struct lang {
|
||||||
char *name;
|
char *name;
|
||||||
char *id;
|
char *id;
|
||||||
|
UINT cp;
|
||||||
} *langs;
|
} *langs;
|
||||||
|
|
||||||
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
|
@ -37,7 +39,12 @@ BOOL CALLBACK DialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||||
case WM_INITDIALOG:
|
case WM_INITDIALOG:
|
||||||
// add languages
|
// add languages
|
||||||
for (i = langs_num - 1; i >= 0; i--) {
|
for (i = langs_num - 1; i >= 0; i--) {
|
||||||
int cbi = SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_ADDSTRING, 0, (LPARAM) langs[i].name);
|
int cbi;
|
||||||
|
|
||||||
|
if (langs[i].cp != 0 && langs[i].cp != GetACP())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
cbi = SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_ADDSTRING, 0, (LPARAM) langs[i].name);
|
||||||
SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_SETITEMDATA, cbi, (LPARAM) langs[i].id);
|
SendDlgItemMessage(hwndDlg, IDC_LANGUAGE, CB_SETITEMDATA, cbi, (LPARAM) langs[i].id);
|
||||||
|
|
||||||
// remember selected language
|
// remember selected language
|
||||||
|
@ -123,6 +130,18 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size,
|
||||||
|
|
||||||
// get flags
|
// get flags
|
||||||
if (popstring(temp)) return;
|
if (popstring(temp)) return;
|
||||||
|
|
||||||
|
// parse flags
|
||||||
|
{
|
||||||
|
char *p=temp;
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if (*p == 'F') dofont=1; // parse font flag
|
||||||
|
if (*p == 'C') docp=1; // parse codepage flag
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (*temp == 'A') {
|
if (*temp == 'A') {
|
||||||
// automatic language count
|
// automatic language count
|
||||||
stack_t *th;
|
stack_t *th;
|
||||||
|
@ -133,19 +152,18 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size,
|
||||||
th = th->next;
|
th = th->next;
|
||||||
}
|
}
|
||||||
if (!th) return;
|
if (!th) return;
|
||||||
langs_num /= 2;
|
if (dofont)
|
||||||
|
langs_num -= 2;
|
||||||
|
if (docp)
|
||||||
|
langs_num /= 3;
|
||||||
|
else
|
||||||
|
langs_num /= 2;
|
||||||
pop_empty_string = TRUE;
|
pop_empty_string = TRUE;
|
||||||
} else {
|
} else {
|
||||||
// use counts languages
|
// use counts languages
|
||||||
langs_num = myatoi(temp);
|
langs_num = myatoi(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
|
||||||
// parse font flag
|
|
||||||
char *p=temp;
|
|
||||||
while (*p) if (*p++ == 'F') dofont=1;
|
|
||||||
}
|
|
||||||
|
|
||||||
// zero languages?
|
// zero languages?
|
||||||
if (!langs_num) return;
|
if (!langs_num) return;
|
||||||
|
|
||||||
|
@ -164,6 +182,12 @@ void __declspec(dllexport) LangDialog(HWND hwndParent, int string_size,
|
||||||
langs[i].id = GlobalAlloc(GPTR, lstrlen(temp)+1);
|
langs[i].id = GlobalAlloc(GPTR, lstrlen(temp)+1);
|
||||||
if (!langs[i].id) return;
|
if (!langs[i].id) return;
|
||||||
lstrcpy(langs[i].id, temp);
|
lstrcpy(langs[i].id, temp);
|
||||||
|
|
||||||
|
if (docp)
|
||||||
|
{
|
||||||
|
if (popstring(temp)) return;
|
||||||
|
langs[i].cp = myatoi(temp);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// pop the empty string to keep the stack clean
|
// pop the empty string to keep the stack clean
|
||||||
|
|
|
@ -2051,7 +2051,7 @@ Var /GLOBAL MUI_TEMP2
|
||||||
|
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" A ${MUI_LANGDLL_PUSHLIST} ""
|
LangDLL::LangDialog "${MUI_LANGDLL_WINDOWTITLE}" "${MUI_LANGDLL_INFO}" AC ${MUI_LANGDLL_PUSHLIST} ""
|
||||||
|
|
||||||
Pop $LANGUAGE
|
Pop $LANGUAGE
|
||||||
StrCmp $LANGUAGE "cancel" 0 +2
|
StrCmp $LANGUAGE "cancel" 0 +2
|
||||||
|
@ -2230,14 +2230,14 @@ Var /GLOBAL MUI_TEMP2
|
||||||
!insertmacro MUI_LANGUAGEFILE_DEFINE "MUI_${LANGUAGE}_LANGNAME" "MUI_LANGNAME"
|
!insertmacro MUI_LANGUAGEFILE_DEFINE "MUI_${LANGUAGE}_LANGNAME" "MUI_LANGNAME"
|
||||||
|
|
||||||
!ifndef MUI_LANGDLL_PUSHLIST
|
!ifndef MUI_LANGDLL_PUSHLIST
|
||||||
!define MUI_LANGDLL_PUSHLIST "'${MUI_${LANGUAGE}_LANGNAME}' ${LANG_${LANGUAGE}} "
|
!define MUI_LANGDLL_PUSHLIST "'${MUI_${LANGUAGE}_LANGNAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' "
|
||||||
!else
|
!else
|
||||||
!ifdef MUI_LANGDLL_PUSHLIST_TEMP
|
!ifdef MUI_LANGDLL_PUSHLIST_TEMP
|
||||||
!undef MUI_LANGDLL_PUSHLIST_TEMP
|
!undef MUI_LANGDLL_PUSHLIST_TEMP
|
||||||
!endif
|
!endif
|
||||||
!define MUI_LANGDLL_PUSHLIST_TEMP "${MUI_LANGDLL_PUSHLIST}"
|
!define MUI_LANGDLL_PUSHLIST_TEMP "${MUI_LANGDLL_PUSHLIST}"
|
||||||
!undef MUI_LANGDLL_PUSHLIST
|
!undef MUI_LANGDLL_PUSHLIST
|
||||||
!define MUI_LANGDLL_PUSHLIST "'${MUI_${LANGUAGE}_LANGNAME}' ${LANG_${LANGUAGE}} ${MUI_LANGDLL_PUSHLIST_TEMP}"
|
!define MUI_LANGDLL_PUSHLIST "'${MUI_${LANGUAGE}_LANGNAME}' '${LANG_${LANGUAGE}}' '${LANG_${LANGUAGE}_CP}' ${MUI_LANGDLL_PUSHLIST_TEMP}"
|
||||||
!endif
|
!endif
|
||||||
|
|
||||||
!insertmacro MUI_LANGUAGEFILE_LANGSTRING_PAGE WELCOME "MUI_TEXT_WELCOME_INFO_TITLE"
|
!insertmacro MUI_LANGUAGEFILE_LANGSTRING_PAGE WELCOME "MUI_TEXT_WELCOME_INFO_TITLE"
|
||||||
|
|
|
@ -2735,10 +2735,14 @@ int CEXEBuild::doCommand(int which_token, LineParser &line)
|
||||||
// define LANG_LangName as "####" (lang id)
|
// define LANG_LangName as "####" (lang id)
|
||||||
// for example ${LANG_ENGLISH} = 1033
|
// for example ${LANG_ENGLISH} = 1033
|
||||||
char lang_id[16];
|
char lang_id[16];
|
||||||
|
char lang_cp[16];
|
||||||
char lang_name[1024];
|
char lang_name[1024];
|
||||||
wsprintf(lang_name, "LANG_%s", table->nlf.m_szName);
|
wsprintf(lang_name, "LANG_%s", table->nlf.m_szName);
|
||||||
wsprintf(lang_id, "%u", table->lang_id);
|
wsprintf(lang_id, "%u", table->lang_id);
|
||||||
|
wsprintf(lang_cp, "%u", table->nlf.m_uCodePage);
|
||||||
definedlist.add(lang_name, lang_id);
|
definedlist.add(lang_name, lang_id);
|
||||||
|
wsprintf(lang_name, "LANG_%s_CP", table->nlf.m_szName);
|
||||||
|
definedlist.add(lang_name, lang_cp);
|
||||||
}
|
}
|
||||||
return PS_OK;
|
return PS_OK;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue