summaryrefslogtreecommitdiff
path: root/Source/lang.cpp
diff options
context:
space:
mode:
authorDidier Raboud <odyx@debian.org>2018-03-31 20:38:15 +0200
committerDidier Raboud <odyx@debian.org>2018-03-31 20:38:15 +0200
commit79c4eae72cbe0760878e0100fc7d6a73904c6d12 (patch)
tree4766bd8c6d691ff1ea50ed1b6bc94dd794a3ab5d /Source/lang.cpp
parentac50ae59d3d1fed68f8d1bee90507f85e009fb57 (diff)
Import Upstream version 2.25
Diffstat (limited to 'Source/lang.cpp')
-rwxr-xr-xSource/lang.cpp60
1 files changed, 50 insertions, 10 deletions
diff --git a/Source/lang.cpp b/Source/lang.cpp
index f9b4615..dda8cfb 100755
--- a/Source/lang.cpp
+++ b/Source/lang.cpp
@@ -1,3 +1,19 @@
+/*
+ * lang.cpp
+ *
+ * This file is a part of NSIS.
+ *
+ * Copyright (C) 1999-2007 Nullsoft and Contributors
+ *
+ * Licensed under the zlib/libpng license (the "License");
+ * you may not use this file except in compliance with the License.
+ *
+ * Licence details can be found in the file COPYING.
+ *
+ * This software is provided 'as-is', without any express or implied
+ * warranty.
+ */
+
#include "Platform.h"
#include <stdio.h>
#include <stdlib.h>
@@ -20,11 +36,13 @@ typedef enum {
BOTH_STATIC = 3
} STATICID;
-struct {
+struct NLFString {
char *szLangStringName;
char *szDefault;
STATICID eStaticID;
-} NLFStrings[NLF_STRINGS] = {
+};
+
+NLFString NLFStrings[NLF_STRINGS] = {
{"^Branding", "Nullsoft Install System %s", BOTH_STATIC},
{"^SetupCaption", "$(^Name) Setup", INSTALL_STATIC},
{"^UninstallCaption", "$(^Name) Uninstall", UNINSTALL_STATIC},
@@ -312,13 +330,12 @@ void CEXEBuild::InitLangTables() {
keep_ref = true;
}
-LanguageTable* CEXEBuild::GetLangTable(LANGID &lang) {
+LanguageTable* CEXEBuild::GetLangTable(LANGID &lang, bool create/*=true*/) {
int nlt = lang_tables.getlen() / sizeof(LanguageTable);
LanguageTable *nla = (LanguageTable*)lang_tables.get();
lang = lang ? lang : last_used_lang;
- last_used_lang = lang;
- LanguageTable *table = 0;
+ LanguageTable *table = NULL;
for (int i = 0; i < nlt; i++) {
if (lang == nla[i].lang_id) {
@@ -326,7 +343,7 @@ LanguageTable* CEXEBuild::GetLangTable(LANGID &lang) {
break;
}
}
- if (!table) {
+ if (!table && create) {
LanguageTable newtable;
newtable.lang_id = lang;
@@ -339,9 +356,32 @@ LanguageTable* CEXEBuild::GetLangTable(LANGID &lang) {
table = (LanguageTable*)lang_tables.get() + nlt;
}
+ if (table) // update last used language if a table was loaded
+ last_used_lang = lang;
+
return table;
}
+char *CEXEBuild::GetLangNameAndCP(LANGID lang, unsigned int *codepage/*=NULL*/) {
+ LanguageTable *table = GetLangTable(lang, false);
+
+ if (table && table->nlf.m_bLoaded) {
+ if (codepage)
+ *codepage = table->nlf.m_uCodePage;
+
+ return table->nlf.m_szName;
+ }
+ else {
+ if (codepage)
+ *codepage = 1252; // English US
+
+ if (lang == 1033)
+ return "English";
+ else
+ return "???";
+ }
+}
+
int CEXEBuild::DefineLangString(char *name, int process/*=-1*/) {
int index, uindex, pos, ret, sn;
pos = build_langstrings.get(name, &sn, &index, &uindex);
@@ -474,14 +514,14 @@ int CEXEBuild::GenerateLangTables() {
init_res_editor();
#define ADD_FONT(id) { \
- BYTE* dlg = res_editor->GetResource(RT_DIALOG, MAKEINTRESOURCE(id), NSIS_DEFAULT_LANG); \
+ BYTE* dlg = res_editor->GetResourceA(RT_DIALOG, MAKEINTRESOURCE(id), NSIS_DEFAULT_LANG); \
if (dlg) { \
CDialogTemplate td(dlg); \
res_editor->FreeResource(dlg); \
td.SetFont(build_font, build_font_size); \
DWORD dwSize; \
dlg = td.Save(dwSize); \
- res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(id), NSIS_DEFAULT_LANG, dlg, dwSize); \
+ res_editor->UpdateResourceA(RT_DIALOG, MAKEINTRESOURCE(id), NSIS_DEFAULT_LANG, dlg, dwSize); \
delete [] dlg; \
} \
}
@@ -529,7 +569,7 @@ int CEXEBuild::GenerateLangTables() {
init_res_editor();
#define ADD_FONT(id) { \
- BYTE* dlg = res_editor->GetResource(RT_DIALOG, MAKEINTRESOURCE(id), NSIS_DEFAULT_LANG); \
+ BYTE* dlg = res_editor->GetResourceA(RT_DIALOG, MAKEINTRESOURCE(id), NSIS_DEFAULT_LANG); \
if (dlg) { \
CDialogTemplate td(dlg,lt[i].nlf.m_uCodePage); \
res_editor->FreeResource(dlg); \
@@ -544,7 +584,7 @@ int CEXEBuild::GenerateLangTables() {
} \
DWORD dwSize; \
dlg = td.Save(dwSize); \
- res_editor->UpdateResource(RT_DIALOG, MAKEINTRESOURCE(id+cur_offset), NSIS_DEFAULT_LANG, dlg, dwSize); \
+ res_editor->UpdateResourceA(RT_DIALOG, MAKEINTRESOURCE(id+cur_offset), NSIS_DEFAULT_LANG, dlg, dwSize); \
delete [] dlg; \
} \
}