dvander@2042: /** dvander@2042: * vim: set ts=4 : dvander@2042: * ============================================================================= dvander@2042: * SourceMod dvander@2042: * Copyright (C) 2004-2008 AlliedModders LLC. All rights reserved. dvander@2042: * ============================================================================= dvander@2042: * dvander@2042: * This program is free software; you can redistribute it and/or modify it under dvander@2042: * the terms of the GNU General Public License, version 3.0, as published by the dvander@2042: * Free Software Foundation. dvander@2042: * dvander@2042: * This program is distributed in the hope that it will be useful, but WITHOUT dvander@2042: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS dvander@2042: * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more dvander@2042: * details. dvander@2042: * dvander@2042: * You should have received a copy of the GNU General Public License along with dvander@2042: * this program. If not, see . dvander@2042: * dvander@2042: * As a special exception, AlliedModders LLC gives you permission to link the dvander@2042: * code of this program (as well as its derivative works) to "Half-Life 2," the dvander@2042: * "Source Engine," the "SourcePawn JIT," and any Game MODs that run on software dvander@2042: * by the Valve Corporation. You must obey the GNU General Public License in dvander@2042: * all respects for all other code used. Additionally, AlliedModders LLC grants dvander@2042: * this exception to all derivative works. AlliedModders LLC defines further dvander@2042: * exceptions, found in LICENSE.txt (as of this writing, version JULY-31-2007), dvander@2042: * or . dvander@2042: * dvander@2042: * Version: $Id$ dvander@2042: */ dvander@2042: dvander@3004: #include "common_logic.h" dvander@2042: #include "PhraseCollection.h" dvander@2042: #include "Translator.h" dvander@2042: dvander@2042: CPhraseCollection::CPhraseCollection() dvander@2042: { dvander@2042: } dvander@2042: dvander@2042: CPhraseCollection::~CPhraseCollection() dvander@2042: { dvander@2042: } dvander@2042: dvander@2042: void CPhraseCollection::Destroy() dvander@2042: { dvander@2042: delete this; dvander@2042: } dvander@2042: dvander@2042: IPhraseFile *CPhraseCollection::AddPhraseFile(const char *filename) dvander@2042: { dvander@2042: size_t i; dvander@2042: unsigned int fid; dvander@2042: IPhraseFile *pFile; dvander@2042: char full_name[PLATFORM_MAX_PATH]; dvander@2042: dvander@2042: /* No compat shim here. The user should have read the doc. */ dvander@3004: smcore.Format(full_name, sizeof(full_name), "%s.txt", filename); dvander@2042: dvander@2042: fid = g_Translator.FindOrAddPhraseFile(full_name); dvander@2042: pFile = g_Translator.GetFileByIndex(fid); dvander@2042: dvander@2042: for (i = 0; i < m_Files.size(); i++) dvander@2042: { dvander@2042: if (m_Files[i] == pFile) dvander@2042: { dvander@2042: return pFile; dvander@2042: } dvander@2042: } dvander@2042: dvander@2042: m_Files.push_back(pFile); dvander@2042: dvander@2042: return pFile; dvander@2042: } dvander@2042: dvander@2042: unsigned int CPhraseCollection::GetFileCount() dvander@2042: { dvander@2042: return (unsigned int)m_Files.size(); dvander@2042: } dvander@2042: dvander@2042: IPhraseFile *CPhraseCollection::GetFile(unsigned int file) dvander@2042: { dvander@2042: if (file >= m_Files.size()) dvander@2042: { dvander@2042: return NULL; dvander@2042: } dvander@2042: dvander@2042: return m_Files[file]; dvander@2042: } dvander@2042: dvander@2042: TransError CPhraseCollection::FindTranslation(const char *key, unsigned int langid, Translation *pTrans) dvander@2042: { dvander@2042: size_t i; dvander@2042: dvander@2042: for (i = 0; i < m_Files.size(); i++) dvander@2042: { dvander@2042: if (m_Files[i]->GetTranslation(key, langid, pTrans) == Trans_Okay) dvander@2042: { dvander@2042: return Trans_Okay; dvander@2042: } dvander@2042: } dvander@2042: dvander@2042: return Trans_BadPhrase; dvander@2042: } dvander@2042: dvander@2042: bool CPhraseCollection::FormatString(char *buffer, dvander@2042: size_t maxlength, dvander@2042: const char *format, dvander@2042: void **params, dvander@2042: unsigned int numparams, dvander@2042: size_t *pOutLength, dvander@2042: const char **pFailPhrase) dvander@2042: { dvander@2042: unsigned int arg; dvander@2042: dvander@2042: arg = 0; dvander@3004: if (!smcore.gnprintf(buffer, maxlength, format, this, params, numparams, arg, pOutLength, pFailPhrase)) dvander@2042: { dvander@2042: return false; dvander@2042: } dvander@2042: dvander@2042: if (arg != numparams) dvander@2042: { dvander@2042: if (pFailPhrase != NULL) dvander@2042: { dvander@2042: *pFailPhrase = NULL; dvander@2042: } dvander@2042: return false; dvander@2042: } dvander@2042: dvander@2042: return true; dvander@2042: }