15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file declares a helper class for selecting a supported language from a 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// set of candidates. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_INSTALLER_UTIL_LANGUAGE_SELECTOR_H_ 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_INSTALLER_UTIL_LANGUAGE_SELECTOR_H_ 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <vector> 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace installer { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A helper class for selecting a supported language from a set of candidates. 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// By default, the candidates are retrieved from the operating system. 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class LanguageSelector { 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Default constructor will select from the set of languages supported by the 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // operating system. 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LanguageSelector(); 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Constructor for testing purposes. 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit LanguageSelector(const std::vector<std::wstring>& candidates); 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ~LanguageSelector(); 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The offset of the matched language (i.e., IDS_L10N_OFFSET_*). 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int offset() const { return offset_; } 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The full name of the candidate language for which a match was found. 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::wstring& matched_candidate() const { return matched_candidate_; } 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The name of the selected translation. 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring selected_translation() const { return GetLanguageName(offset_); } 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the name of a translation given its offset. 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static std::wstring GetLanguageName(int offset); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef bool (*SelectPred_Fn)(const std::wstring&, int*); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool SelectIf(const std::vector<std::wstring>& candidates, 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SelectPred_Fn select_predicate, 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring* matched_name, int* matched_offset); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DoSelect(const std::vector<std::wstring>& candidates); 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring matched_candidate_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int offset_; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LanguageSelector); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace installer. 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CHROME_INSTALLER_UTIL_LANGUAGE_SELECTOR_H_ 60