| 613 | } |
| 614 | |
| 615 | strings::UniString GetNormalizedStreetName(std::string_view name) |
| 616 | { |
| 617 | static StreetsDirectionsHolder s_directions; |
| 618 | static StreetsAbbreviationsHolder s_abbrev; |
| 619 | |
| 620 | UniString res, abbrev, dir; |
| 621 | Tokenize(name, kStreetTokensSeparator, [&](std::string_view v) |
| 622 | { |
| 623 | UniString s = NormalizeAndSimplifyString(v); |
| 624 | |
| 625 | if (s_abbrev.ApplyIf(s, [&abbrev](UniString const & s) { abbrev.append(s); })) |
| 626 | return; |
| 627 | if (s_directions.ApplyIf(s, [&dir](UniString const & s) { dir.append(s); })) |
| 628 | return; |
| 629 | |
| 630 | EraseDummyStreetChars(s); |
| 631 | res.append(s); |
| 632 | }); |
| 633 | |
| 634 | res.append(abbrev); |
| 635 | res.append(dir); |
| 636 | return res; |
| 637 | } |
| 638 | |
| 639 | bool IsStreetSynonym(UniString const & s) |
| 640 | { |