/*  Copyright (c) MediaArea.net SARL. All Rights Reserved.
 *
 *  Use of this source code is governed by a zlib-style license that can
 *  be found in the License.txt file in the root of the source tree.
 */
 
//---------------------------------------------------------------------------
#include "ZenLib/PreComp.h"
#ifdef __BORLANDC__
    #pragma hdrstop
#endif
//---------------------------------------------------------------------------
 
//---------------------------------------------------------------------------
#include "ZenLib/Conf_Internal.h"
//---------------------------------------------------------------------------
 
//---------------------------------------------------------------------------
#ifdef ZENLIB_USEWX
    #include <wx/strconv.h>
#endif //ZENLIB_USEWX
#include <algorithm>
#include "ZenLib/Translation.h"
using namespace std;
//---------------------------------------------------------------------------
 
namespace ZenLib
{
 
//***************************************************************************
// Constructors/Destructor
//***************************************************************************
 
//---------------------------------------------------------------------------
// Constructors
Translation::Translation()
: std::map<ZenLib::Ztring, ZenLib::Ztring> ()
{
    Separator[0]=EOL;
    Separator[1]=__T(";");
}
 
Translation::Translation(const Ztring &Source)
{
    Separator[0]=EOL;
    Separator[1]=__T(";");
    Write(Source);
}
 
Translation::Translation(const Char *Source)
{
    Separator[0]=EOL;
    Separator[1]=__T(";");
    Write(Source);
}
 
#ifdef _UNICODE
Translation::Translation (const char* S)
{
    Separator[0]=EOL;
    Separator[1]=__T(";");
    Write(Ztring(S));
}
#endif
 
//***************************************************************************
// In/Out
//***************************************************************************
 
//---------------------------------------------------------------------------
// Get
Ztring Translation::Get () const
{
    Ztring ToReturn;
    const_iterator Temp=begin();
    while (Temp!=end())
    {
        ToReturn+=Temp->first;
        ToReturn+=Separator[1];
        ToReturn+=Temp->second;
        ToReturn+=Separator[0];
        ++Temp;
    }
    return ToReturn;
}
 
const Ztring &Translation::Get (const Ztring &Value)
{
    iterator Pos=find(Value);
    if (Pos==end())
        operator[](Value)=Value;
    return operator[](Value);
}
 
Ztring Translation::Get (const Ztring &Value, const Ztring &Default)
{
    iterator Pos=find(Value);
    if (Pos==end())
        operator[](Value)=Default;
    return operator[](Value);
}
 
//---------------------------------------------------------------------------
// Set
void Translation::Write(const Ztring &NewLanguage)
{
    clear();
 
    if (NewLanguage.empty())
        return;
 
    size_t Pos1=0, Pos2_EOL=0, Pos2_Separator=0;
 
    while (Pos2_EOL!=(size_t)-1)
    {
        Pos2_EOL=NewLanguage.find(__T('\n'), Pos1);
        Pos2_Separator=NewLanguage.find(__T(';'), Pos1);
        if (Pos2_Separator<Pos2_EOL)
        {
            operator[](NewLanguage.substr(Pos1, Pos2_Separator-Pos1))=NewLanguage.substr(Pos2_Separator+1, Pos2_EOL-Pos2_Separator-1);
        }
        Pos1=Pos2_EOL+1;
    }
}
 
//---------------------------------------------------------------------------
// Set
void Translation::Write(const Ztring &Value, const Ztring &NewLanguage)
{
    operator[](Value)=NewLanguage;
}
 
//***************************************************************************
// Configuration
//***************************************************************************
 
//---------------------------------------------------------------------------
// Separator
void Translation::Separator_Set (size_type Level, const Ztring &NewSeparator)
{
    if (Level>1)
        return;
 
    Separator[Level]=NewSeparator;
}
 
//***************************************************************************
// C++
//***************************************************************************
 
} //namespace

V730 Not all members of a class are initialized inside the constructor. Consider inspecting: Max.

V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: Max.

V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: Max.

V730 It is possible that not all members of a class are initialized inside the constructor. Consider inspecting: Max.