mirror of
https://github.com/wesnoth/wesnoth
synced 2024-09-20 07:51:33 +00:00
Extend case-insensitive filtering beyond ASCII characters (#9332)
This updates filtering for: * Game Load dialogue * MP lobby * In-game label and unit search * Add-ons client (now used consistently)
This commit is contained in:
parent
ad85d62f7d
commit
b316ee518b
2
changelog_entries/non-ascii-case-insensitve-filtering.md
Normal file
2
changelog_entries/non-ascii-case-insensitve-filtering.md
Normal file
|
@ -0,0 +1,2 @@
|
|||
### User interface
|
||||
* Search filter should now be case-insensitive for more than just ASCII characters (#9328)
|
|
@ -500,10 +500,7 @@ bool game_info::match_string_filter(const std::string& filter) const
|
|||
{
|
||||
const std::string& s1 = name;
|
||||
const std::string& s2 = map_info;
|
||||
return std::search(s1.begin(), s1.end(), filter.begin(), filter.end(),
|
||||
utils::chars_equal_insensitive) != s1.end()
|
||||
|| std::search(s2.begin(), s2.end(), filter.begin(), filter.end(),
|
||||
utils::chars_equal_insensitive) != s2.end();
|
||||
return translation::ci_search(s1, filter) || translation::ci_search(s2, filter);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -65,12 +65,7 @@ namespace {
|
|||
for(const auto& attribute : cfg.attribute_range())
|
||||
{
|
||||
std::string val = attribute.second.str();
|
||||
if(std::search(val.begin(),
|
||||
val.end(),
|
||||
filter.begin(),
|
||||
filter.end(),
|
||||
utils::chars_equal_insensitive)
|
||||
!= val.end())
|
||||
if(translation::ci_search(val, filter))
|
||||
{
|
||||
found = true;
|
||||
break;
|
||||
|
|
|
@ -336,13 +336,7 @@ void game_load::apply_filter_text(const std::string& text, bool force)
|
|||
bool found = false;
|
||||
for(const auto & word : words)
|
||||
{
|
||||
found = std::search(games_[i].name().begin(),
|
||||
games_[i].name().end(),
|
||||
word.begin(),
|
||||
word.end(),
|
||||
utils::chars_equal_insensitive)
|
||||
!= games_[i].name().end();
|
||||
|
||||
found = translation::ci_search(games_[i].name(), word);
|
||||
if(!found) {
|
||||
// one word doesn't match, we don't reach words.end()
|
||||
break;
|
||||
|
|
|
@ -1389,22 +1389,17 @@ void menu_handler::do_search(const std::string& new_search)
|
|||
if(!gui_->shrouded(loc)) {
|
||||
const terrain_label* label = gui_->labels().get_label(loc);
|
||||
if(label) {
|
||||
std::string label_text = label->text().str();
|
||||
if(std::search(label_text.begin(), label_text.end(), last_search_.begin(), last_search_.end(),
|
||||
utils::chars_equal_insensitive)
|
||||
!= label_text.end()) {
|
||||
found = true;
|
||||
}
|
||||
const std::string& label_text = label->text().str();
|
||||
found = translation::ci_search(label_text, last_search_);
|
||||
}
|
||||
}
|
||||
|
||||
// Search unit name
|
||||
if(!gui_->fogged(loc)) {
|
||||
unit_map::const_iterator ui = pc_.get_units().find(loc);
|
||||
if(ui != pc_.get_units().end()) {
|
||||
const std::string name = ui->name();
|
||||
if(std::search(
|
||||
name.begin(), name.end(), last_search_.begin(), last_search_.end(), utils::chars_equal_insensitive)
|
||||
!= name.end()) {
|
||||
const std::string& unit_name = ui->name();
|
||||
if(translation::ci_search(unit_name, last_search_)) {
|
||||
if(!gui_->viewing_team().is_enemy(ui->side())
|
||||
|| !ui->invisible(ui->get_location())) {
|
||||
found = true;
|
||||
|
|
Loading…
Reference in New Issue
Block a user