|
1 /* This Source Code Form is subject to the terms of the Mozilla Public |
|
2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
|
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
|
4 |
|
5 #ifndef utfstrings_h__ |
|
6 #define utfstrings_h__ |
|
7 |
|
8 struct UTFStringsStringPair |
|
9 { |
|
10 char16_t m16[16]; |
|
11 char m8[16]; |
|
12 }; |
|
13 |
|
14 static const UTFStringsStringPair ValidStrings[] = |
|
15 { |
|
16 { { 'a', 'b', 'c', 'd' }, |
|
17 { 'a', 'b', 'c', 'd' } }, |
|
18 { { '1', '2', '3', '4' }, |
|
19 { '1', '2', '3', '4' } }, |
|
20 { { 0x7F, 'A', 0x80, 'B', 0x101, 0x200 }, |
|
21 { 0x7F, 'A', 0xC2, 0x80, 'B', 0xC4, 0x81, 0xC8, 0x80 } }, |
|
22 { { 0x7FF, 0x800, 0x1000 }, |
|
23 { 0xDF, 0xBF, 0xE0, 0xA0, 0x80, 0xE1, 0x80, 0x80 } }, |
|
24 { { 0xD7FF, 0xE000, 0xF00F, 'A', 0xFFF0 }, |
|
25 { 0xED, 0x9F, 0xBF, 0xEE, 0x80, 0x80, 0xEF, 0x80, 0x8F, 'A', 0xEF, 0xBF, 0xB0 } }, |
|
26 { { 0xFFF7, 0xFFFC, 0xFFFD, 0xFFFD }, |
|
27 { 0xEF, 0xBF, 0xB7, 0xEF, 0xBF, 0xBC, 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD } }, |
|
28 { { 0xD800, 0xDC00, 0xD800, 0xDCFF }, |
|
29 { 0xF0, 0x90, 0x80, 0x80, 0xF0, 0x90, 0x83, 0xBF } }, |
|
30 { { 0xDBFF, 0xDFFF, 0xDBB7, 0xDCBA }, |
|
31 { 0xF4, 0x8F, 0xBF, 0xBF, 0xF3, 0xBD, 0xB2, 0xBA } }, |
|
32 { { 0xFFFD, 0xFFFF }, |
|
33 { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBF } }, |
|
34 { { 0xFFFD, 0xFFFE, 0xFFFF }, |
|
35 { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBE, 0xEF, 0xBF, 0xBF } }, |
|
36 }; |
|
37 |
|
38 static const UTFStringsStringPair Invalid16Strings[] = |
|
39 { |
|
40 { { 'a', 'b', 0xD800 }, |
|
41 { 'a', 'b', 0xEF, 0xBF, 0xBD } }, |
|
42 { { 0xD8FF, 'b' }, |
|
43 { 0xEF, 0xBF, 0xBD, 'b' } }, |
|
44 { { 0xD821 }, |
|
45 { 0xEF, 0xBF, 0xBD } }, |
|
46 { { 0xDC21 }, |
|
47 { 0xEF, 0xBF, 0xBD } }, |
|
48 { { 0xDC00, 0xD800, 'b' }, |
|
49 { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD, 'b' } }, |
|
50 { { 'b', 0xDC00, 0xD800 }, |
|
51 { 'b', 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD } }, |
|
52 { { 0xDC00, 0xD800 }, |
|
53 { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD } }, |
|
54 { { 0xDC00, 0xD800, 0xDC00, 0xD800 }, |
|
55 { 0xEF, 0xBF, 0xBD, 0xF0, 0x90, 0x80, 0x80, 0xEF, 0xBF, 0xBD } }, |
|
56 { { 0xDC00, 0xD800, 0xD800, 0xDC00 }, |
|
57 { 0xEF, 0xBF, 0xBD, 0xEF, 0xBF, 0xBD, 0xF0, 0x90, 0x80, 0x80 } }, |
|
58 }; |
|
59 |
|
60 static const UTFStringsStringPair Invalid8Strings[] = |
|
61 { |
|
62 { { 'a', 0xFFFD, 'b' }, |
|
63 { 'a', 0xC0, 0x80, 'b' } }, |
|
64 { { 0xFFFD, 0x80 }, |
|
65 { 0xC1, 0xBF, 0xC2, 0x80 } }, |
|
66 { { 0xFFFD }, |
|
67 { 0xC1, 0xBF } }, |
|
68 { { 0xFFFD, 'x', 0x0800 }, |
|
69 { 0xE0, 0x80, 0x80, 'x', 0xE0, 0xA0, 0x80 } }, |
|
70 { { 0xFFFD, 'x', 0xFFFD }, |
|
71 { 0xF0, 0x80, 0x80, 0x80, 'x', 0xF0, 0x80, 0x8F, 0x80 } }, |
|
72 { { 0xFFFD, 0xFFFD }, |
|
73 { 0xF4, 0x90, 0x80, 0x80, 0xF7, 0xBF, 0xBF, 0xBF } }, |
|
74 { { 0xFFFD, 'x', 0xD800, 0xDC00, 0xFFFD }, |
|
75 { 0xF0, 0x8F, 0xBF, 0xBF, 'x', 0xF0, 0x90, 0x80, 0x80, 0xF0, 0x8F, 0xBF, 0xBF } }, |
|
76 { { 0xFFFD, 'x', 0xFFFD }, |
|
77 { 0xF8, 0x80, 0x80, 0x80, 0x80, 'x', 0xF8, 0x88, 0x80, 0x80, 0x80 } }, |
|
78 { { 0xFFFD, 0xFFFD }, |
|
79 { 0xFB, 0xBF, 0xBF, 0xBF, 0xBF, 0xFC, 0xA0, 0x80, 0x80, 0x80, 0x80 } }, |
|
80 { { 0xFFFD, 0xFFFD }, |
|
81 { 0xFC, 0x80, 0x80, 0x80, 0x80, 0x80, 0xFD, 0xBF, 0xBF, 0xBF, 0xBF, 0xBF } }, |
|
82 }; |
|
83 |
|
84 // Don't use this array in debug builds as that intentionally asserts. |
|
85 #ifndef DEBUG |
|
86 static const char Malformed8Strings[][16] = |
|
87 { |
|
88 { 0x80 }, |
|
89 { 'a', 0xC8, 'c' }, |
|
90 { 'a', 0xC0 }, |
|
91 { 'a', 0xE8, 'c' }, |
|
92 { 'a', 0xE8, 0x80, 'c' }, |
|
93 { 'a', 0xE8, 0x80 }, |
|
94 { 0xE8, 0x7F, 0x80 }, |
|
95 { 'a', 0xE8, 0xE8, 0x80 }, |
|
96 { 'a', 0xF4 }, |
|
97 { 'a', 0xF4, 0x80, 0x80, 'c', 'c' }, |
|
98 { 'a', 0xF4, 0x80, 'x', 0x80 }, |
|
99 { 0xF4, 0x80, 0x80, 0x80, 0x80 }, |
|
100 { 'a', 0xFA, 'c' }, |
|
101 { 'a', 0xFA, 0x80, 0x80, 0x7F, 0x80, 'c' }, |
|
102 { 'a', 0xFA, 0x80, 0x80, 0x80, 0x80, 0x80, 'c' }, |
|
103 { 'a', 0xFD }, |
|
104 { 'a', 0xFD, 0x80, 0x80, 0x80, 0x80, 'c' }, |
|
105 { 'a', 0xFD, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80 }, |
|
106 { 'a', 0xFC, 0x80, 0x80, 0x40, 0x80, 0x80, 'c' }, |
|
107 }; |
|
108 #endif |
|
109 |
|
110 #endif |