Skip to content

Commit 0122a58

Browse files
committed
Add Bidi mirroring data for Unicode 3.0.1 through 4.0.1
Unicode published BidiMirroring files from 3.0.1 on, but the resources only included them from 4.1.0. Unicode 3.1.0, 3.1.1, and 4.0.1 did not update the file, so they reuse the previous release's version. The 3.2 and 4.0 files map U+2A2D to U+2A2C, which itself maps to U+2A2B. The writer assumed every mapping had a matching reverse mapping, so it would have dropped both one-way mappings in that chain. It now emits those mappings separately; output for symmetric data is unchanged. Assisted-By: Claude Opus 5.5
1 parent 843f3a0 commit 0122a58

9 files changed

Lines changed: 2377 additions & 14 deletions

‎data/3.0.1-bidi-mirroring.txt‎

Lines changed: 238 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,238 @@
1+
# BidiMirroring-1.txt
2+
#
3+
# This file is an informative supplement to the UnicodeData file. It
4+
# lists characters that have the mirrored property
5+
# where there is another Unicode character that typically has a glyph
6+
# that is the mirror image of the original character's glyph.
7+
# The repertoire covered by the file is Unicode 3.0.1.
8+
#
9+
# The file contains a list of lines with mappings from one code point
10+
# to another one for character-based mirroring.
11+
# Note that for "real" mirroring, a rendering engine needs to select
12+
# appropriate alternative glyphs, and that many Unicode characters do not
13+
# have a mirror-image Unicode character.
14+
#
15+
# Each mapping line contains two fields, separated by a semicolon (';').
16+
# Each of the two fields contains a code point represented as a
17+
# variable-length hexadecimal value with 4 to 6 digits.
18+
# A comment indicates where the characters are "BEST FIT" mirroring.
19+
#
20+
# Code points with the "mirrored" property but no appropriate mirrors are
21+
# listed as comments at the end of the file.
22+
#
23+
# For information on bidi mirroring, see UTR #21: Bidirectional Algorithm,
24+
# at http://www.unicode.org/unicode/reports/tr9/
25+
#
26+
# Please address any comments to <errata@unicode.org>.
27+
# Note that this is an archival address: messages will be checked,
28+
# but do not expect an immediate response.
29+
#
30+
# This file was originally created by Markus Scherer
31+
#
32+
# ############################################################
33+
34+
0028; 0029 # LEFT PARENTHESIS
35+
0029; 0028 # RIGHT PARENTHESIS
36+
003C; 003E # LESS-THAN SIGN
37+
003E; 003C # GREATER-THAN SIGN
38+
005B; 005D # LEFT SQUARE BRACKET
39+
005D; 005B # RIGHT SQUARE BRACKET
40+
007B; 007D # LEFT CURLY BRACKET
41+
007D; 007B # RIGHT CURLY BRACKET
42+
00AB; 00BB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
43+
00BB; 00AB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
44+
2039; 203A # SINGLE LEFT-POINTING ANGLE QUOTATION MARK
45+
203A; 2039 # SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
46+
2045; 2046 # LEFT SQUARE BRACKET WITH QUILL
47+
2046; 2045 # RIGHT SQUARE BRACKET WITH QUILL
48+
207D; 207E # SUPERSCRIPT LEFT PARENTHESIS
49+
207E; 207D # SUPERSCRIPT RIGHT PARENTHESIS
50+
208D; 208E # SUBSCRIPT LEFT PARENTHESIS
51+
208E; 208D # SUBSCRIPT RIGHT PARENTHESIS
52+
2208; 220B # ELEMENT OF
53+
2209; 220C # NOT AN ELEMENT OF
54+
220A; 220D # SMALL ELEMENT OF
55+
220B; 2208 # CONTAINS AS MEMBER
56+
220C; 2209 # DOES NOT CONTAIN AS MEMBER
57+
220D; 220A # SMALL CONTAINS AS MEMBER
58+
223C; 223D # TILDE OPERATOR
59+
223D; 223C # REVERSED TILDE
60+
2243; 22CD # ASYMPTOTICALLY EQUAL TO
61+
2252; 2253 # APPROXIMATELY EQUAL TO OR THE IMAGE OF
62+
2253; 2252 # IMAGE OF OR APPROXIMATELY EQUAL TO
63+
2254; 2255 # COLON EQUALS
64+
2255; 2254 # EQUALS COLON
65+
2264; 2265 # LESS-THAN OR EQUAL TO
66+
2265; 2264 # GREATER-THAN OR EQUAL TO
67+
2266; 2267 # LESS-THAN OVER EQUAL TO
68+
2267; 2266 # GREATER-THAN OVER EQUAL TO
69+
2268; 2269 # [BEST FIT] LESS-THAN BUT NOT EQUAL TO
70+
2269; 2268 # [BEST FIT] GREATER-THAN BUT NOT EQUAL TO
71+
226A; 226B # MUCH LESS-THAN
72+
226B; 226A # MUCH GREATER-THAN
73+
226E; 226F # [BEST FIT] NOT LESS-THAN
74+
226F; 226E # [BEST FIT] NOT GREATER-THAN
75+
2270; 2271 # [BEST FIT] NEITHER LESS-THAN NOR EQUAL TO
76+
2271; 2270 # [BEST FIT] NEITHER GREATER-THAN NOR EQUAL TO
77+
2272; 2273 # [BEST FIT] LESS-THAN OR EQUIVALENT TO
78+
2273; 2272 # [BEST FIT] GREATER-THAN OR EQUIVALENT TO
79+
2274; 2275 # [BEST FIT] NEITHER LESS-THAN NOR EQUIVALENT TO
80+
2275; 2274 # [BEST FIT] NEITHER GREATER-THAN NOR EQUIVALENT TO
81+
2276; 2277 # LESS-THAN OR GREATER-THAN
82+
2277; 2276 # GREATER-THAN OR LESS-THAN
83+
2278; 2279 # NEITHER LESS-THAN NOR GREATER-THAN
84+
2279; 2278 # NEITHER GREATER-THAN NOR LESS-THAN
85+
227A; 227B # PRECEDES
86+
227B; 227A # SUCCEEDS
87+
227C; 227D # PRECEDES OR EQUAL TO
88+
227D; 227C # SUCCEEDS OR EQUAL TO
89+
227E; 227F # [BEST FIT] PRECEDES OR EQUIVALENT TO
90+
227F; 227E # [BEST FIT] SUCCEEDS OR EQUIVALENT TO
91+
2280; 2281 # [BEST FIT] DOES NOT PRECEDE
92+
2281; 2280 # [BEST FIT] DOES NOT SUCCEED
93+
2282; 2283 # SUBSET OF
94+
2283; 2282 # SUPERSET OF
95+
2284; 2285 # [BEST FIT] NOT A SUBSET OF
96+
2285; 2284 # [BEST FIT] NOT A SUPERSET OF
97+
2286; 2287 # SUBSET OF OR EQUAL TO
98+
2287; 2286 # SUPERSET OF OR EQUAL TO
99+
2288; 2289 # [BEST FIT] NEITHER A SUBSET OF NOR EQUAL TO
100+
2289; 2288 # [BEST FIT] NEITHER A SUPERSET OF NOR EQUAL TO
101+
228A; 228B # [BEST FIT] SUBSET OF WITH NOT EQUAL TO
102+
228B; 228A # [BEST FIT] SUPERSET OF WITH NOT EQUAL TO
103+
228F; 2290 # SQUARE IMAGE OF
104+
2290; 228F # SQUARE ORIGINAL OF
105+
2291; 2292 # SQUARE IMAGE OF OR EQUAL TO
106+
2292; 2291 # SQUARE ORIGINAL OF OR EQUAL TO
107+
22A2; 22A3 # RIGHT TACK
108+
22A3; 22A2 # LEFT TACK
109+
22B0; 22B1 # PRECEDES UNDER RELATION
110+
22B1; 22B0 # SUCCEEDS UNDER RELATION
111+
22B2; 22B3 # NORMAL SUBGROUP OF
112+
22B3; 22B2 # CONTAINS AS NORMAL SUBGROUP
113+
22B4; 22B5 # NORMAL SUBGROUP OF OR EQUAL TO
114+
22B5; 22B4 # CONTAINS AS NORMAL SUBGROUP OR EQUAL TO
115+
22B6; 22B7 # ORIGINAL OF
116+
22B7; 22B6 # IMAGE OF
117+
22C9; 22CA # LEFT NORMAL FACTOR SEMIDIRECT PRODUCT
118+
22CA; 22C9 # RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT
119+
22CB; 22CC # LEFT SEMIDIRECT PRODUCT
120+
22CC; 22CB # RIGHT SEMIDIRECT PRODUCT
121+
22CD; 2243 # REVERSED TILDE EQUALS
122+
22D0; 22D1 # DOUBLE SUBSET
123+
22D1; 22D0 # DOUBLE SUPERSET
124+
22D6; 22D7 # LESS-THAN WITH DOT
125+
22D7; 22D6 # GREATER-THAN WITH DOT
126+
22D8; 22D9 # VERY MUCH LESS-THAN
127+
22D9; 22D8 # VERY MUCH GREATER-THAN
128+
22DA; 22DB # LESS-THAN EQUAL TO OR GREATER-THAN
129+
22DB; 22DA # GREATER-THAN EQUAL TO OR LESS-THAN
130+
22DC; 22DD # EQUAL TO OR LESS-THAN
131+
22DD; 22DC # EQUAL TO OR GREATER-THAN
132+
22DE; 22DF # EQUAL TO OR PRECEDES
133+
22DF; 22DE # EQUAL TO OR SUCCEEDS
134+
22E0; 22E1 # [BEST FIT] DOES NOT PRECEDE OR EQUAL
135+
22E1; 22E0 # [BEST FIT] DOES NOT SUCCEED OR EQUAL
136+
22E2; 22E3 # [BEST FIT] NOT SQUARE IMAGE OF OR EQUAL TO
137+
22E3; 22E2 # [BEST FIT] NOT SQUARE ORIGINAL OF OR EQUAL TO
138+
22E4; 22E5 # [BEST FIT] SQUARE IMAGE OF OR NOT EQUAL TO
139+
22E5; 22E4 # [BEST FIT] SQUARE ORIGINAL OF OR NOT EQUAL TO
140+
22E6; 22E7 # [BEST FIT] LESS-THAN BUT NOT EQUIVALENT TO
141+
22E7; 22E6 # [BEST FIT] GREATER-THAN BUT NOT EQUIVALENT TO
142+
22E8; 22E9 # [BEST FIT] PRECEDES BUT NOT EQUIVALENT TO
143+
22E9; 22E8 # [BEST FIT] SUCCEEDS BUT NOT EQUIVALENT TO
144+
22EA; 22EB # [BEST FIT] NOT NORMAL SUBGROUP OF
145+
22EB; 22EA # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP
146+
22EC; 22ED # [BEST FIT] NOT NORMAL SUBGROUP OF OR EQUAL TO
147+
22ED; 22EC # [BEST FIT] DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL
148+
22F0; 22F1 # UP RIGHT DIAGONAL ELLIPSIS
149+
22F1; 22F0 # DOWN RIGHT DIAGONAL ELLIPSIS
150+
2308; 2309 # LEFT CEILING
151+
2309; 2308 # RIGHT CEILING
152+
230A; 230B # LEFT FLOOR
153+
230B; 230A # RIGHT FLOOR
154+
2329; 232A # LEFT-POINTING ANGLE BRACKET
155+
232A; 2329 # RIGHT-POINTING ANGLE BRACKET
156+
3008; 3009 # LEFT ANGLE BRACKET
157+
3009; 3008 # RIGHT ANGLE BRACKET
158+
300A; 300B # LEFT DOUBLE ANGLE BRACKET
159+
300B; 300A # RIGHT DOUBLE ANGLE BRACKET
160+
300C; 300D # [BEST FIT] LEFT CORNER BRACKET
161+
300D; 300C # [BEST FIT] RIGHT CORNER BRACKET
162+
300E; 300F # [BEST FIT] LEFT WHITE CORNER BRACKET
163+
300F; 300E # [BEST FIT] RIGHT WHITE CORNER BRACKET
164+
3010; 3011 # LEFT BLACK LENTICULAR BRACKET
165+
3011; 3010 # RIGHT BLACK LENTICULAR BRACKET
166+
3014; 3015 # [BEST FIT] LEFT TORTOISE SHELL BRACKET
167+
3015; 3014 # [BEST FIT] RIGHT TORTOISE SHELL BRACKET
168+
3016; 3017 # LEFT WHITE LENTICULAR BRACKET
169+
3017; 3016 # RIGHT WHITE LENTICULAR BRACKET
170+
3018; 3019 # LEFT WHITE TORTOISE SHELL BRACKET
171+
3019; 3018 # RIGHT WHITE TORTOISE SHELL BRACKET
172+
301A; 301B # LEFT WHITE SQUARE BRACKET
173+
301B; 301A # RIGHT WHITE SQUARE BRACKET
174+
175+
# The following characters have no appropriate mirroring character
176+
177+
# 2201; COMPLEMENT
178+
# 2202; PARTIAL DIFFERENTIAL
179+
# 2203; THERE EXISTS
180+
# 2204; THERE DOES NOT EXIST
181+
# 2211; N-ARY SUMMATION
182+
# 2215; DIVISION SLASH
183+
# 2216; SET MINUS
184+
# 221A; SQUARE ROOT
185+
# 221B; CUBE ROOT
186+
# 221C; FOURTH ROOT
187+
# 221D; PROPORTIONAL TO
188+
# 221F; RIGHT ANGLE
189+
# 2220; ANGLE
190+
# 2221; MEASURED ANGLE
191+
# 2222; SPHERICAL ANGLE
192+
# 2224; DOES NOT DIVIDE
193+
# 2226; NOT PARALLEL TO
194+
# 222B; INTEGRAL
195+
# 222C; DOUBLE INTEGRAL
196+
# 222D; TRIPLE INTEGRAL
197+
# 222E; CONTOUR INTEGRAL
198+
# 222F; SURFACE INTEGRAL
199+
# 2230; VOLUME INTEGRAL
200+
# 2231; CLOCKWISE INTEGRAL
201+
# 2232; CLOCKWISE CONTOUR INTEGRAL
202+
# 2233; ANTICLOCKWISE CONTOUR INTEGRAL
203+
# 2239; EXCESS
204+
# 223B; HOMOTHETIC
205+
# 223E; INVERTED LAZY S
206+
# 223F; SINE WAVE
207+
# 2240; WREATH PRODUCT
208+
# 2241; NOT TILDE
209+
# 2242; MINUS TILDE
210+
# 2244; NOT ASYMPTOTICALLY EQUAL TO
211+
# 2245; APPROXIMATELY EQUAL TO
212+
# 2246; APPROXIMATELY BUT NOT ACTUALLY EQUAL TO
213+
# 2247; NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO
214+
# 2248; ALMOST EQUAL TO
215+
# 2249; NOT ALMOST EQUAL TO
216+
# 224A; ALMOST EQUAL OR EQUAL TO
217+
# 224B; TRIPLE TILDE
218+
# 224C; ALL EQUAL TO
219+
# 225F; QUESTIONED EQUAL TO
220+
# 2260; NOT EQUAL TO
221+
# 2262; NOT IDENTICAL TO
222+
# 228C; MULTISET
223+
# 2298; CIRCLED DIVISION SLASH
224+
# 22A6; ASSERTION
225+
# 22A7; MODELS
226+
# 22A8; TRUE
227+
# 22A9; FORCES
228+
# 22AA; TRIPLE VERTICAL BAR RIGHT TURNSTILE
229+
# 22AB; DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
230+
# 22AC; DOES NOT PROVE
231+
# 22AD; NOT TRUE
232+
# 22AE; DOES NOT FORCE
233+
# 22AF; NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE
234+
# 22B8; MULTIMAP
235+
# 22BE; RIGHT ANGLE WITH ARC
236+
# 22BF; RIGHT TRIANGLE
237+
# 2320; TOP HALF INTEGRAL
238+
# 2321; BOTTOM HALF INTEGRAL

0 commit comments

Comments
 (0)