//---------------------------------------------------------------------------- // EgalTech 2015-2015 //---------------------------------------------------------------------------- // File : EXE_Messages.cpp Data : 05.05.15 Versione : 1.6e1 // Contenuto : Funzioni per gestione messaggi. // // // // Modifiche : 12.02.15 DS Creazione modulo. // // //---------------------------------------------------------------------------- //--------------------------- Include ---------------------------------------- #include "stdafx.h" #include "EXE.h" #include "/EgtDev/Include/EXeExecutor.h" #include "/EgtDEv/Include/EGnScanner.h" #include "/EgtDev/Include/EGnStringUtils.h" #include "/EgtDev/Include/EgtStringConverter.h" #include "/EgtDev/Include/EgtLogger.h" #include using namespace std ; //---------------------------------------------------------------------------- typedef unordered_map< int, string> INTSTR_UMAP ; static INTSTR_UMAP s_IdStringMap ; static string s_sLanguage ; static string s_sMsg ; //---------------------------------------------------------------------------- bool ExeLoadMessages( const string& sMsgFilePath) { // inizializzo lo scanner Scanner scan ; if ( ! scan.Init( sMsgFilePath)) return false ; // pulisco la memoria s_IdStringMap.clear() ; s_sMsg.clear() ; // riservo spazio s_IdStringMap.rehash( 4000) ; s_sMsg.reserve( 128) ; // leggo le linee string sLine ; sLine.reserve( 128) ; string sNum ; sNum.reserve( 16) ; string sMsg ; sMsg.reserve( 128) ; int nNum ; int nCurrNum = - 1 ; while ( scan.GetLine( sLine)) { // divido la linea in due parti sul token '=' Split( sLine, "=", true, sNum, sMsg) ; // la prima parte deve essere numerica if ( sNum.empty() || ! FromString( sNum, nNum)) { string sOut ; sOut = "Problem in " + sMsgFilePath + " at line " + ToString( scan.GetCurrLineNbr()) + " : " + sLine ; LOG_WARN( GetLogger(), sOut.c_str()) continue ; } // la numerazione deve essere crescente if ( nNum <= nCurrNum) { string sOut ; sOut = "Error in " + sMsgFilePath + " at message " + sNum + " : " + sLine ; LOG_ERROR( GetLogger(), sOut.c_str()) return false ; } nCurrNum = nNum ; // converto i caratteri speciali ReplaceString( sMsg, "
", "\n") ; // a capo ReplaceString( sMsg, "?" "?" "?", "") ; // da tradurre // inserisco il messaggio in tabella if ( ! s_IdStringMap.emplace( nNum, sMsg).second) return false ; // se messaggio 0 è la lingua if ( nNum == 0) s_sLanguage = sMsg ; } // termino lo scanner return scan.Terminate() ; } //---------------------------------------------------------------------------- const string& ExeGetLanguage( void) { return s_sLanguage ; } //---------------------------------------------------------------------------- const string& ExeGetMsg( int nMsg) { // recupero il messaggio auto Iter = s_IdStringMap.find( nMsg) ; if ( Iter != s_IdStringMap.end()) s_sMsg = Iter->second ; else s_sMsg = "Msg" + ToString( nMsg) ; return s_sMsg ; }