NSIS/Source/lang.h
kichik 672e695976 - Added SS_NOPREFIX for the static control above the install log so both will show the same when an ampersand is present in the string
- Added another parameter for Name. It will be used in places where doubled ampersands are required for text to render as expected. Use it if you have an ampersand in your name. See the updated documentation about the Name command for more information about usage.


git-svn-id: https://svn.code.sf.net/p/nsis/code/NSIS/trunk@3288 212acab6-be3b-0410-9dea-997c60f758d6
2003-12-17 23:22:14 +00:00

310 lines
6.6 KiB
C++

#ifndef ___NLF___H_____
#define ___NLF___H_____
#include "exehead/fileform.h"
struct NLFRef {
int iRef;
int iUnRef;
};
struct langstring {
int name;
int sn;
int index;
int uindex;
int process;
};
class LangStringList : public SortedStringListND<struct langstring>
{
public:
LangStringList() {
count = 0;
}
~LangStringList() { }
int add(const char *name, int *sn=0)
{
int pos = SortedStringListND<struct langstring>::add(name);
if (pos == -1) return -1;
((struct langstring*)gr.get())[pos].sn = count;
if (sn) *sn = count;
count++;
((struct langstring*)gr.get())[pos].index = -1;
((struct langstring*)gr.get())[pos].uindex = -1;
((struct langstring*)gr.get())[pos].process = 1;
return pos;
}
int get(char *name, int *sn=0, int *index=0, int *uindex=0, int *process=0)
{
if (index) *index = -1;
if (uindex) *uindex = -1;
if (sn) *sn = -1;
int v=SortedStringListND<struct langstring>::find(name);
if (v==-1) return -1;
if (index) *index = ((struct langstring*)gr.get())[v].index;
if (uindex) *uindex = ((struct langstring*)gr.get())[v].uindex;
if (sn) *sn = ((struct langstring*)gr.get())[v].sn;
if (process) *process = ((struct langstring*)gr.get())[v].process;
return v;
}
void set(int pos, int index=-1, int uindex=-1, int process=-1)
{
if ((unsigned int)pos > (gr.getlen() / sizeof(struct langstring)))
return;
struct langstring *data=(struct langstring *)gr.get();
if (index >= 0)
data[pos].index = index;
if (uindex >= 0)
data[pos].uindex = uindex;
if (process >= 0)
data[pos].process = process;
}
void set(char *name, int index, int uindex=-1, int process=-1)
{
set(get(name), index, uindex, process);
}
const char *pos2name(int pos)
{
struct langstring *data=(struct langstring *)gr.get();
if ((unsigned int)pos > (gr.getlen() / sizeof(struct langstring)))
return 0;
return ((const char*)strings.get() + data[pos].name);
}
const char *offset2name(int name)
{
if ((unsigned int)name > (unsigned int)strings.getlen())
return 0;
return (const char*)strings.get() + name;
}
int getnum()
{
return gr.getlen() / sizeof(struct langstring);
}
static int compare_index(const void *item1, const void *item2)
{
struct langstring *ls1 = (struct langstring *)item1;
struct langstring *ls2 = (struct langstring *)item2;
return ls1->index - ls2->index;
}
struct langstring *sort_index(int *num)
{
if (!num) return 0;
sortbuf.resize(0);
sortbuf.add(gr.get(), gr.getlen());
*num = sortbuf.getlen() / sizeof(struct langstring);
qsort(sortbuf.get(), *num, sizeof(struct langstring), compare_index);
return (struct langstring*) sortbuf.get();
}
static int compare_uindex(const void *item1, const void *item2)
{
struct langstring *ls1 = (struct langstring *)item1;
struct langstring *ls2 = (struct langstring *)item2;
return ls1->uindex - ls2->uindex;
}
struct langstring *sort_uindex(int *num)
{
if (!num) return 0;
sortbuf.resize(0);
sortbuf.add(gr.get(), gr.getlen());
*num = sortbuf.getlen() / sizeof(struct langstring);
qsort(sortbuf.get(), *num, sizeof(struct langstring), compare_uindex);
return (struct langstring*) sortbuf.get();
}
private:
int count;
TinyGrowBuf sortbuf;
};
class StringsArray
{
private:
TinyGrowBuf offsets;
GrowBuf strings;
public:
StringsArray()
{
offsets.set_zeroing(1);
strings.add("", sizeof(""));
}
~StringsArray() { }
void resize(int num)
{
offsets.resize(num * sizeof(int));
}
int set(int idx, char *str)
{
if (idx < 0)
return 0;
if (idx >= (int)(offsets.getlen() / sizeof(int)))
resize(idx+1);
int old = ((int*)offsets.get())[idx];
((int*)offsets.get())[idx] = strings.add(str, strlen(str) + 1);
return old;
}
const char *get(int idx)
{
if ((unsigned int)idx >= (offsets.getlen() / sizeof(int)))
return 0;
return (const char *)strings.get() + ((int*)offsets.get())[idx];
}
};
#define NLF_VERSION 6
enum {
NLF_BRANDING,
NLF_CAPTION,
NLF_UCAPTION,
NLF_SUBCAPTION_LICENSE,
NLF_SUBCAPTION_OPTIONS,
NLF_SUBCAPTION_DIR,
NLF_SUBCAPTION_INSTFILES,
NLF_SUBCAPTION_COMPLETED,
NLF_USUBCAPTION_OPTIONS,
NLF_USUBCAPTION_DIR,
NLF_USUBCAPTION_CONFIRM,
NLF_USUBCAPTION_INSTFILES,
NLF_USUBCAPTION_COMPLETED,
NLF_BTN_BACK,
NLF_BTN_NEXT,
NLF_BTN_LICENSE,
NLF_BTN_LICENSE_AGREE,
NLF_BTN_LICENSE_DISAGREE,
NLF_BTN_INSTALL,
NLF_BTN_UNINSTALL,
NLF_BTN_CANCEL,
NLF_BTN_CLOSE,
NLF_BTN_BROWSE,
NLF_BTN_DETAILS,
NLF_CLICK_NEXT,
NLF_CLICK_INSTALL,
NLF_CLICK_UNINSTALL,
NLF_NAME,
NLF_NAME_DA, // name with doubled ampersands - virtual
NLF_COMPLETED,
NLF_LICENSE_TEXT,
NLF_LICENSE_TEXT_FSCB,
NLF_LICENSE_TEXT_FSRB,
NLF_ULICENSE_TEXT,
NLF_ULICENSE_TEXT_FSCB,
NLF_ULICENSE_TEXT_FSRB,
NLF_LICENSE_DATA, // virtual
NLF_COMP_CUSTOM,
NLF_COMP_TEXT,
NLF_COMP_SUBTEXT1,
NLF_COMP_SUBTEXT1_NO_INST_TYPES,
NLF_COMP_SUBTEXT2,
NLF_UCOMP_TEXT,
NLF_UCOMP_SUBTEXT1,
NLF_UCOMP_SUBTEXT1_NO_INST_TYPES,
NLF_UCOMP_SUBTEXT2,
NLF_DIR_TEXT,
NLF_DIR_SUBTEXT,
NLF_DIR_BROWSETEXT,
NLF_UDIR_TEXT,
NLF_UDIR_SUBTEXT,
NLF_UDIR_BROWSETEXT,
NLF_SPACE_AVAIL,
NLF_SPACE_REQ,
NLF_UNINST_TEXT,
NLF_UNINST_SUBTEXT,
NLF_FILE_ERROR,
NLF_FILE_ERROR_NOIGNORE,
NLF_CANT_WRITE,
NLF_COPY_FAILED,
NLF_COPY_TO,
NLF_REGISTERING,
NLF_UNREGISTERING,
NLF_SYMBOL_NOT_FOUND,
NLF_COULD_NOT_LOAD,
NLF_CREATE_DIR,
NLF_CREATE_SHORTCUT,
NLF_CREATED_UNINST,
NLF_DEL_FILE,
NLF_DEL_ON_REBOOT,
NLF_ERR_CREATING_SHORTCUT,
NLF_ERR_CREATING,
NLF_ERR_DECOMPRESSING,
NLF_ERR_REG_DLL,
NLF_EXEC_SHELL,
NLF_EXEC,
NLF_EXTRACT,
NLF_ERR_WRITING,
NLF_INST_CORRUPTED,
NLF_NO_OLE,
NLF_OUTPUT_DIR,
NLF_REMOVE_DIR,
NLF_RENAME_ON_REBOOT,
NLF_RENAME,
NLF_SKIPPED,
NLF_COPY_DETAILS,
NLF_LOG_INSTALL_PROCESS,
NLF_BYTE,
NLF_KILO,
NLF_MEGA,
NLF_GIGA,
NLF_FONT,
NLF_FONTSIZE,
NLF_RTL,
NLF_STRINGS
};
struct NLF {
bool m_bLoaded;
char *m_szName;
char *m_szFont;
int m_iFontSize;
unsigned int m_uCodePage;
bool m_bRTL;
char *m_szStrings[NLF_STRINGS];
};
struct LanguageTable {
LANGID lang_id;
int dlg_offset;
GrowBuf *strlist;
StringsArray *lang_strings;
NLF nlf;
};
#endif