/*****************************************************************************/ // Copyright 2015-2019 Adobe Systems Incorporated // All Rights Reserved. // // NOTICE: Adobe permits you to use, modify, and distribute this file in // accordance with the terms of the Adobe license agreement accompanying it. /*****************************************************************************/ #include "dng_local_string.h" /*****************************************************************************/ dng_local_string::dng_local_string () : fDefaultText () , fDictionary () { } /*****************************************************************************/ dng_local_string::dng_local_string (const dng_string &s) : fDefaultText (s) , fDictionary () { } /*****************************************************************************/ dng_local_string::~dng_local_string () { } /*****************************************************************************/ void dng_local_string::Clear () { fDefaultText.Clear (); fDictionary.clear (); } /*****************************************************************************/ void dng_local_string::SetDefaultText (const dng_string &s) { fDefaultText = s; } /*****************************************************************************/ void dng_local_string::AddTranslation (const dng_string &language, const dng_string &translation) { dng_string safeLanguage (language); safeLanguage.Truncate (255); fDictionary.push_back (dictionary_entry (safeLanguage, translation)); } /*****************************************************************************/ void dng_local_string::Set (const char *s) { dng_string defaultText; defaultText.Set (s); *this = dng_local_string (defaultText); } /*****************************************************************************/ const dng_string & dng_local_string::LocalText (const dng_string &locale) const { // Pass 1 - try for a match starting with the entire locale string. if (locale.Length () >= 5) { for (uint32 index = 0; index < TranslationCount (); index++) { if (Language (index).StartsWith (locale.Get (), false)) { return Translation (index); } } } // Pass 2 - try for a language only match. if (locale.Length () >= 2) { dng_string languageOnly (locale); languageOnly.Truncate (2); for (uint32 index = 0; index < TranslationCount (); index++) { if (Language (index).StartsWith (languageOnly.Get (), false)) { return Translation (index); } } } // Otherwise use default text. return DefaultText (); } /*****************************************************************************/ bool dng_local_string::operator== (const dng_local_string &s) const { if (DefaultText () != s.DefaultText ()) { return false; } if (TranslationCount () != s.TranslationCount ()) { return false; } for (uint32 index = 0; index < TranslationCount (); index++) { if (Language (index) != s.Language (index)) { return false; } if (Translation (index) != s.Translation (index)) { return false; } } return true; } /*****************************************************************************/ void dng_local_string::Truncate (uint32 maxBytes) { fDefaultText.Truncate (maxBytes); for (uint32 index = 0; index < TranslationCount (); index++) { fDictionary [index] . fTranslation . Truncate (maxBytes); } } /*****************************************************************************/