| 586 | } |
| 587 | |
| 588 | UniString GetStreetNameAsKey(std::string_view name, bool ignoreStreetSynonyms) |
| 589 | { |
| 590 | if (name.empty()) |
| 591 | return UniString(); |
| 592 | |
| 593 | static StreetsDirectionsHolder s_directions; |
| 594 | auto const & synonyms = StreetsSynonymsHolder::Instance(); |
| 595 | |
| 596 | UniString res, suffix; |
| 597 | Tokenize(name, kStreetTokensSeparator, [&](std::string_view v) |
| 598 | { |
| 599 | UniString s = NormalizeAndSimplifyString(v); |
| 600 | |
| 601 | if (ignoreStreetSynonyms && synonyms.FullMatch(s)) |
| 602 | return; |
| 603 | |
| 604 | if (s_directions.ApplyIf(s, [&suffix](UniString const & s) { suffix.append(s); })) |
| 605 | return; |
| 606 | |
| 607 | EraseDummyStreetChars(s); |
| 608 | res.append(s); |
| 609 | }); |
| 610 | |
| 611 | res.append(suffix); |
| 612 | return (res.empty() ? NormalizeAndSimplifyString(name) : res); |
| 613 | } |
| 614 | |
| 615 | strings::UniString GetNormalizedStreetName(std::string_view name) |
| 616 | { |