1 #pragma once
2 
3 #include <set>
4 #include <string>
5 #include <vector>
6 #include <memory>
7 
8 #include <mbgl/util/noncopyable.hpp>
9 
10 namespace mbgl {
11 
12 class BiDi;
13 class BiDiImpl;
14 
15 std::u16string applyArabicShaping(const std::u16string&);
16 
17 class BiDi : private util::noncopyable {
18 public:
19     BiDi();
20     ~BiDi();
21 
22     std::vector<std::u16string> processText(const std::u16string&, std::set<std::size_t>);
23 
24 private:
25     void mergeParagraphLineBreaks(std::set<std::size_t>&);
26     std::vector<std::u16string> applyLineBreaking(std::set<std::size_t>);
27     std::u16string getLine(std::size_t start, std::size_t end);
28 
29     std::unique_ptr<BiDiImpl> impl;
30 };
31 
32 } // end namespace mbgl
33