From 57e86d72e984f3344c95b603bc8cf34b0f2e9a1f Mon Sep 17 00:00:00 2001 From: zyphlar Date: Tue, 15 Jul 2025 23:18:18 -0700 Subject: [PATCH] [core] Use hyphens instead of colons for address ranges Signed-off-by: zyphlar --- indexer/feature_utils.cpp | 11 +++++++++++ indexer/feature_utils.hpp | 3 +++ map/place_page_info.cpp | 2 +- search/ranker.cpp | 5 +++-- 4 files changed, 18 insertions(+), 3 deletions(-) diff --git a/indexer/feature_utils.cpp b/indexer/feature_utils.cpp index bd3ce374e..5f60707db 100644 --- a/indexer/feature_utils.cpp +++ b/indexer/feature_utils.cpp @@ -375,6 +375,17 @@ void GetReadableName(NameParamsIn const & in, NameParamsOut & out) GetReadableNameImpl(in, in.IsNativeOrSimilarLang(), out); } +string const GetReadableAddress(string const & address) { + // Instead of housenumber range strings like 123:456, hyphenate like 123 - 456 + string out = address; + size_t pos = 0; + while ((pos = out.find(":", pos)) != string::npos) { + out.replace(pos, 1, "\u2009\u2013\u2009"); // thin space + en-dash + thin space + break; + } + return out; +} + /* int8_t GetNameForSearchOnBooking(RegionData const & regionData, StringUtf8Multilang const & src, string & name) { diff --git a/indexer/feature_utils.hpp b/indexer/feature_utils.hpp index 7e1a4724f..024d116ce 100644 --- a/indexer/feature_utils.hpp +++ b/indexer/feature_utils.hpp @@ -121,6 +121,9 @@ namespace feature /// - country language name. void GetReadableName(NameParamsIn const & in, NameParamsOut & out); + /// Format house numbers etc to be more human-readable instead of using symbols like 123:456 + std::string const GetReadableAddress(std::string const & address); + /// Returns language id as return result and name for search on booking in the @name parameter, /// the priority is the following: /// - default name; diff --git a/map/place_page_info.cpp b/map/place_page_info.cpp index 88a81253f..987932fa3 100644 --- a/map/place_page_info.cpp +++ b/map/place_page_info.cpp @@ -51,7 +51,7 @@ void Info::SetFromFeatureType(FeatureType & ft) bool emptyTitle = false; m_primaryFeatureName = out.GetPrimary(); - m_uiAddress = m_address; + m_uiAddress = feature::GetReadableAddress(m_address); if (IsBookmark()) { diff --git a/search/ranker.cpp b/search/ranker.cpp index dc2c497b9..0664b17b0 100644 --- a/search/ranker.cpp +++ b/search/ranker.cpp @@ -12,6 +12,7 @@ #include "indexer/data_source.hpp" #include "indexer/feature_algo.hpp" #include "indexer/feature_data.hpp" +#include "indexer/feature_utils.hpp" #include "indexer/ftypes_matcher.hpp" #include "indexer/road_shields_parser.hpp" #include "indexer/search_string_utils.hpp" @@ -304,7 +305,7 @@ ftypes::LocalityType GetLocalityIndex(feature::TypesHolder const & types) // TODO: Format street and house number according to local country's rules. string FormatStreetAndHouse(ReverseGeocoder::Address const & addr) { - return addr.GetStreetName() + ", " + addr.GetHouseNumber(); + return addr.GetStreetName() + ", " + feature::GetReadableAddress(addr.GetHouseNumber()); } // TODO: Share common formatting code for search results and place page. @@ -512,7 +513,7 @@ private: { string streetName; m_ranker.GetBestMatchName(*streetFeature, streetName); - name = streetName + ", " + addr.GetHouseNumber(); + name = streetName + ", " + feature::GetReadableAddress(addr.GetHouseNumber()); } } }