blob: 5f89b15bf991bed36073af79b9cf9941c9262b71 [file] [edit]
// This file is part of ICU4X. For terms of use, please see the file
// called LICENSE at the top level of the ICU4X source tree
// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
#include <icu4x/Bidi.hpp>
#include <icu4x/Logger.hpp>
#include <iostream>
using namespace icu4x;
int main() {
std::unique_ptr<Bidi> bidi = Bidi::create();
// Written char-by-char to avoid messing up certain text editors.
std::string_view str =
"א"
"ב"
"ג"
"a"
"b"
"c"
"\n"
"a"
"b"
"c"
"א"
"ב"
"ג";
// reordered string is same for both lines
std::string_view reordered_expected =
"a"
"b"
"c"
"ג"
"ב"
"א";
auto bidi_info = bidi->for_text(str, Bidi::level_ltr());
auto n_para = bidi_info->paragraph_count();
if (n_para != 2) {
std::cout << "Expected 2 paragraphs, found " << n_para << std::endl;
return 1;
}
auto para = bidi_info->paragraph_at(0);
auto size = para->size();
if (size != 10) {
std::cout << "Expected paragraph of size 10, found " << size << std::endl;
return 1;
}
// The first paragraph's first strongly directional character is RTL
uint8_t level = para->level_at(0);
std::cout << "Level of first paragraph at index 0 is " << unsigned(level) << std::endl;
if (!Bidi::level_is_rtl(level)) {
std::cout << "Expected level at index 0 to be RTL" << std::endl;
return 1;
}
std::string reordered = para->reorder_line(0, 9).value();
std::cout << "Reordered paragraph: " << reordered << std::endl;
if (reordered != reordered) {
std::cout << "Found incorrect reordering, expected: " << reordered << std::endl;
}
if (!para->set_paragraph_in_text(1)) {
std::cout << "Expected second paragraph to exist" << std::endl;
return 1;
}
size = para->size();
if (size != 9) {
std::cout << "Expected paragraph of size 9, found " << size << std::endl;
return 1;
}
// The second paragraph's first strongly directional character is LTR
level = para->level_at(0);
std::cout << "Level of second paragraph at index 0 is " << unsigned(level) << std::endl;
if (!Bidi::level_is_ltr(level)) {
std::cout << "Expected level at index 0 to be LTR" << std::endl;
return 1;
}
reordered = para->reorder_line(10, 19).value();
std::cout << "Reordered paragraph: " << reordered << std::endl;
if (reordered != reordered) {
std::cout << "Found incorrect reordering, expected: " << reordered << std::endl;
}
return 0;
}