1#include <mbgl/util/platform.hpp>
2#include <libnu/unaccent.h>
3#include <unaccent.hpp>
4
5#include <cstring>
6#include <sstream>
7
8namespace mbgl { namespace platform {
9
10std::string unaccent(const std::string& str)
11{
12 std::stringstream output;
13 char const *itr = str.c_str(), *nitr;
14 char const *end = itr + str.length();
15 char lo[5] = { 0 };
16
17 for (; itr < end; itr = nitr)
18 {
19 uint32_t code_point = 0;
20 char const* buf = nullptr;
21
22 nitr = _nu_tounaccent(encoded: itr, limit: end, read: nu_utf8_read, u: &code_point, transform: &buf, context: nullptr);
23 if (buf != nullptr)
24 {
25 do
26 {
27 buf = NU_CASEMAP_DECODING_FUNCTION(utf8: buf, unicode: &code_point);
28 if (code_point == 0) break;
29 output.write(s: lo, n: nu_utf8_write(unicode: code_point, utf8: lo) - lo);
30 }
31 while (code_point != 0);
32 }
33 else
34 {
35 output.write(s: itr, n: nitr - itr);
36 }
37 }
38
39 return output.str();
40}
41
42} // namespace platform
43} // namespace mbgl
44

source code of qtlocation/src/3rdparty/mapbox-gl-native/platform/default/unaccent.cpp