All pastes #412901 Raw Edit

YSI_languages.own

public cpp v1 · immutable
#412901 ·published 2007-03-28 00:45 UTC
rendered paste body
/*----------------------------------------------------------------------------*-YAdmin system - Languages CoreChangelog:23/03/07:First version.-*----------------------------------------------------------------------------*/#define LANGUAGE_FILE_NAME		"YSS_lang" // Change to Settings_GetSetting("LANGUAGE_FILE_NAME")#define LANGUAGE_FILE_PATH		"YSS/languages/"#define MAX_LANGUAGE_IDENTIFIER	4#define MAX_LANGUAGE_NAME		32#define MAX_LANGUAGE_PATH		64 // filename inclusive as they're constants#define NO_LANGUAGE_SLOT		Language:-1forward Language:Langs_GetPlayerLanguage(playerid);enum e_LANG_FLAG (<<= 1){	e_LANG_FLAG_NONE,	e_LANG_FLAG_ACTIVE = 1}enum E_LANGUAGES{	E_LANGUAGES_IDENTIFIER[MAX_LANGUAGE_IDENTIFIER],	E_LANGUAGES_NAME[MAX_LANGUAGE_NAME],	e_LANG_FLAG:E_LANGUAGES_FLAGS}static	g_sLoaded = 0,	g_sLanguages[MAX_LANGUAGES][E_LANGUAGES];/*----------------------------------------------------------------------------*-Function:	Langs_LangsParams:	-Return:	Langs_LoadAll().Notes:	The "constructor" for all this, although it just forwards (inline).-*----------------------------------------------------------------------------*/#define Langs_Langs() \	Langs_LoadAll()	/*----------------------------------------------------------------------------*-Function:	Langs_IsActiveParams:	Language:languageID - The language index you want to check the state of.Return:	e_LANG_FLAG_ACTIVE state.Notes:	Tries to be an inline function.-*----------------------------------------------------------------------------*/#define Langs_IsActive(%1) \	(g_sLanguages[%1][E_LANGUAGES_FLAGS] & e_LANG_FLAG_ACTIVE)/*----------------------------------------------------------------------------*-Function:	Langs_LanguageIdentifierParams:	Language:languageID - index of language to get identifier for.Return:	g_sLanguages[languageID][E_LANGUAGES_IDENTIFIER].Notes:	Gets the identifier for a language for INTERNAL use.		See also Langs_GetLanguageIdentifier.-*----------------------------------------------------------------------------*/#define Langs_LanguageIdentifier(%1) \	(g_sLanguages[%1][E_LANGUAGES_IDENTIFIER])/*----------------------------------------------------------------------------*-Function:	Langs_SendEntryDataParams:	function[] - The remote function to save the data to.	identifier[] - The string identifier for the text.	text[] - The text itself.Return:	-Notes:	All the remote functions are the same but this allows you to only save	text from certain text sections in your module (i.e. all text you want is	save to one big array).-*----------------------------------------------------------------------------*/#define Langs_SendEntryData(%1,%2,%3) \	CallRemoteFunction((%1), "ss", (%2), (%3))/*----------------------------------------------------------------------------*-Function:	Langs_NewInputParams:	Language:LanguageIDReturn:	-Notes:	Sets the remote systems up to recieve data for the new language.-*----------------------------------------------------------------------------*/#define Langs_NewInput(%1) \	CallRemoteFunction("Text_NewLanguage", "i", _:(%1))/*----------------------------------------------------------------------------*-Function:	Langs_ResetAllParams:	-Return:	-Notes:	Resets the local state and the remote text states.-*----------------------------------------------------------------------------*/#define Langs_ResetAll() \	CallRemoteFunction("Text_ResetAll", ""); \	g_sLoaded = 0/*----------------------------------------------------------------------------*-Function:	Langs_SaveEnteredDataParams:	Language:languageID, the index of the language you want to save.Return:	-Notes:	Once all the data for a language has been loaded it needs to be parsed	so that when the data needs to be accessed it's all nicely formatted for	speedy retrieval.  See Text_Parse for more details.-*----------------------------------------------------------------------------*/#define Langs_SaveEnteredData() \	CallRemoteFunction("Text_Parse", "")/*----------------------------------------------------------------------------*-Function:	Langs_ParseFileParams:	Language:languageID - The index of the language we want to retrieve the		data for.Return:	bool: language file load successNotes:	Loads one langage's file and distribites the data across all modules.	Sends data via specially named functions:		public LanguageText_<library set>(identifier[], text[], languageid) {}		Where <library set> is the part of the file currently being read	(e.g. [chat], [common] etc).-*----------------------------------------------------------------------------*/bool:Langs_ParseFile(Language:languageID){	new		filename[MAX_LANGUAGE_PATH],		File:f;	format(filename, sizeof (filename), "%s%s.%s", LANGUAGE_FILE_PATH, LANGUAGE_FILE_NAME, Langs_LanguageIdentifier(languageID));	if (!(f = fopen(filename, io_read))) return false;	Langs_NewInput(languageID);	new		line[MAX_STRING],		tagName[MAX_STRING];	while (fread(f, line))	{		if (line[0] == '[')		{			if (!INI_GetTagName(line, tagName)) tagName[0] = '\0';			else stradd(tagName, "Text_Tag_%s");		}		else if (tagName[0])		{			StripNL(line);			new				stringIdent[MAX_TEXT_NAME],				stringText[MAX_TEXT_ENTRY];			if (!INI_GetEntryName(line, stringIdent) || !INI_GetEntryText(line, stringText)) continue;			Langs_SendEntryData(tagName, stringIdent, stringText);		}	}	fclose(f);	Langs_SaveEnteredData();	return true;}/*----------------------------------------------------------------------------*-Function:	Langs_LoadAllParams:	-Return:	-Notes:	Loops through the language files requested in the ini and calls	the loading function for that one. Languages required are loaded from the	ini and passed via Langs_AddLangage to be loaded here.-*----------------------------------------------------------------------------*/Langs_LoadAll(){	Langs_ResetAll();	new		Language:i;	while (i < MAX_LANGUAGES)	{		if (Langs_IsActive(i) && Langs_ParseFile(i)) g_sLoaded = 1;		i++;	}}/*----------------------------------------------------------------------------*-Function:	Langs_AddLanguageParams:	identifier[] - The two or three character shortcode for language identi-		fication and for the extension on the language file (e.g. "EN").	name[] - The real-world name of this language (e.g. "English").Return:	Language: Fail - -1, Success - index.Notes:	If all the languages have been loaded initially this adds the langauge	to the list and then loads the data.  If they've not been initialise it	just adds it to the list of languages to load.-*----------------------------------------------------------------------------*/Language:Langs_AddLanguage(identifier[], name[]){	new		Language:i;	while (i < MAX_LANGUAGES)	{		if (!Langs_IsActive(i)) break;		i++;	}	if (i == MAX_LANGUAGES) return NO_LANGUAGE_SLOT;	g_sLanguages[i][E_LANGUAGES_FLAGS] = e_LANG_FLAG_ACTIVE;	strcpy(g_sLanguages[i][E_LANGUAGES_IDENTIFIER], identifier); // Copy the null byte too	strcpy(g_sLanguages[i][E_LANGUAGES_NAME], name);	if (g_sLoaded) // Langages already loaded so load this one now	{		Langs_ParseFile(i);	}	return i;}/*----------------------------------------------------------------------------*-Function:	Langs_GetLanguageIdentifierParams:	Language:languageID - index of language to get identifier for.Return:	g_sLanguages[languageID][E_LANGUAGES_IDENTIFIER].Notes:	Gets the identifier for a language for EXTERNAL use.		See also: Langs_LanguageIdentifier.-*----------------------------------------------------------------------------*/stock Langs_GetLanguageIdentifier(Language:languageID){	return Langs_LanguageIdentifier(languageID);}/*----------------------------------------------------------------------------*-Function:	Langs_GetLanguageIDParams:	identifier[] - The string identifier of the language you want to get.Return:	The Language: id.Notes:	--*----------------------------------------------------------------------------*/Language:Langs_GetLanguageID(identifier[]){	for (new Language:i; i < MAX_LANGUAGES; i++)	{		if (!strcmp(identifier, g_sLanguages[i][E_LANGUAGES_IDENTIFIER])) return i;	}	return NO_LANGUAGE_SLOT;}/*----------------------------------------------------------------------------*-Function:	Langs_GetPlayerLanguageParams:	playeridReturn:	Language:player languageNotes:	--*----------------------------------------------------------------------------*/public Language:Langs_GetPlayerLanguage(playerid){	return Language:0;}