1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the test suite of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28struct LV {
29 const char *name;
30 const char *logical;
31 const char *visual;
32 int basicDir;
33};
34
35const LV logical_visual[] = {
36 { .name: "data0", .logical: "Hello", .visual: "Hello", .basicDir: QChar::DirL },
37 { .name: "data1", .logical: "\327\251\327\234\327\225\327\235", .visual: "\327\235\327\225\327\234\327\251", .basicDir: QChar::DirR },
38 { .name: "data2", .logical: "Hello \327\251\327\234\327\225\327\235", .visual: "Hello \327\235\327\225\327\234\327\251", .basicDir: QChar::DirL },
39 { .name: "data3", .logical: "car is \327\236\327\233\327\225\327\240\327\231\327\252 \327\220\327\225\327\230\327\225 in hebrew", .visual: "car is \327\225\327\230\327\225\327\220 \327\252\327\231\327\240\327\225\327\233\327\236 in hebrew", .basicDir: QChar::DirL },
40 { .name: "data4", .logical: "\327\236\327\233\327\225\327\240\327\231\327\252 \327\224\327\231\327\220 the car \327\221\327\251\327\244\327\224 \327\224\327\220\327\240\327\222\327\234\327\231\327\252", .visual: "\327\252\327\231\327\234\327\222\327\240\327\220\327\224 \327\224\327\244\327\251\327\221 the car \327\220\327\231\327\224 \327\252\327\231\327\240\327\225\327\233\327\236", .basicDir: QChar::DirR },
41 { .name: "data5", .logical: "he said \"\327\226\327\224 \327\251\327\225\327\225\327\224 123, 456, \327\221\327\241\327\223\327\250\" ", .visual: "he said \"\327\250\327\223\327\241\327\221 ,456 ,123 \327\224\327\225\327\225\327\251 \327\224\327\226\" ", .basicDir: QChar::DirL },
42 { .name: "data6", .logical: "he said \"\327\226\327\224 \327\251\327\225\327\225\327\224 (123, 456), \327\221\327\241\327\223\327\250\"", .visual: "he said \"\327\250\327\223\327\241\327\221 ,(456 ,123) \327\224\327\225\327\225\327\251 \327\224\327\226\"", .basicDir: QChar::DirL },
43 { .name: "data7", .logical: "he said \"\327\226\327\224 \327\251\327\225\327\225\327\224 123,456, \327\221\327\241\327\223\327\250\"", .visual: "he said \"\327\250\327\223\327\241\327\221 ,123,456 \327\224\327\225\327\225\327\251 \327\224\327\226\"", .basicDir: QChar::DirL },
44 { .name: "data8", .logical: "he said \"\327\226\327\224 \327\251\327\225\327\225\327\224 ,(123,456) \327\221\327\241\327\223\327\250\"", .visual: "he said \"\327\250\327\223\327\241\327\221 (123,456), \327\224\327\225\327\225\327\251 \327\224\327\226\"", .basicDir: QChar::DirL },
45 { .name: "data9", .logical: "\327\224\327\225\327\220 \327\220\327\236\327\250 \"it is 123, 456, ok\"", .visual: "\"it is 123, 456, ok\" \327\250\327\236\327\220 \327\220\327\225\327\224", .basicDir: QChar::DirR },
46 { .name: "data10", .logical: "<\327\233123>shalom</\327\233123>", .visual: "<123\327\233/>shalom<123\327\233>", .basicDir: QChar::DirR },
47 { .name: "data11", .logical: "<h123>\327\251\327\234\327\225\327\235</h123>", .visual: "<h123>\327\235\327\225\327\234\327\251</h123>", .basicDir: QChar::DirL },
48 { .name: "data12", .logical: "\327\224\327\225\327\220 \327\220\327\236\327\250 \"it is a car!\" \327\225\327\220\327\226 \327\250\327\245", .visual: "\327\245\327\250 \327\226\327\220\327\225 \"!it is a car\" \327\250\327\236\327\220 \327\220\327\225\327\224", .basicDir: QChar::DirR },
49 { .name: "data13", .logical: "\327\224\327\225\327\220 \327\220\327\236\327\250 \"it is a car!x\" \327\225\327\220\327\226 \327\250\327\245", .visual: "\327\245\327\250 \327\226\327\220\327\225 \"it is a car!x\" \327\250\327\236\327\220 \327\220\327\225\327\224", .basicDir: QChar::DirR },
50 { .name: "data14", .logical: "-2 \327\236\327\242\327\234\327\225\327\252 \327\226\327\224 \327\247\327\250", .visual: "\327\250\327\247 \327\224\327\226 \327\252\327\225\327\234\327\242\327\236 2-", .basicDir: QChar::DirR },
51 { .name: "data15", .logical: "-10% \327\251\327\231\327\240\327\225\327\231", .visual: "\327\231\327\225\327\240\327\231\327\251 10%-", .basicDir: QChar::DirR },
52 { .name: "data16", .logical: "\327\224\327\230\327\225\327\225\327\227 \327\224\327\231\327\240\327\225 2.5..5", .visual: "5..2.5 \327\225\327\240\327\231\327\224 \327\227\327\225\327\225\327\230\327\224", .basicDir: QChar::DirR },
53 { .name: "data17", .logical: "he said \"\327\226\327\225 \327\236\327\233\327\225\327\240\327\231\327\252!\"", .visual: "he said \"\327\252\327\231\327\240\327\225\327\233\327\236 \327\225\327\226!\"", .basicDir: QChar::DirL },
54 { .name: "data18", .logical: "he said \"\327\226\327\225 \327\236\327\233\327\225\327\240\327\231\327\252!\327\251\"", .visual: "he said \"\327\251!\327\252\327\231\327\240\327\225\327\233\327\236 \327\225\327\226\"", .basicDir: QChar::DirL },
55 { .name: "data19", .logical: "(\327\240\327\231\327\241\327\225\327\231) abc", .visual: "abc (\327\231\327\225\327\241\327\231\327\240)", .basicDir: QChar::DirR },
56 { .name: "data20", .logical: "abc (\327\240\327\231\327\241\327\225\327\231)", .visual: "abc (\327\231\327\225\327\241\327\231\327\240)", .basicDir: QChar::DirL },
57 { .name: "data21", .logical: "\327\240\327\231\327\241\327\225\327\231 23 \327\231\327\227\327\231\327\223 abc", .visual: "abc \327\223\327\231\327\227\327\231 23 \327\231\327\225\327\241\327\231\327\240", .basicDir: QChar::DirR },
58 { .name: "data22", .logical: "#@$ \327\240\327\231\327\241\327\225\327\231", .visual: "\327\231\327\225\327\241\327\231\327\240 $@#", .basicDir: QChar::DirR },
59 { .name: "data23", .logical: "\327\240\327\231\327\241\327\225\327\231 ~~~23%%% \327\231\327\227\327\231\327\223 abc ", .visual: " abc \327\223\327\231\327\227\327\231 23%%%~~~ \327\231\327\225\327\241\327\231\327\240", .basicDir: QChar::DirR },
60 { .name: "data24", .logical: "\327\240\327\231\327\241\327\225\327\231 abc ~~~23%%% \327\231\327\227\327\231\327\223 abc", .visual: "abc \327\223\327\231\327\227\327\231 abc ~~~23%%% \327\231\327\225\327\241\327\231\327\240", .basicDir: QChar::DirR },
61 { .name: "data25", .logical: "\327\240\327\231\327\241\327\225\327\231 abc@23@cde \327\231\327\227\327\231\327\223", .visual: "\327\223\327\231\327\227\327\231 abc@23@cde \327\231\327\225\327\241\327\231\327\240", .basicDir: QChar::DirR },
62 { .name: "data26", .logical: "\327\240\327\231\327\241\327\225\327\231 abc 23 cde \327\231\327\227\327\231\327\223", .visual: "\327\223\327\231\327\227\327\231 abc 23 cde \327\231\327\225\327\241\327\231\327\240", .basicDir: QChar::DirR },
63 { .name: "data27", .logical: "\327\240\327\231\327\241\327\225\327\231 abc 23 \327\231\327\227\327\231\327\223 cde", .visual: "cde \327\223\327\231\327\227\327\231 abc 23 \327\231\327\225\327\241\327\231\327\240", .basicDir: QChar::DirR },
64 { .name: "data28", .logical: "\327\222a 2 \327\251", .visual: "\327\251 a 2\327\222", .basicDir: QChar::DirR },
65 { .name: "data29", .logical: "\327\244\327\252\327\225\327\250 1*5 1-5 1/5 1+5", .visual: "1+5 1/5 1-5 5*1 \327\250\327\225\327\252\327\244", .basicDir: QChar::DirR },
66 { .name: "data30", .logical: "\330\272 1*5 1-5 1/5 1+5", .visual: "5+1 1/5 5-1 5*1 \330\272", .basicDir: QChar::DirR },
67 { .name: "data31", .logical: "\330\250 \333\261\333\262.\333\263", .visual: "\333\261\333\262.\333\263 \330\250", .basicDir: QChar::DirR },
68 { .name: "data32", .logical: "\330\250 12.3", .visual: "12.3 \330\250", .basicDir: QChar::DirR },
69 { .name: "data33", .logical: "\330\250 1.23", .visual: "1.23 \330\250", .basicDir: QChar::DirR },
70 { .name: "data34", .logical: "\331\276 \333\261.\333\262\333\263", .visual: "\333\261.\333\262\333\263 \331\276", .basicDir: QChar::DirR },
71 { .name: "data35", .logical: "\331\276\333\261.\333\262\333\263", .visual: "\333\261.\333\262\333\263\331\276", .basicDir: QChar::DirR },
72 { .name: "data36", .logical: "1) \327\251", .visual: "\327\251 (1", .basicDir: QChar::DirR },
73 { .name: "data37", .logical: "1) \327\251", .visual: "1) \327\251", .basicDir: QChar::DirL },
74 { .name: "data38", .logical: "\327\224-w3c", .visual: "w3c-\327\224", .basicDir: QChar::DirR },
75 { .name: "data39", .logical: "\327\224-w3c", .visual: "\327\224-w3c", .basicDir: QChar::DirL },
76 { .name: "data40", .logical: "17:25, foo", .visual: "17:25, foo", .basicDir: QChar::DirL },
77 { .name: "data41", .logical: "5, foo", .visual: "foo ,5", .basicDir: QChar::DirR },
78 { .name: "data42", .logical: "foo\nfoo", .visual: "foo\nfoo", .basicDir: QChar::DirL },
79 { .name: "data43", .logical: "\327\251\327\234\327\225\327\235\n\327\251\327\234\327\225\327\235", .visual: "\327\235\327\225\327\234\327\251\n\327\235\327\225\327\234\327\251", .basicDir: QChar::DirR },
80 { .name: "data44", .logical: "foo\n\327\251\327\234\327\225\327\235", .visual: "foo\n\327\235\327\225\327\234\327\251", .basicDir: QChar::DirL },
81 { .name: "data45", .logical: "\327\251\327\234\327\225\327\235\nfoo", .visual: "foo\n\327\235\327\225\327\234\327\251", .basicDir: QChar::DirR },
82 { .name: "data46", .logical: "\330\250 1.23 \330\250", .visual: "\330\250 1.23 \330\250", .basicDir: QChar::DirR },
83 { .name: "data47", .logical: "\331\204\330\250 1.23 \331\202\330\250", .visual: "\330\250\331\202 1.23 \330\250\331\204", .basicDir: QChar::DirR },
84 { .name: "data48", .logical: "\330\250 1.2 \330\250", .visual: "\330\250 1.2 \330\250", .basicDir: QChar::DirR },
85 { .name: "data49", .logical: "\331\204\330\250 1.2 \331\202\330\250", .visual: "\330\250\331\202 1.2 \330\250\331\204", .basicDir: QChar::DirR },
86 { .name: "data50", .logical: "a\331\204\330\250 1.2 \331\202\330\250", .visual: "a\330\250\331\202 1.2 \330\250\331\204", .basicDir: QChar::DirL },
87
88 { .name: "data51", .logical: "ab(\327\240\327\231)cd", .visual: "ab(\327\231\327\240)cd", .basicDir: QChar::DirL },
89 { .name: "data52", .logical: "ab(\327\240\327\231)cd", .visual: "cd(\327\231\327\240)ab", .basicDir: QChar::DirR },
90 { .name: "data53", .logical: "a(\327\231)c", .visual: "a(\327\231)c", .basicDir: QChar::DirL },
91 { .name: "data54", .logical: "a(\327\231)c", .visual: "c(\327\231)a", .basicDir: QChar::DirR },
92 { .name: "data55", .logical: "\"[\327\220]\"", .visual: "\"[\327\220]\"", .basicDir: QChar::DirR },
93 { .name: "data56", .logical: "\"[\327\220]\"", .visual: "\"[\327\220]\"", .basicDir: QChar::DirL },
94 { .name: "data57", .logical: "\331\204\330\250 \331\202\330\250", .visual: "\330\250\331\202 \330\250\331\204", .basicDir: QChar::DirR },
95 { .name: "data58", .logical: "\331\204\330\250 \331\202\330\250", .visual: "\330\250\331\202 \330\250\331\204", .basicDir: QChar::DirL },
96 { .name: "data59", .logical: "3layout", .visual: "3layout", .basicDir: QChar::DirL },
97 { .name: "data60", .logical: "3layout", .visual: "3layout", .basicDir: QChar::DirR },
98 { .name: "data61", .logical: "3l", .visual: "3l", .basicDir: QChar::DirR },
99 { .name: "data62", .logical: "3la", .visual: "3la", .basicDir: QChar::DirR },
100 { .name: "data63", .logical: "3lay", .visual: "3lay", .basicDir: QChar::DirR },
101
102// explicit levels
103// LRE: \342\200\252
104// RLE: \342\200\253
105// PDF: \342\200\254
106// LRO: \342\200\255
107// RLO: \342\200\256
108
109 { .name: "override1", .logical: "\342\200\256hello\342\200\254", .visual: "\342\200\256olleh\342\200\254", .basicDir: QChar::DirL },
110 { .name: "override2", .logical: "\342\200\255hello\342\200\254", .visual: "\342\200\255hello\342\200\254", .basicDir: QChar::DirL },
111 { .name: "override3", .logical: "\342\200\255\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\255\327\251\327\234\327\225\327\235\342\200\254", .basicDir: QChar::DirL },
112 { .name: "override4", .logical: "\342\200\256\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\256\327\235\327\225\327\234\327\251\342\200\254", .basicDir: QChar::DirL },
113 { .name: "override5", .logical: "\342\200\256hello\342\200\254", .visual: "\342\200\254olleh\342\200\256", .basicDir: QChar::DirR },
114 { .name: "override6", .logical: "\342\200\255hello\342\200\254", .visual: "\342\200\254hello\342\200\255", .basicDir: QChar::DirR },
115 { .name: "override7", .logical: "\342\200\255\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\254\327\251\327\234\327\225\327\235\342\200\255", .basicDir: QChar::DirR },
116 { .name: "override8", .logical: "\342\200\256\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\254\327\235\327\225\327\234\327\251\342\200\256", .basicDir: QChar::DirR },
117
118 { .name: "override9", .logical: "\327\224\342\200\255\327\251\327\234\342\200\256hello\342\200\254\327\225\327\235\342\200\254",
119 .visual: "\327\251\327\234\342\200\256olleh\342\200\254\327\225\327\235\342\200\255\327\224\342\200\254", .basicDir: QChar::DirL },
120 { .name: "override10", .logical: "\327\224\342\200\255\327\251\327\234\342\200\256hello\342\200\254\327\225\327\235\342\200\254",
121 .visual: "\342\200\254\327\251\327\234\342\200\256olleh\342\200\254\327\225\327\235\342\200\255\327\224", .basicDir: QChar::DirR },
122
123
124 { .name: "embed1", .logical: "\342\200\252hello\342\200\254", .visual: "\342\200\252hello\342\200\254", .basicDir: QChar::DirL },
125 { .name: "embed2", .logical: "\342\200\253hello\342\200\254", .visual: "\342\200\253hello\342\200\254", .basicDir: QChar::DirL },
126 { .name: "embed3", .logical: "\342\200\252hello\342\200\254", .visual: "\342\200\254hello\342\200\252", .basicDir: QChar::DirR },
127 { .name: "embed4", .logical: "\342\200\253hello\342\200\254", .visual: "\342\200\254hello\342\200\253", .basicDir: QChar::DirR },
128 { .name: "embed5", .logical: "\342\200\252\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\252\327\235\327\225\327\234\327\251\342\200\254", .basicDir: QChar::DirL },
129 { .name: "embed6", .logical: "\342\200\253\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\253\327\235\327\225\327\234\327\251\342\200\254", .basicDir: QChar::DirL },
130 { .name: "embed7", .logical: "\342\200\252\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\254\327\235\327\225\327\234\327\251\342\200\252", .basicDir: QChar::DirR },
131 { .name: "embed8", .logical: "\342\200\253\327\251\327\234\327\225\327\235\342\200\254", .visual: "\342\200\254\327\235\327\225\327\234\327\251\342\200\253", .basicDir: QChar::DirR },
132
133 { .name: "embed9", .logical: "\342\200\252x \327\251\327\234\327\225\327\235 y\342\200\254", .visual: "\342\200\252x \327\235\327\225\327\234\327\251 y\342\200\254", .basicDir: QChar::DirL },
134 { .name: "embed10", .logical: "\342\200\253x \327\251\327\234\327\225\327\235 y\342\200\254", .visual: "\342\200\253y \327\235\327\225\327\234\327\251 x\342\200\254", .basicDir: QChar::DirL },
135 { .name: "embed11", .logical: "\342\200\252x \327\251\327\234\327\225\327\235 y\342\200\254", .visual: "\342\200\254x \327\235\327\225\327\234\327\251 y\342\200\252", .basicDir: QChar::DirR },
136 { .name: "embed12", .logical: "\342\200\253x \327\251\327\234\327\225\327\235 y\342\200\254", .visual: "\342\200\254y \327\235\327\225\327\234\327\251 x\342\200\253", .basicDir: QChar::DirR },
137 { .name: "zwsp", .logical: "+0\342\200\213f-1", .visual: "+0\342\200\213f-1", .basicDir: QChar::DirL },
138
139// Alef: \xD7\x90
140
141 { .name: "bracketpair_1_ltr", .logical: "\xD7\x90(\xD7\x90[&a]!)a", .visual: "\xD7\x90(\xD7\x90[&a]!)a", .basicDir: QChar::DirL },
142 { .name: "bracketpair_1_rtl", .logical: "\xD7\x90(\xD7\x90[&a]!)a", .visual: "a(![a&]\xD7\x90)\xD7\x90", .basicDir: QChar::DirR },
143
144 { .name: "bracketpair_2_ltr", .logical: "a(\xD7\x90[&a]!)\xD7\x90", .visual: "a(\xD7\x90[&a]!)\xD7\x90", .basicDir: QChar::DirL },
145 { .name: "bracketpair_2_rtl", .logical: "a(\xD7\x90[&a]!)\xD7\x90", .visual: "\xD7\x90(![a&]\xD7\x90)a", .basicDir: QChar::DirR },
146
147 { .name: "bracketpair_3_ltr", .logical: "\xD7\x90(a[&\xD7\x90]!)a", .visual: "\xD7\x90(a[&\xD7\x90]!)a", .basicDir: QChar::DirL },
148 { .name: "bracketpair_3_rtl", .logical: "\xD7\x90(a[&\xD7\x90]!)a", .visual: "a(![\xD7\x90&]a)\xD7\x90", .basicDir: QChar::DirR },
149
150 { .name: "bracketpair_4_ltr", .logical: "a (a \xD7\x90) \xD7\x90", .visual: "a (a \xD7\x90) \xD7\x90", .basicDir: QChar::DirL },
151 { .name: "bracketpair_4_rtl", .logical: "a (a \xD7\x90) \xD7\x90", .visual: "\xD7\x90 (\xD7\x90 a) a", .basicDir: QChar::DirR },
152
153 { .name: "bracketpair_5_ltr", .logical: "\xD7\x90 (a \xD7\x90) a", .visual: "\xD7\x90 (a \xD7\x90) a", .basicDir: QChar::DirL },
154 { .name: "bracketpair_5_rtl", .logical: "\xD7\x90 (a \xD7\x90) a", .visual: "a (\xD7\x90 a) \xD7\x90", .basicDir: QChar::DirR },
155
156 { .name: "bracketpair_6_ltr", .logical: "a (\xD7\x90 a) \xD7\x90", .visual: "a (\xD7\x90 a) \xD7\x90", .basicDir: QChar::DirL },
157 { .name: "bracketpair_6_rtl", .logical: "a (\xD7\x90 a) \xD7\x90", .visual: "\xD7\x90 (a \xD7\x90) a", .basicDir: QChar::DirR },
158
159 { .name: "bracketpair_7_ltr", .logical: "\xD7\x90\xD7\x90 book(s)", .visual: "\xD7\x90\xD7\x90 book(s)", .basicDir: QChar::DirL },
160 { .name: "bracketpair_7_rtl", .logical: "\xD7\x90\xD7\x90 book(s)", .visual: "book(s) \xD7\x90\xD7\x90", .basicDir: QChar::DirR },
161
162 { .name: "bracketpair_8_ltr", .logical: "a \xD7\x90\xD7\x90(\xD7\x90)", .visual: "a (\xD7\x90)\xD7\x90\xD7\x90", .basicDir: QChar::DirL },
163 { .name: "bracketpair_8_rtl", .logical: "a \xD7\x90\xD7\x90(\xD7\x90)", .visual: "(\xD7\x90)\xD7\x90\xD7\x90 a", .basicDir: QChar::DirR },
164
165
166 { .name: 0, .logical: 0, .visual: 0, .basicDir: QChar::DirON }
167};
168

source code of qtbase/tests/auto/other/qcomplextext/bidireorderstring.h