authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2022-02-18 16:49:10 -08:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2022-02-18 16:49:10 -08:00
log42386e972198e09028c0b2135de5244448b240ff
tree8a9f4df51b93c41693ede469a90c115b5952a09f
parent174c8ae1eb8dd88d380282b9749f0a3cffd19b70

add BidiMirroring, fixes #4


4 files changed, 469 insertions(+), 0 deletions(-)

generate.zig+1
...@@ -4,6 +4,7 @@ const files = [_]type{...@@ -4,6 +4,7 @@ const files = [_]type{
4 @import("./scripts/blocks.zig"),4 @import("./scripts/blocks.zig"),
5 @import("./scripts/arabic_shaping.zig"),5 @import("./scripts/arabic_shaping.zig"),
6 @import("./scripts/bidi_brackets.zig"),6 @import("./scripts/bidi_brackets.zig"),
7 @import("./scripts/BidiMirroring.zig"),
7};8};
89
9pub fn main() !void {10pub fn main() !void {
scripts/BidiMirroring.zig created+34
...@@ -0,0 +1,34 @@
1const std = @import("std");
2const common = @import("./_common.zig");
3
4pub usingnamespace common.Main(struct {
5 pub const source_url = "https://unicode.org/Public/" ++ common.version ++ "/ucd/BidiMirroring.txt";
6
7 pub const dest_file = "src/bidi_mirroring.zig";
8
9 pub const dest_header =
10 \\pub const Mirroring = struct {
11 \\ codepoint: u21,
12 \\ mirror: u21,
13 \\};
14 \\
15 \\pub const data = [_]Mirroring{
16 \\
17 ;
18
19 pub const dest_footer =
20 \\};
21 \\
22 ;
23
24 pub fn exec(alloc: std.mem.Allocator, line: []const u8, writer: anytype) !bool {
25 _ = alloc;
26 var it = std.mem.tokenize(u8, line, "; #");
27 const c = it.next().?;
28 const m = it.next().?;
29 const t = it.rest();
30
31 try writer.print(" .{{ .codepoint = 0x{s}, .mirror = 0x{s} }}, // {s}\n", .{ c, m, t });
32 return true;
33 }
34});
src/bidi_mirroring.zig created+433
...@@ -0,0 +1,433 @@
1// This file is part of the Unicode Character Database
2// See http://www.unicode.org/reports/tr44/ for more information.
3//
4// Based on the source file: https://unicode.org/Public/13.0.0/ucd/BidiMirroring.txt
5//
6
7pub const Mirroring = struct {
8 codepoint: u21,
9 mirror: u21,
10};
11
12pub const data = [_]Mirroring{
13 .{ .codepoint = 0x0028, .mirror = 0x0029 }, // LEFT PARENTHESIS
14 .{ .codepoint = 0x0029, .mirror = 0x0028 }, // RIGHT PARENTHESIS
15 .{ .codepoint = 0x003C, .mirror = 0x003E }, // LESS-THAN SIGN
16 .{ .codepoint = 0x003E, .mirror = 0x003C }, // GREATER-THAN SIGN
17 .{ .codepoint = 0x005B, .mirror = 0x005D }, // LEFT SQUARE BRACKET
18 .{ .codepoint = 0x005D, .mirror = 0x005B }, // RIGHT SQUARE BRACKET
19 .{ .codepoint = 0x007B, .mirror = 0x007D }, // LEFT CURLY BRACKET
20 .{ .codepoint = 0x007D, .mirror = 0x007B }, // RIGHT CURLY BRACKET
21 .{ .codepoint = 0x00AB, .mirror = 0x00BB }, // LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
22 .{ .codepoint = 0x00BB, .mirror = 0x00AB }, // RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
23 .{ .codepoint = 0x0F3A, .mirror = 0x0F3B }, // TIBETAN MARK GUG RTAGS GYON
24 .{ .codepoint = 0x0F3B, .mirror = 0x0F3A }, // TIBETAN MARK GUG RTAGS GYAS
25 .{ .codepoint = 0x0F3C, .mirror = 0x0F3D }, // TIBETAN MARK ANG KHANG GYON
26 .{ .codepoint = 0x0F3D, .mirror = 0x0F3C }, // TIBETAN MARK ANG KHANG GYAS
27 .{ .codepoint = 0x169B, .mirror = 0x169C }, // OGHAM FEATHER MARK
28 .{ .codepoint = 0x169C, .mirror = 0x169B }, // OGHAM REVERSED FEATHER MARK
29 .{ .codepoint = 0x2039, .mirror = 0x203A }, // SINGLE LEFT-POINTING ANGLE QUOTATION MARK
30 .{ .codepoint = 0x203A, .mirror = 0x2039 }, // SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
31 .{ .codepoint = 0x2045, .mirror = 0x2046 }, // LEFT SQUARE BRACKET WITH QUILL
32 .{ .codepoint = 0x2046, .mirror = 0x2045 }, // RIGHT SQUARE BRACKET WITH QUILL
33 .{ .codepoint = 0x207D, .mirror = 0x207E }, // SUPERSCRIPT LEFT PARENTHESIS
34 .{ .codepoint = 0x207E, .mirror = 0x207D }, // SUPERSCRIPT RIGHT PARENTHESIS
35 .{ .codepoint = 0x208D, .mirror = 0x208E }, // SUBSCRIPT LEFT PARENTHESIS
36 .{ .codepoint = 0x208E, .mirror = 0x208D }, // SUBSCRIPT RIGHT PARENTHESIS
37 .{ .codepoint = 0x2208, .mirror = 0x220B }, // ELEMENT OF
38 .{ .codepoint = 0x2209, .mirror = 0x220C }, // NOT AN ELEMENT OF
39 .{ .codepoint = 0x220A, .mirror = 0x220D }, // SMALL ELEMENT OF
40 .{ .codepoint = 0x220B, .mirror = 0x2208 }, // CONTAINS AS MEMBER
41 .{ .codepoint = 0x220C, .mirror = 0x2209 }, // DOES NOT CONTAIN AS MEMBER
42 .{ .codepoint = 0x220D, .mirror = 0x220A }, // SMALL CONTAINS AS MEMBER
43 .{ .codepoint = 0x2215, .mirror = 0x29F5 }, // DIVISION SLASH
44 .{ .codepoint = 0x221F, .mirror = 0x2BFE }, // RIGHT ANGLE
45 .{ .codepoint = 0x2220, .mirror = 0x29A3 }, // ANGLE
46 .{ .codepoint = 0x2221, .mirror = 0x299B }, // MEASURED ANGLE
47 .{ .codepoint = 0x2222, .mirror = 0x29A0 }, // SPHERICAL ANGLE
48 .{ .codepoint = 0x2224, .mirror = 0x2AEE }, // DOES NOT DIVIDE
49 .{ .codepoint = 0x223C, .mirror = 0x223D }, // TILDE OPERATOR
50 .{ .codepoint = 0x223D, .mirror = 0x223C }, // REVERSED TILDE
51 .{ .codepoint = 0x2243, .mirror = 0x22CD }, // ASYMPTOTICALLY EQUAL TO
52 .{ .codepoint = 0x2245, .mirror = 0x224C }, // APPROXIMATELY EQUAL TO
53 .{ .codepoint = 0x224C, .mirror = 0x2245 }, // ALL EQUAL TO
54 .{ .codepoint = 0x2252, .mirror = 0x2253 }, // APPROXIMATELY EQUAL TO OR THE IMAGE OF
55 .{ .codepoint = 0x2253, .mirror = 0x2252 }, // IMAGE OF OR APPROXIMATELY EQUAL TO
56 .{ .codepoint = 0x2254, .mirror = 0x2255 }, // COLON EQUALS
57 .{ .codepoint = 0x2255, .mirror = 0x2254 }, // EQUALS COLON
58 .{ .codepoint = 0x2264, .mirror = 0x2265 }, // LESS-THAN OR EQUAL TO
59 .{ .codepoint = 0x2265, .mirror = 0x2264 }, // GREATER-THAN OR EQUAL TO
60 .{ .codepoint = 0x2266, .mirror = 0x2267 }, // LESS-THAN OVER EQUAL TO
61 .{ .codepoint = 0x2267, .mirror = 0x2266 }, // GREATER-THAN OVER EQUAL TO
62 .{ .codepoint = 0x2268, .mirror = 0x2269 }, // [BEST FIT] LESS-THAN BUT NOT EQUAL TO
63 .{ .codepoint = 0x2269, .mirror = 0x2268 }, // [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
64 .{ .codepoint = 0x226A, .mirror = 0x226B }, // MUCH LESS-THAN
65 .{ .codepoint = 0x226B, .mirror = 0x226A }, // MUCH GREATER-THAN
66 .{ .codepoint = 0x226E, .mirror = 0x226F }, // [BEST FIT] NOT LESS-THAN
67 .{ .codepoint = 0x226F, .mirror = 0x226E }, // [BEST FIT] NOT GREATER-THAN
68 .{ .codepoint = 0x2270, .mirror = 0x2271 }, // [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
69 .{ .codepoint = 0x2271, .mirror = 0x2270 }, // [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
70 .{ .codepoint = 0x2272, .mirror = 0x2273 }, // [BEST FIT] LESS-THAN OR EQUIVALENT TO
71 .{ .codepoint = 0x2273, .mirror = 0x2272 }, // [BEST FIT] GREATER-THAN OR EQUIVALENT TO
72 .{ .codepoint = 0x2274, .mirror = 0x2275 }, // [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
73 .{ .codepoint = 0x2275, .mirror = 0x2274 }, // [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
74 .{ .codepoint = 0x2276, .mirror = 0x2277 }, // LESS-THAN OR GREATER-THAN
75 .{ .codepoint = 0x2277, .mirror = 0x2276 }, // GREATER-THAN OR LESS-THAN
76 .{ .codepoint = 0x2278, .mirror = 0x2279 }, // [BEST FIT] NEITHER LESS-THAN NOR GREATER-THAN
77 .{ .codepoint = 0x2279, .mirror = 0x2278 }, // [BEST FIT] NEITHER GREATER-THAN NOR LESS-THAN
78 .{ .codepoint = 0x227A, .mirror = 0x227B }, // PRECEDES
79 .{ .codepoint = 0x227B, .mirror = 0x227A }, // SUCCEEDS
80 .{ .codepoint = 0x227C, .mirror = 0x227D }, // PRECEDES OR EQUAL TO
81 .{ .codepoint = 0x227D, .mirror = 0x227C }, // SUCCEEDS OR EQUAL TO
82 .{ .codepoint = 0x227E, .mirror = 0x227F }, // [BEST FIT] PRECEDES OR EQUIVALENT TO
83 .{ .codepoint = 0x227F, .mirror = 0x227E }, // [BEST FIT] SUCCEEDS OR EQUIVALENT TO
84 .{ .codepoint = 0x2280, .mirror = 0x2281 }, // [BEST FIT] DOES NOT PRECEDE
85 .{ .codepoint = 0x2281, .mirror = 0x2280 }, // [BEST FIT] DOES NOT SUCCEED
86 .{ .codepoint = 0x2282, .mirror = 0x2283 }, // SUBSET OF
87 .{ .codepoint = 0x2283, .mirror = 0x2282 }, // SUPERSET OF
88 .{ .codepoint = 0x2284, .mirror = 0x2285 }, // [BEST FIT] NOT A SUBSET OF
89 .{ .codepoint = 0x2285, .mirror = 0x2284 }, // [BEST FIT] NOT A SUPERSET OF
90 .{ .codepoint = 0x2286, .mirror = 0x2287 }, // SUBSET OF OR EQUAL TO
91 .{ .codepoint = 0x2287, .mirror = 0x2286 }, // SUPERSET OF OR EQUAL TO
92 .{ .codepoint = 0x2288, .mirror = 0x2289 }, // [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
93 .{ .codepoint = 0x2289, .mirror = 0x2288 }, // [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
94 .{ .codepoint = 0x228A, .mirror = 0x228B }, // [BEST FIT] SUBSET OF WITH NOT EQUAL TO
95 .{ .codepoint = 0x228B, .mirror = 0x228A }, // [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
96 .{ .codepoint = 0x228F, .mirror = 0x2290 }, // SQUARE IMAGE OF
97 .{ .codepoint = 0x2290, .mirror = 0x228F }, // SQUARE ORIGINAL OF
98 .{ .codepoint = 0x2291, .mirror = 0x2292 }, // SQUARE IMAGE OF OR EQUAL TO
99 .{ .codepoint = 0x2292, .mirror = 0x2291 }, // SQUARE ORIGINAL OF OR EQUAL TO
100 .{ .codepoint = 0x2298, .mirror = 0x29B8 }, // CIRCLED DIVISION SLASH
101 .{ .codepoint = 0x22A2, .mirror = 0x22A3 }, // RIGHT TACK
102 .{ .codepoint = 0x22A3, .mirror = 0x22A2 }, // LEFT TACK
103 .{ .codepoint = 0x22A6, .mirror = 0x2ADE }, // ASSERTION
104 .{ .codepoint = 0x22A8, .mirror = 0x2AE4 }, // TRUE
105 .{ .codepoint = 0x22A9, .mirror = 0x2AE3 }, // FORCES
106 .{ .codepoint = 0x22AB, .mirror = 0x2AE5 }, // DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
107 .{ .codepoint = 0x22B0, .mirror = 0x22B1 }, // PRECEDES UNDER RELATION
108 .{ .codepoint = 0x22B1, .mirror = 0x22B0 }, // SUCCEEDS UNDER RELATION
109 .{ .codepoint = 0x22B2, .mirror = 0x22B3 }, // NORMAL SUBGROUP OF
110 .{ .codepoint = 0x22B3, .mirror = 0x22B2 }, // CONTAINS AS NORMAL SUBGROUP
111 .{ .codepoint = 0x22B4, .mirror = 0x22B5 }, // NORMAL SUBGROUP OF OR EQUAL TO
112 .{ .codepoint = 0x22B5, .mirror = 0x22B4 }, // CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
113 .{ .codepoint = 0x22B6, .mirror = 0x22B7 }, // ORIGINAL OF
114 .{ .codepoint = 0x22B7, .mirror = 0x22B6 }, // IMAGE OF
115 .{ .codepoint = 0x22B8, .mirror = 0x27DC }, // MULTIMAP
116 .{ .codepoint = 0x22C9, .mirror = 0x22CA }, // LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
117 .{ .codepoint = 0x22CA, .mirror = 0x22C9 }, // RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
118 .{ .codepoint = 0x22CB, .mirror = 0x22CC }, // LEFT SEMIDIRECT PRODUCT
119 .{ .codepoint = 0x22CC, .mirror = 0x22CB }, // RIGHT SEMIDIRECT PRODUCT
120 .{ .codepoint = 0x22CD, .mirror = 0x2243 }, // REVERSED TILDE EQUALS
121 .{ .codepoint = 0x22D0, .mirror = 0x22D1 }, // DOUBLE SUBSET
122 .{ .codepoint = 0x22D1, .mirror = 0x22D0 }, // DOUBLE SUPERSET
123 .{ .codepoint = 0x22D6, .mirror = 0x22D7 }, // LESS-THAN WITH DOT
124 .{ .codepoint = 0x22D7, .mirror = 0x22D6 }, // GREATER-THAN WITH DOT
125 .{ .codepoint = 0x22D8, .mirror = 0x22D9 }, // VERY MUCH LESS-THAN
126 .{ .codepoint = 0x22D9, .mirror = 0x22D8 }, // VERY MUCH GREATER-THAN
127 .{ .codepoint = 0x22DA, .mirror = 0x22DB }, // LESS-THAN EQUAL TO OR GREATER-THAN
128 .{ .codepoint = 0x22DB, .mirror = 0x22DA }, // GREATER-THAN EQUAL TO OR LESS-THAN
129 .{ .codepoint = 0x22DC, .mirror = 0x22DD }, // EQUAL TO OR LESS-THAN
130 .{ .codepoint = 0x22DD, .mirror = 0x22DC }, // EQUAL TO OR GREATER-THAN
131 .{ .codepoint = 0x22DE, .mirror = 0x22DF }, // EQUAL TO OR PRECEDES
132 .{ .codepoint = 0x22DF, .mirror = 0x22DE }, // EQUAL TO OR SUCCEEDS
133 .{ .codepoint = 0x22E0, .mirror = 0x22E1 }, // [BEST FIT] DOES NOT PRECEDE OR EQUAL
134 .{ .codepoint = 0x22E1, .mirror = 0x22E0 }, // [BEST FIT] DOES NOT SUCCEED OR EQUAL
135 .{ .codepoint = 0x22E2, .mirror = 0x22E3 }, // [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
136 .{ .codepoint = 0x22E3, .mirror = 0x22E2 }, // [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
137 .{ .codepoint = 0x22E4, .mirror = 0x22E5 }, // [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
138 .{ .codepoint = 0x22E5, .mirror = 0x22E4 }, // [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
139 .{ .codepoint = 0x22E6, .mirror = 0x22E7 }, // [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
140 .{ .codepoint = 0x22E7, .mirror = 0x22E6 }, // [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
141 .{ .codepoint = 0x22E8, .mirror = 0x22E9 }, // [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
142 .{ .codepoint = 0x22E9, .mirror = 0x22E8 }, // [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
143 .{ .codepoint = 0x22EA, .mirror = 0x22EB }, // [BEST FIT] NOT NORMAL SUBGROUP OF
144 .{ .codepoint = 0x22EB, .mirror = 0x22EA }, // [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
145 .{ .codepoint = 0x22EC, .mirror = 0x22ED }, // [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
146 .{ .codepoint = 0x22ED, .mirror = 0x22EC }, // [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
147 .{ .codepoint = 0x22F0, .mirror = 0x22F1 }, // UP RIGHT DIAGONAL ELLIPSIS
148 .{ .codepoint = 0x22F1, .mirror = 0x22F0 }, // DOWN RIGHT DIAGONAL ELLIPSIS
149 .{ .codepoint = 0x22F2, .mirror = 0x22FA }, // ELEMENT OF WITH LONG HORIZONTAL STROKE
150 .{ .codepoint = 0x22F3, .mirror = 0x22FB }, // ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
151 .{ .codepoint = 0x22F4, .mirror = 0x22FC }, // SMALL ELEMENT OF WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
152 .{ .codepoint = 0x22F6, .mirror = 0x22FD }, // ELEMENT OF WITH OVERBAR
153 .{ .codepoint = 0x22F7, .mirror = 0x22FE }, // SMALL ELEMENT OF WITH OVERBAR
154 .{ .codepoint = 0x22FA, .mirror = 0x22F2 }, // CONTAINS WITH LONG HORIZONTAL STROKE
155 .{ .codepoint = 0x22FB, .mirror = 0x22F3 }, // CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
156 .{ .codepoint = 0x22FC, .mirror = 0x22F4 }, // SMALL CONTAINS WITH VERTICAL BAR AT END OF HORIZONTAL STROKE
157 .{ .codepoint = 0x22FD, .mirror = 0x22F6 }, // CONTAINS WITH OVERBAR
158 .{ .codepoint = 0x22FE, .mirror = 0x22F7 }, // SMALL CONTAINS WITH OVERBAR
159 .{ .codepoint = 0x2308, .mirror = 0x2309 }, // LEFT CEILING
160 .{ .codepoint = 0x2309, .mirror = 0x2308 }, // RIGHT CEILING
161 .{ .codepoint = 0x230A, .mirror = 0x230B }, // LEFT FLOOR
162 .{ .codepoint = 0x230B, .mirror = 0x230A }, // RIGHT FLOOR
163 .{ .codepoint = 0x2329, .mirror = 0x232A }, // LEFT-POINTING ANGLE BRACKET
164 .{ .codepoint = 0x232A, .mirror = 0x2329 }, // RIGHT-POINTING ANGLE BRACKET
165 .{ .codepoint = 0x2768, .mirror = 0x2769 }, // MEDIUM LEFT PARENTHESIS ORNAMENT
166 .{ .codepoint = 0x2769, .mirror = 0x2768 }, // MEDIUM RIGHT PARENTHESIS ORNAMENT
167 .{ .codepoint = 0x276A, .mirror = 0x276B }, // MEDIUM FLATTENED LEFT PARENTHESIS ORNAMENT
168 .{ .codepoint = 0x276B, .mirror = 0x276A }, // MEDIUM FLATTENED RIGHT PARENTHESIS ORNAMENT
169 .{ .codepoint = 0x276C, .mirror = 0x276D }, // MEDIUM LEFT-POINTING ANGLE BRACKET ORNAMENT
170 .{ .codepoint = 0x276D, .mirror = 0x276C }, // MEDIUM RIGHT-POINTING ANGLE BRACKET ORNAMENT
171 .{ .codepoint = 0x276E, .mirror = 0x276F }, // HEAVY LEFT-POINTING ANGLE QUOTATION MARK ORNAMENT
172 .{ .codepoint = 0x276F, .mirror = 0x276E }, // HEAVY RIGHT-POINTING ANGLE QUOTATION MARK ORNAMENT
173 .{ .codepoint = 0x2770, .mirror = 0x2771 }, // HEAVY LEFT-POINTING ANGLE BRACKET ORNAMENT
174 .{ .codepoint = 0x2771, .mirror = 0x2770 }, // HEAVY RIGHT-POINTING ANGLE BRACKET ORNAMENT
175 .{ .codepoint = 0x2772, .mirror = 0x2773 }, // LIGHT LEFT TORTOISE SHELL BRACKET ORNAMENT
176 .{ .codepoint = 0x2773, .mirror = 0x2772 }, // LIGHT RIGHT TORTOISE SHELL BRACKET ORNAMENT
177 .{ .codepoint = 0x2774, .mirror = 0x2775 }, // MEDIUM LEFT CURLY BRACKET ORNAMENT
178 .{ .codepoint = 0x2775, .mirror = 0x2774 }, // MEDIUM RIGHT CURLY BRACKET ORNAMENT
179 .{ .codepoint = 0x27C3, .mirror = 0x27C4 }, // OPEN SUBSET
180 .{ .codepoint = 0x27C4, .mirror = 0x27C3 }, // OPEN SUPERSET
181 .{ .codepoint = 0x27C5, .mirror = 0x27C6 }, // LEFT S-SHAPED BAG DELIMITER
182 .{ .codepoint = 0x27C6, .mirror = 0x27C5 }, // RIGHT S-SHAPED BAG DELIMITER
183 .{ .codepoint = 0x27C8, .mirror = 0x27C9 }, // REVERSE SOLIDUS PRECEDING SUBSET
184 .{ .codepoint = 0x27C9, .mirror = 0x27C8 }, // SUPERSET PRECEDING SOLIDUS
185 .{ .codepoint = 0x27CB, .mirror = 0x27CD }, // MATHEMATICAL RISING DIAGONAL
186 .{ .codepoint = 0x27CD, .mirror = 0x27CB }, // MATHEMATICAL FALLING DIAGONAL
187 .{ .codepoint = 0x27D5, .mirror = 0x27D6 }, // LEFT OUTER JOIN
188 .{ .codepoint = 0x27D6, .mirror = 0x27D5 }, // RIGHT OUTER JOIN
189 .{ .codepoint = 0x27DC, .mirror = 0x22B8 }, // LEFT MULTIMAP
190 .{ .codepoint = 0x27DD, .mirror = 0x27DE }, // LONG RIGHT TACK
191 .{ .codepoint = 0x27DE, .mirror = 0x27DD }, // LONG LEFT TACK
192 .{ .codepoint = 0x27E2, .mirror = 0x27E3 }, // WHITE CONCAVE-SIDED DIAMOND WITH LEFTWARDS TICK
193 .{ .codepoint = 0x27E3, .mirror = 0x27E2 }, // WHITE CONCAVE-SIDED DIAMOND WITH RIGHTWARDS TICK
194 .{ .codepoint = 0x27E4, .mirror = 0x27E5 }, // WHITE SQUARE WITH LEFTWARDS TICK
195 .{ .codepoint = 0x27E5, .mirror = 0x27E4 }, // WHITE SQUARE WITH RIGHTWARDS TICK
196 .{ .codepoint = 0x27E6, .mirror = 0x27E7 }, // MATHEMATICAL LEFT WHITE SQUARE BRACKET
197 .{ .codepoint = 0x27E7, .mirror = 0x27E6 }, // MATHEMATICAL RIGHT WHITE SQUARE BRACKET
198 .{ .codepoint = 0x27E8, .mirror = 0x27E9 }, // MATHEMATICAL LEFT ANGLE BRACKET
199 .{ .codepoint = 0x27E9, .mirror = 0x27E8 }, // MATHEMATICAL RIGHT ANGLE BRACKET
200 .{ .codepoint = 0x27EA, .mirror = 0x27EB }, // MATHEMATICAL LEFT DOUBLE ANGLE BRACKET
201 .{ .codepoint = 0x27EB, .mirror = 0x27EA }, // MATHEMATICAL RIGHT DOUBLE ANGLE BRACKET
202 .{ .codepoint = 0x27EC, .mirror = 0x27ED }, // MATHEMATICAL LEFT WHITE TORTOISE SHELL BRACKET
203 .{ .codepoint = 0x27ED, .mirror = 0x27EC }, // MATHEMATICAL RIGHT WHITE TORTOISE SHELL BRACKET
204 .{ .codepoint = 0x27EE, .mirror = 0x27EF }, // MATHEMATICAL LEFT FLATTENED PARENTHESIS
205 .{ .codepoint = 0x27EF, .mirror = 0x27EE }, // MATHEMATICAL RIGHT FLATTENED PARENTHESIS
206 .{ .codepoint = 0x2983, .mirror = 0x2984 }, // LEFT WHITE CURLY BRACKET
207 .{ .codepoint = 0x2984, .mirror = 0x2983 }, // RIGHT WHITE CURLY BRACKET
208 .{ .codepoint = 0x2985, .mirror = 0x2986 }, // LEFT WHITE PARENTHESIS
209 .{ .codepoint = 0x2986, .mirror = 0x2985 }, // RIGHT WHITE PARENTHESIS
210 .{ .codepoint = 0x2987, .mirror = 0x2988 }, // Z NOTATION LEFT IMAGE BRACKET
211 .{ .codepoint = 0x2988, .mirror = 0x2987 }, // Z NOTATION RIGHT IMAGE BRACKET
212 .{ .codepoint = 0x2989, .mirror = 0x298A }, // Z NOTATION LEFT BINDING BRACKET
213 .{ .codepoint = 0x298A, .mirror = 0x2989 }, // Z NOTATION RIGHT BINDING BRACKET
214 .{ .codepoint = 0x298B, .mirror = 0x298C }, // LEFT SQUARE BRACKET WITH UNDERBAR
215 .{ .codepoint = 0x298C, .mirror = 0x298B }, // RIGHT SQUARE BRACKET WITH UNDERBAR
216 .{ .codepoint = 0x298D, .mirror = 0x2990 }, // LEFT SQUARE BRACKET WITH TICK IN TOP CORNER
217 .{ .codepoint = 0x298E, .mirror = 0x298F }, // RIGHT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
218 .{ .codepoint = 0x298F, .mirror = 0x298E }, // LEFT SQUARE BRACKET WITH TICK IN BOTTOM CORNER
219 .{ .codepoint = 0x2990, .mirror = 0x298D }, // RIGHT SQUARE BRACKET WITH TICK IN TOP CORNER
220 .{ .codepoint = 0x2991, .mirror = 0x2992 }, // LEFT ANGLE BRACKET WITH DOT
221 .{ .codepoint = 0x2992, .mirror = 0x2991 }, // RIGHT ANGLE BRACKET WITH DOT
222 .{ .codepoint = 0x2993, .mirror = 0x2994 }, // LEFT ARC LESS-THAN BRACKET
223 .{ .codepoint = 0x2994, .mirror = 0x2993 }, // RIGHT ARC GREATER-THAN BRACKET
224 .{ .codepoint = 0x2995, .mirror = 0x2996 }, // DOUBLE LEFT ARC GREATER-THAN BRACKET
225 .{ .codepoint = 0x2996, .mirror = 0x2995 }, // DOUBLE RIGHT ARC LESS-THAN BRACKET
226 .{ .codepoint = 0x2997, .mirror = 0x2998 }, // LEFT BLACK TORTOISE SHELL BRACKET
227 .{ .codepoint = 0x2998, .mirror = 0x2997 }, // RIGHT BLACK TORTOISE SHELL BRACKET
228 .{ .codepoint = 0x299B, .mirror = 0x2221 }, // MEASURED ANGLE OPENING LEFT
229 .{ .codepoint = 0x29A0, .mirror = 0x2222 }, // SPHERICAL ANGLE OPENING LEFT
230 .{ .codepoint = 0x29A3, .mirror = 0x2220 }, // REVERSED ANGLE
231 .{ .codepoint = 0x29A4, .mirror = 0x29A5 }, // ANGLE WITH UNDERBAR
232 .{ .codepoint = 0x29A5, .mirror = 0x29A4 }, // REVERSED ANGLE WITH UNDERBAR
233 .{ .codepoint = 0x29A8, .mirror = 0x29A9 }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND RIGHT
234 .{ .codepoint = 0x29A9, .mirror = 0x29A8 }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING UP AND LEFT
235 .{ .codepoint = 0x29AA, .mirror = 0x29AB }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND RIGHT
236 .{ .codepoint = 0x29AB, .mirror = 0x29AA }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING DOWN AND LEFT
237 .{ .codepoint = 0x29AC, .mirror = 0x29AD }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND UP
238 .{ .codepoint = 0x29AD, .mirror = 0x29AC }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND UP
239 .{ .codepoint = 0x29AE, .mirror = 0x29AF }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING RIGHT AND DOWN
240 .{ .codepoint = 0x29AF, .mirror = 0x29AE }, // MEASURED ANGLE WITH OPEN ARM ENDING IN ARROW POINTING LEFT AND DOWN
241 .{ .codepoint = 0x29B8, .mirror = 0x2298 }, // CIRCLED REVERSE SOLIDUS
242 .{ .codepoint = 0x29C0, .mirror = 0x29C1 }, // CIRCLED LESS-THAN
243 .{ .codepoint = 0x29C1, .mirror = 0x29C0 }, // CIRCLED GREATER-THAN
244 .{ .codepoint = 0x29C4, .mirror = 0x29C5 }, // SQUARED RISING DIAGONAL SLASH
245 .{ .codepoint = 0x29C5, .mirror = 0x29C4 }, // SQUARED FALLING DIAGONAL SLASH
246 .{ .codepoint = 0x29CF, .mirror = 0x29D0 }, // LEFT TRIANGLE BESIDE VERTICAL BAR
247 .{ .codepoint = 0x29D0, .mirror = 0x29CF }, // VERTICAL BAR BESIDE RIGHT TRIANGLE
248 .{ .codepoint = 0x29D1, .mirror = 0x29D2 }, // BOWTIE WITH LEFT HALF BLACK
249 .{ .codepoint = 0x29D2, .mirror = 0x29D1 }, // BOWTIE WITH RIGHT HALF BLACK
250 .{ .codepoint = 0x29D4, .mirror = 0x29D5 }, // TIMES WITH LEFT HALF BLACK
251 .{ .codepoint = 0x29D5, .mirror = 0x29D4 }, // TIMES WITH RIGHT HALF BLACK
252 .{ .codepoint = 0x29D8, .mirror = 0x29D9 }, // LEFT WIGGLY FENCE
253 .{ .codepoint = 0x29D9, .mirror = 0x29D8 }, // RIGHT WIGGLY FENCE
254 .{ .codepoint = 0x29DA, .mirror = 0x29DB }, // LEFT DOUBLE WIGGLY FENCE
255 .{ .codepoint = 0x29DB, .mirror = 0x29DA }, // RIGHT DOUBLE WIGGLY FENCE
256 .{ .codepoint = 0x29E8, .mirror = 0x29E9 }, // DOWN-POINTING TRIANGLE WITH LEFT HALF BLACK
257 .{ .codepoint = 0x29E9, .mirror = 0x29E8 }, // DOWN-POINTING TRIANGLE WITH RIGHT HALF BLACK
258 .{ .codepoint = 0x29F5, .mirror = 0x2215 }, // REVERSE SOLIDUS OPERATOR
259 .{ .codepoint = 0x29F8, .mirror = 0x29F9 }, // BIG SOLIDUS
260 .{ .codepoint = 0x29F9, .mirror = 0x29F8 }, // BIG REVERSE SOLIDUS
261 .{ .codepoint = 0x29FC, .mirror = 0x29FD }, // LEFT-POINTING CURVED ANGLE BRACKET
262 .{ .codepoint = 0x29FD, .mirror = 0x29FC }, // RIGHT-POINTING CURVED ANGLE BRACKET
263 .{ .codepoint = 0x2A2B, .mirror = 0x2A2C }, // MINUS SIGN WITH FALLING DOTS
264 .{ .codepoint = 0x2A2C, .mirror = 0x2A2B }, // MINUS SIGN WITH RISING DOTS
265 .{ .codepoint = 0x2A2D, .mirror = 0x2A2E }, // PLUS SIGN IN LEFT HALF CIRCLE
266 .{ .codepoint = 0x2A2E, .mirror = 0x2A2D }, // PLUS SIGN IN RIGHT HALF CIRCLE
267 .{ .codepoint = 0x2A34, .mirror = 0x2A35 }, // MULTIPLICATION SIGN IN LEFT HALF CIRCLE
268 .{ .codepoint = 0x2A35, .mirror = 0x2A34 }, // MULTIPLICATION SIGN IN RIGHT HALF CIRCLE
269 .{ .codepoint = 0x2A3C, .mirror = 0x2A3D }, // INTERIOR PRODUCT
270 .{ .codepoint = 0x2A3D, .mirror = 0x2A3C }, // RIGHTHAND INTERIOR PRODUCT
271 .{ .codepoint = 0x2A64, .mirror = 0x2A65 }, // Z NOTATION DOMAIN ANTIRESTRICTION
272 .{ .codepoint = 0x2A65, .mirror = 0x2A64 }, // Z NOTATION RANGE ANTIRESTRICTION
273 .{ .codepoint = 0x2A79, .mirror = 0x2A7A }, // LESS-THAN WITH CIRCLE INSIDE
274 .{ .codepoint = 0x2A7A, .mirror = 0x2A79 }, // GREATER-THAN WITH CIRCLE INSIDE
275 .{ .codepoint = 0x2A7B, .mirror = 0x2A7C }, // [BEST FIT] LESS-THAN WITH QUESTION MARK ABOVE
276 .{ .codepoint = 0x2A7C, .mirror = 0x2A7B }, // [BEST FIT] GREATER-THAN WITH QUESTION MARK ABOVE
277 .{ .codepoint = 0x2A7D, .mirror = 0x2A7E }, // LESS-THAN OR SLANTED EQUAL TO
278 .{ .codepoint = 0x2A7E, .mirror = 0x2A7D }, // GREATER-THAN OR SLANTED EQUAL TO
279 .{ .codepoint = 0x2A7F, .mirror = 0x2A80 }, // LESS-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
280 .{ .codepoint = 0x2A80, .mirror = 0x2A7F }, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT INSIDE
281 .{ .codepoint = 0x2A81, .mirror = 0x2A82 }, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
282 .{ .codepoint = 0x2A82, .mirror = 0x2A81 }, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE
283 .{ .codepoint = 0x2A83, .mirror = 0x2A84 }, // LESS-THAN OR SLANTED EQUAL TO WITH DOT ABOVE RIGHT
284 .{ .codepoint = 0x2A84, .mirror = 0x2A83 }, // GREATER-THAN OR SLANTED EQUAL TO WITH DOT ABOVE LEFT
285 .{ .codepoint = 0x2A85, .mirror = 0x2A86 }, // [BEST FIT] LESS-THAN OR APPROXIMATE
286 .{ .codepoint = 0x2A86, .mirror = 0x2A85 }, // [BEST FIT] GREATER-THAN OR APPROXIMATE
287 .{ .codepoint = 0x2A87, .mirror = 0x2A88 }, // [BEST FIT] LESS-THAN AND SINGLE-LINE NOT EQUAL TO
288 .{ .codepoint = 0x2A88, .mirror = 0x2A87 }, // [BEST FIT] GREATER-THAN AND SINGLE-LINE NOT EQUAL TO
289 .{ .codepoint = 0x2A89, .mirror = 0x2A8A }, // [BEST FIT] LESS-THAN AND NOT APPROXIMATE
290 .{ .codepoint = 0x2A8A, .mirror = 0x2A89 }, // [BEST FIT] GREATER-THAN AND NOT APPROXIMATE
291 .{ .codepoint = 0x2A8B, .mirror = 0x2A8C }, // LESS-THAN ABOVE DOUBLE-LINE EQUAL ABOVE GREATER-THAN
292 .{ .codepoint = 0x2A8C, .mirror = 0x2A8B }, // GREATER-THAN ABOVE DOUBLE-LINE EQUAL ABOVE LESS-THAN
293 .{ .codepoint = 0x2A8D, .mirror = 0x2A8E }, // [BEST FIT] LESS-THAN ABOVE SIMILAR OR EQUAL
294 .{ .codepoint = 0x2A8E, .mirror = 0x2A8D }, // [BEST FIT] GREATER-THAN ABOVE SIMILAR OR EQUAL
295 .{ .codepoint = 0x2A8F, .mirror = 0x2A90 }, // [BEST FIT] LESS-THAN ABOVE SIMILAR ABOVE GREATER-THAN
296 .{ .codepoint = 0x2A90, .mirror = 0x2A8F }, // [BEST FIT] GREATER-THAN ABOVE SIMILAR ABOVE LESS-THAN
297 .{ .codepoint = 0x2A91, .mirror = 0x2A92 }, // LESS-THAN ABOVE GREATER-THAN ABOVE DOUBLE-LINE EQUAL
298 .{ .codepoint = 0x2A92, .mirror = 0x2A91 }, // GREATER-THAN ABOVE LESS-THAN ABOVE DOUBLE-LINE EQUAL
299 .{ .codepoint = 0x2A93, .mirror = 0x2A94 }, // LESS-THAN ABOVE SLANTED EQUAL ABOVE GREATER-THAN ABOVE SLANTED EQUAL
300 .{ .codepoint = 0x2A94, .mirror = 0x2A93 }, // GREATER-THAN ABOVE SLANTED EQUAL ABOVE LESS-THAN ABOVE SLANTED EQUAL
301 .{ .codepoint = 0x2A95, .mirror = 0x2A96 }, // SLANTED EQUAL TO OR LESS-THAN
302 .{ .codepoint = 0x2A96, .mirror = 0x2A95 }, // SLANTED EQUAL TO OR GREATER-THAN
303 .{ .codepoint = 0x2A97, .mirror = 0x2A98 }, // SLANTED EQUAL TO OR LESS-THAN WITH DOT INSIDE
304 .{ .codepoint = 0x2A98, .mirror = 0x2A97 }, // SLANTED EQUAL TO OR GREATER-THAN WITH DOT INSIDE
305 .{ .codepoint = 0x2A99, .mirror = 0x2A9A }, // DOUBLE-LINE EQUAL TO OR LESS-THAN
306 .{ .codepoint = 0x2A9A, .mirror = 0x2A99 }, // DOUBLE-LINE EQUAL TO OR GREATER-THAN
307 .{ .codepoint = 0x2A9B, .mirror = 0x2A9C }, // DOUBLE-LINE SLANTED EQUAL TO OR LESS-THAN
308 .{ .codepoint = 0x2A9C, .mirror = 0x2A9B }, // DOUBLE-LINE SLANTED EQUAL TO OR GREATER-THAN
309 .{ .codepoint = 0x2A9D, .mirror = 0x2A9E }, // [BEST FIT] SIMILAR OR LESS-THAN
310 .{ .codepoint = 0x2A9E, .mirror = 0x2A9D }, // [BEST FIT] SIMILAR OR GREATER-THAN
311 .{ .codepoint = 0x2A9F, .mirror = 0x2AA0 }, // [BEST FIT] SIMILAR ABOVE LESS-THAN ABOVE EQUALS SIGN
312 .{ .codepoint = 0x2AA0, .mirror = 0x2A9F }, // [BEST FIT] SIMILAR ABOVE GREATER-THAN ABOVE EQUALS SIGN
313 .{ .codepoint = 0x2AA1, .mirror = 0x2AA2 }, // DOUBLE NESTED LESS-THAN
314 .{ .codepoint = 0x2AA2, .mirror = 0x2AA1 }, // DOUBLE NESTED GREATER-THAN
315 .{ .codepoint = 0x2AA6, .mirror = 0x2AA7 }, // LESS-THAN CLOSED BY CURVE
316 .{ .codepoint = 0x2AA7, .mirror = 0x2AA6 }, // GREATER-THAN CLOSED BY CURVE
317 .{ .codepoint = 0x2AA8, .mirror = 0x2AA9 }, // LESS-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
318 .{ .codepoint = 0x2AA9, .mirror = 0x2AA8 }, // GREATER-THAN CLOSED BY CURVE ABOVE SLANTED EQUAL
319 .{ .codepoint = 0x2AAA, .mirror = 0x2AAB }, // SMALLER THAN
320 .{ .codepoint = 0x2AAB, .mirror = 0x2AAA }, // LARGER THAN
321 .{ .codepoint = 0x2AAC, .mirror = 0x2AAD }, // SMALLER THAN OR EQUAL TO
322 .{ .codepoint = 0x2AAD, .mirror = 0x2AAC }, // LARGER THAN OR EQUAL TO
323 .{ .codepoint = 0x2AAF, .mirror = 0x2AB0 }, // PRECEDES ABOVE SINGLE-LINE EQUALS SIGN
324 .{ .codepoint = 0x2AB0, .mirror = 0x2AAF }, // SUCCEEDS ABOVE SINGLE-LINE EQUALS SIGN
325 .{ .codepoint = 0x2AB1, .mirror = 0x2AB2 }, // [BEST FIT] PRECEDES ABOVE SINGLE-LINE NOT EQUAL TO
326 .{ .codepoint = 0x2AB2, .mirror = 0x2AB1 }, // [BEST FIT] SUCCEEDS ABOVE SINGLE-LINE NOT EQUAL TO
327 .{ .codepoint = 0x2AB3, .mirror = 0x2AB4 }, // PRECEDES ABOVE EQUALS SIGN
328 .{ .codepoint = 0x2AB4, .mirror = 0x2AB3 }, // SUCCEEDS ABOVE EQUALS SIGN
329 .{ .codepoint = 0x2AB5, .mirror = 0x2AB6 }, // [BEST FIT] PRECEDES ABOVE NOT EQUAL TO
330 .{ .codepoint = 0x2AB6, .mirror = 0x2AB5 }, // [BEST FIT] SUCCEEDS ABOVE NOT EQUAL TO
331 .{ .codepoint = 0x2AB7, .mirror = 0x2AB8 }, // [BEST FIT] PRECEDES ABOVE ALMOST EQUAL TO
332 .{ .codepoint = 0x2AB8, .mirror = 0x2AB7 }, // [BEST FIT] SUCCEEDS ABOVE ALMOST EQUAL TO
333 .{ .codepoint = 0x2AB9, .mirror = 0x2ABA }, // [BEST FIT] PRECEDES ABOVE NOT ALMOST EQUAL TO
334 .{ .codepoint = 0x2ABA, .mirror = 0x2AB9 }, // [BEST FIT] SUCCEEDS ABOVE NOT ALMOST EQUAL TO
335 .{ .codepoint = 0x2ABB, .mirror = 0x2ABC }, // DOUBLE PRECEDES
336 .{ .codepoint = 0x2ABC, .mirror = 0x2ABB }, // DOUBLE SUCCEEDS
337 .{ .codepoint = 0x2ABD, .mirror = 0x2ABE }, // SUBSET WITH DOT
338 .{ .codepoint = 0x2ABE, .mirror = 0x2ABD }, // SUPERSET WITH DOT
339 .{ .codepoint = 0x2ABF, .mirror = 0x2AC0 }, // SUBSET WITH PLUS SIGN BELOW
340 .{ .codepoint = 0x2AC0, .mirror = 0x2ABF }, // SUPERSET WITH PLUS SIGN BELOW
341 .{ .codepoint = 0x2AC1, .mirror = 0x2AC2 }, // SUBSET WITH MULTIPLICATION SIGN BELOW
342 .{ .codepoint = 0x2AC2, .mirror = 0x2AC1 }, // SUPERSET WITH MULTIPLICATION SIGN BELOW
343 .{ .codepoint = 0x2AC3, .mirror = 0x2AC4 }, // SUBSET OF OR EQUAL TO WITH DOT ABOVE
344 .{ .codepoint = 0x2AC4, .mirror = 0x2AC3 }, // SUPERSET OF OR EQUAL TO WITH DOT ABOVE
345 .{ .codepoint = 0x2AC5, .mirror = 0x2AC6 }, // SUBSET OF ABOVE EQUALS SIGN
346 .{ .codepoint = 0x2AC6, .mirror = 0x2AC5 }, // SUPERSET OF ABOVE EQUALS SIGN
347 .{ .codepoint = 0x2AC7, .mirror = 0x2AC8 }, // [BEST FIT] SUBSET OF ABOVE TILDE OPERATOR
348 .{ .codepoint = 0x2AC8, .mirror = 0x2AC7 }, // [BEST FIT] SUPERSET OF ABOVE TILDE OPERATOR
349 .{ .codepoint = 0x2AC9, .mirror = 0x2ACA }, // [BEST FIT] SUBSET OF ABOVE ALMOST EQUAL TO
350 .{ .codepoint = 0x2ACA, .mirror = 0x2AC9 }, // [BEST FIT] SUPERSET OF ABOVE ALMOST EQUAL TO
351 .{ .codepoint = 0x2ACB, .mirror = 0x2ACC }, // [BEST FIT] SUBSET OF ABOVE NOT EQUAL TO
352 .{ .codepoint = 0x2ACC, .mirror = 0x2ACB }, // [BEST FIT] SUPERSET OF ABOVE NOT EQUAL TO
353 .{ .codepoint = 0x2ACD, .mirror = 0x2ACE }, // SQUARE LEFT OPEN BOX OPERATOR
354 .{ .codepoint = 0x2ACE, .mirror = 0x2ACD }, // SQUARE RIGHT OPEN BOX OPERATOR
355 .{ .codepoint = 0x2ACF, .mirror = 0x2AD0 }, // CLOSED SUBSET
356 .{ .codepoint = 0x2AD0, .mirror = 0x2ACF }, // CLOSED SUPERSET
357 .{ .codepoint = 0x2AD1, .mirror = 0x2AD2 }, // CLOSED SUBSET OR EQUAL TO
358 .{ .codepoint = 0x2AD2, .mirror = 0x2AD1 }, // CLOSED SUPERSET OR EQUAL TO
359 .{ .codepoint = 0x2AD3, .mirror = 0x2AD4 }, // SUBSET ABOVE SUPERSET
360 .{ .codepoint = 0x2AD4, .mirror = 0x2AD3 }, // SUPERSET ABOVE SUBSET
361 .{ .codepoint = 0x2AD5, .mirror = 0x2AD6 }, // SUBSET ABOVE SUBSET
362 .{ .codepoint = 0x2AD6, .mirror = 0x2AD5 }, // SUPERSET ABOVE SUPERSET
363 .{ .codepoint = 0x2ADE, .mirror = 0x22A6 }, // SHORT LEFT TACK
364 .{ .codepoint = 0x2AE3, .mirror = 0x22A9 }, // DOUBLE VERTICAL BAR LEFT TURNSTILE
365 .{ .codepoint = 0x2AE4, .mirror = 0x22A8 }, // VERTICAL BAR DOUBLE LEFT TURNSTILE
366 .{ .codepoint = 0x2AE5, .mirror = 0x22AB }, // DOUBLE VERTICAL BAR DOUBLE LEFT TURNSTILE
367 .{ .codepoint = 0x2AEC, .mirror = 0x2AED }, // DOUBLE STROKE NOT SIGN
368 .{ .codepoint = 0x2AED, .mirror = 0x2AEC }, // REVERSED DOUBLE STROKE NOT SIGN
369 .{ .codepoint = 0x2AEE, .mirror = 0x2224 }, // DOES NOT DIVIDE WITH REVERSED NEGATION SLASH
370 .{ .codepoint = 0x2AF7, .mirror = 0x2AF8 }, // TRIPLE NESTED LESS-THAN
371 .{ .codepoint = 0x2AF8, .mirror = 0x2AF7 }, // TRIPLE NESTED GREATER-THAN
372 .{ .codepoint = 0x2AF9, .mirror = 0x2AFA }, // DOUBLE-LINE SLANTED LESS-THAN OR EQUAL TO
373 .{ .codepoint = 0x2AFA, .mirror = 0x2AF9 }, // DOUBLE-LINE SLANTED GREATER-THAN OR EQUAL TO
374 .{ .codepoint = 0x2BFE, .mirror = 0x221F }, // REVERSED RIGHT ANGLE
375 .{ .codepoint = 0x2E02, .mirror = 0x2E03 }, // LEFT SUBSTITUTION BRACKET
376 .{ .codepoint = 0x2E03, .mirror = 0x2E02 }, // RIGHT SUBSTITUTION BRACKET
377 .{ .codepoint = 0x2E04, .mirror = 0x2E05 }, // LEFT DOTTED SUBSTITUTION BRACKET
378 .{ .codepoint = 0x2E05, .mirror = 0x2E04 }, // RIGHT DOTTED SUBSTITUTION BRACKET
379 .{ .codepoint = 0x2E09, .mirror = 0x2E0A }, // LEFT TRANSPOSITION BRACKET
380 .{ .codepoint = 0x2E0A, .mirror = 0x2E09 }, // RIGHT TRANSPOSITION BRACKET
381 .{ .codepoint = 0x2E0C, .mirror = 0x2E0D }, // LEFT RAISED OMISSION BRACKET
382 .{ .codepoint = 0x2E0D, .mirror = 0x2E0C }, // RIGHT RAISED OMISSION BRACKET
383 .{ .codepoint = 0x2E1C, .mirror = 0x2E1D }, // LEFT LOW PARAPHRASE BRACKET
384 .{ .codepoint = 0x2E1D, .mirror = 0x2E1C }, // RIGHT LOW PARAPHRASE BRACKET
385 .{ .codepoint = 0x2E20, .mirror = 0x2E21 }, // LEFT VERTICAL BAR WITH QUILL
386 .{ .codepoint = 0x2E21, .mirror = 0x2E20 }, // RIGHT VERTICAL BAR WITH QUILL
387 .{ .codepoint = 0x2E22, .mirror = 0x2E23 }, // TOP LEFT HALF BRACKET
388 .{ .codepoint = 0x2E23, .mirror = 0x2E22 }, // TOP RIGHT HALF BRACKET
389 .{ .codepoint = 0x2E24, .mirror = 0x2E25 }, // BOTTOM LEFT HALF BRACKET
390 .{ .codepoint = 0x2E25, .mirror = 0x2E24 }, // BOTTOM RIGHT HALF BRACKET
391 .{ .codepoint = 0x2E26, .mirror = 0x2E27 }, // LEFT SIDEWAYS U BRACKET
392 .{ .codepoint = 0x2E27, .mirror = 0x2E26 }, // RIGHT SIDEWAYS U BRACKET
393 .{ .codepoint = 0x2E28, .mirror = 0x2E29 }, // LEFT DOUBLE PARENTHESIS
394 .{ .codepoint = 0x2E29, .mirror = 0x2E28 }, // RIGHT DOUBLE PARENTHESIS
395 .{ .codepoint = 0x3008, .mirror = 0x3009 }, // LEFT ANGLE BRACKET
396 .{ .codepoint = 0x3009, .mirror = 0x3008 }, // RIGHT ANGLE BRACKET
397 .{ .codepoint = 0x300A, .mirror = 0x300B }, // LEFT DOUBLE ANGLE BRACKET
398 .{ .codepoint = 0x300B, .mirror = 0x300A }, // RIGHT DOUBLE ANGLE BRACKET
399 .{ .codepoint = 0x300C, .mirror = 0x300D }, // [BEST FIT] LEFT CORNER BRACKET
400 .{ .codepoint = 0x300D, .mirror = 0x300C }, // [BEST FIT] RIGHT CORNER BRACKET
401 .{ .codepoint = 0x300E, .mirror = 0x300F }, // [BEST FIT] LEFT WHITE CORNER BRACKET
402 .{ .codepoint = 0x300F, .mirror = 0x300E }, // [BEST FIT] RIGHT WHITE CORNER BRACKET
403 .{ .codepoint = 0x3010, .mirror = 0x3011 }, // LEFT BLACK LENTICULAR BRACKET
404 .{ .codepoint = 0x3011, .mirror = 0x3010 }, // RIGHT BLACK LENTICULAR BRACKET
405 .{ .codepoint = 0x3014, .mirror = 0x3015 }, // LEFT TORTOISE SHELL BRACKET
406 .{ .codepoint = 0x3015, .mirror = 0x3014 }, // RIGHT TORTOISE SHELL BRACKET
407 .{ .codepoint = 0x3016, .mirror = 0x3017 }, // LEFT WHITE LENTICULAR BRACKET
408 .{ .codepoint = 0x3017, .mirror = 0x3016 }, // RIGHT WHITE LENTICULAR BRACKET
409 .{ .codepoint = 0x3018, .mirror = 0x3019 }, // LEFT WHITE TORTOISE SHELL BRACKET
410 .{ .codepoint = 0x3019, .mirror = 0x3018 }, // RIGHT WHITE TORTOISE SHELL BRACKET
411 .{ .codepoint = 0x301A, .mirror = 0x301B }, // LEFT WHITE SQUARE BRACKET
412 .{ .codepoint = 0x301B, .mirror = 0x301A }, // RIGHT WHITE SQUARE BRACKET
413 .{ .codepoint = 0xFE59, .mirror = 0xFE5A }, // SMALL LEFT PARENTHESIS
414 .{ .codepoint = 0xFE5A, .mirror = 0xFE59 }, // SMALL RIGHT PARENTHESIS
415 .{ .codepoint = 0xFE5B, .mirror = 0xFE5C }, // SMALL LEFT CURLY BRACKET
416 .{ .codepoint = 0xFE5C, .mirror = 0xFE5B }, // SMALL RIGHT CURLY BRACKET
417 .{ .codepoint = 0xFE5D, .mirror = 0xFE5E }, // SMALL LEFT TORTOISE SHELL BRACKET
418 .{ .codepoint = 0xFE5E, .mirror = 0xFE5D }, // SMALL RIGHT TORTOISE SHELL BRACKET
419 .{ .codepoint = 0xFE64, .mirror = 0xFE65 }, // SMALL LESS-THAN SIGN
420 .{ .codepoint = 0xFE65, .mirror = 0xFE64 }, // SMALL GREATER-THAN SIGN
421 .{ .codepoint = 0xFF08, .mirror = 0xFF09 }, // FULLWIDTH LEFT PARENTHESIS
422 .{ .codepoint = 0xFF09, .mirror = 0xFF08 }, // FULLWIDTH RIGHT PARENTHESIS
423 .{ .codepoint = 0xFF1C, .mirror = 0xFF1E }, // FULLWIDTH LESS-THAN SIGN
424 .{ .codepoint = 0xFF1E, .mirror = 0xFF1C }, // FULLWIDTH GREATER-THAN SIGN
425 .{ .codepoint = 0xFF3B, .mirror = 0xFF3D }, // FULLWIDTH LEFT SQUARE BRACKET
426 .{ .codepoint = 0xFF3D, .mirror = 0xFF3B }, // FULLWIDTH RIGHT SQUARE BRACKET
427 .{ .codepoint = 0xFF5B, .mirror = 0xFF5D }, // FULLWIDTH LEFT CURLY BRACKET
428 .{ .codepoint = 0xFF5D, .mirror = 0xFF5B }, // FULLWIDTH RIGHT CURLY BRACKET
429 .{ .codepoint = 0xFF5F, .mirror = 0xFF60 }, // FULLWIDTH LEFT WHITE PARENTHESIS
430 .{ .codepoint = 0xFF60, .mirror = 0xFF5F }, // FULLWIDTH RIGHT WHITE PARENTHESIS
431 .{ .codepoint = 0xFF62, .mirror = 0xFF63 }, // [BEST FIT] HALFWIDTH LEFT CORNER BRACKET
432 .{ .codepoint = 0xFF63, .mirror = 0xFF62 }, // [BEST FIT] HALFWIDTH RIGHT CORNER BRACKET
433};
src/lib.zig+1
...@@ -1,3 +1,4 @@...@@ -1,3 +1,4 @@
1pub const arabic_shaping = @import("./arabic_shaping.zig");1pub const arabic_shaping = @import("./arabic_shaping.zig");
2pub const bidi_brackets = @import("./bidi_brackets.zig");2pub const bidi_brackets = @import("./bidi_brackets.zig");
3pub const bidi_mirroring = @import("./bidi_mirroring.zig");
3pub const blocks = @import("./blocks.zig");4pub const blocks = @import("./blocks.zig");