/
419.txt
1137 lines (914 loc) · 41 KB
/
419.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
* 仕様書
[REFS[
- [105]
[CITE[[[The Unicode Standard]], Version 13.0 - ch13.pdf]], [TIME[2020-03-09T17:53:44.000Z]], [TIME[2020-12-24T07:34:13.381Z]] <https://www.unicode.org/versions/latest/ch13.pdf#G27804>
- [30] [CITE[[[The Unicode Standard]], Version 13.0 - ch23.pdf]], [TIME[2020-03-09T17:53:52.000Z]], [TIME[2020-12-22T08:47:43.938Z]] <https://www.unicode.org/versions/latest/ch23.pdf#G19053>
- [68]
[CITE[[[The Unicode Standard]], Version 13.0 - ch24.pdf]], [TIME[2020-03-09T17:53:54.000Z]], [TIME[2020-12-23T09:22:15.656Z]] <https://www.unicode.org/versions/latest/ch24.pdf#G11576>
- [17]
<https://www.unicode.org/Public/UCD/latest/ucd/StandardizedVariants.txt>
- [18] [CITE@en-us[[[UAX #44]]: Unicode Character Database]], [TIME[2020-03-06T22:23:11.000Z]], [TIME[2020-10-20T12:10:39.430Z]] <https://www.unicode.org/reports/tr44/#StandardizedVariants>
- [86] [CITE@en-us[UAX #44: Unicode Character Database]], [TIME[2020-03-06T22:23:11.000Z]], [TIME[2020-12-23T12:08:32.375Z]] <http://www.unicode.org/reports/tr44/#EmojiVariants>
- [19] [CITE[UTS #37: Unicode Ideographic Variation Database]]
([TIME[2011-11-08 13:41:57 +09:00]] 版)
<https://www.unicode.org/reports/tr37/>
- [21] [CITE@en-us[Ideographic Variation Database]]
([TIME[2015-05-08 11:34:52 +09:00]] 版)
<https://www.unicode.org/ivd/>
]REFS]
* 意味
[31]
[[Unicode文字]]は、
いろいろな[[グリフ]]によって[RUBYB[表現][represent]]され得ます。
ときにテキスト処理において[[文字]]を表現するのに使う[[グリフ]]の[[集合]]を制限したり、
変更したりする必要が生じることがあります。
[SRC[>>30]]
[32]
通常それは[[リッチテキスト]]文書で[[フォント]]や[[スタイル]]を選ぶことで示します。
しかし特殊な状況では、
そうした通常の[RUBYB[見た目][appearance]]の範囲との[RUBYB[違い][variation]]を、
[[平文]]で書式付きテキストを交換するのが不可能か不便であるとしても、
同じ[[文書]]に並べて表現する必要があったりもします。
[SRC[>>30]]
[EG[
[33]
例えば[[モンゴル文字]]を使う[[言語]]では、
特定の[RUBYB[テキスト的な目的][textual purpose]]のため「[RUBYB[汎用][generic]]」の[[グリフ]]群の範囲では不適切と考えられるときに、
特定の[RUBYB[異体][variant]]のグリフ群の範囲が必要となる場合があります。
[SRC[>>30]]
]EG]
[34]
そこで[[異体選択子]]は特定の[[文字]]の表現に使う[[グリフ]]の[[集合]]に対して制限を指定する仕組みを提供するのであります。
[SRC[>>30]]
[35]
加えて、
[[異体選択子]]は、
[[CJK漢字]]や[[モンゴル文字]]におけるような、
[RUBYB[本質的][essentially]]に[RUBYB[同じ][same]][RUBYB[[[意味]]][semantics]]を持ちながら[RUBYB[実質的][substantially]]に違った[[グリフ]]の範囲を持った、
[RUBYB[[[異体]]][variant]]を指定する仕組みを提供するのであります。
[SRC[>>30]]
[36]
つまるところ、
[[異体選択子]]は、
[[Unicode]]
が過剰に[RUBYB[[[統合]]][unify]]して
1つの[[文字][Unicode文字]]として扱っているものを、
より細かく区別して扱うための救済措置的に使えるものとなっています。
[37]
[[Unicode文字]]が必ずしも一般に認識される
「[[文字]]」
の範囲と一致しない [SEE[ [[Unicode文字]] ]]
のと同じように、
[[異体選択子]]が扱うものは一般にいう「[[異体字]]」
と必ずしも同じではありません。
-*-*-
[87]
[[異体列]]は、
元の
[[Unicode文字]]の意味的範囲に含まれる[[字形]]のうちの一部分を表す、
という立て付けで規定されています。
元の
[[Unicode文字]]と同じ意味の別の[[文字]]を指すものではありません。
従って元の
[[Unicode文字]]の範囲に含まれないと思われるような、
著しく異なるものが[[異体列]]で表されることはありません。
この設計ゆえに、[[異体選択子]]に未対応だとしても、
[[基底文字]]だけを見て処理できるということになっています。
[88]
そのため、
[[異体]]の区別のためには、
元の[[Unicode文字]]と[[異体列]]との区別では意味がなく、
[[異体列]]と[[異体列]]との区別にしなければいけません。
[EG[
[89]
「令」 [VAR[c]]
について
「明朝体の令」と「楷書体の令」が[[異体選択子]] [VAR[v1]], [VAR[v2]]
で区別されるとするとき、
[VAR[c]] と <[VAR[c]], [VAR[v1]]> や
[VAR[c]] と <[VAR[c]], [VAR[v2]]>
の区別では意味がなく、
<[VAR[c]], [VAR[v1]]>
と
<[VAR[c]], [VAR[v2]]>
で区別しなければなりません。
]EG]
;; [90] かつては、[[異体字]]のために膨大な[[符号空間]]を占用されるのはけしからんから枝番形式にしろ、
という主張をする人達もいたようです。 [[Unicode]] の[[異体選択子]]は、
微小な違いを枝番形式で「節約」することにはなりますが、
微小でない違いは別の [[Unicode文字]]を追加しないといけないのですから、
「節約」にはなりません。
;; [91] [[異体字]]を枝番方式で表せば、枝番部分を無視すれば簡単に曖昧検索できて便利だ、
といわれていました。[[異体選択子]]にもそれは当てはまりますが、
既に異なる[[Unicode文字]]として区別されている (または今後追加される)、
違いの大きな[[異体字]]の同一視もしないといけないので、
検索処理の効率化にはあまり貢献しません。
[92]
[[Unicode文字]] ⊃ [[異体列]]という構造は
[[Unicode]]
のアーキテクチャ的にはそれでいいのでしょうが、
実際の運用を思うと厄介なことも少なくありません。
例えばある文字 [VAR[c]]
の[[符号点]]がほとんどの場合その一般的な字形 [VAR[v1]]
で表示されていて、
たまに使われる異体 [VAR[v2]]
と区別したいとき、
確実に区別するなら <[VAR[c]], [VAR[v1]]>, <[VAR[c]], [VAR[v2]]>
と書き分けなければなりません。
ですが、現実的にほとんどの場合 [VAR[c]] が <[VAR[c]], [VAR[v1]]>
の意味で使われているのです。普通の人が普通の入力方法で作った文書には
[VAR[c]] と書かれているのに、それが通用しなくなるのは困りものです。
* 符号点
[93]
[[異体選択子]]の[[符号点]]は3種類あります。
- [8]
[CODE[U+180B]] [CODE(charname)@en[MONGOLIAN FREE VARIATION SELECTOR ONE]]
([CODE(charname)@en[FVS1]]),
[CODE[U+180C]] [CODE(charname)@en[MONGOLIAN FREE VARIATION SELECTOR TWO]]
([CODE(charname)@en[FVS2]]),
[CODE[U+180D]] [CODE(charname)@en[MONGOLIAN FREE VARIATION SELECTOR THREE]]
([CODE(charname)@en[FVS3]])
-- [95] [[Unicode 3.0]] で導入
-- [96] [[蒙古文字]]専用
-
[26]
[CODE[U+FE00]] [CODE(charname)@en[VS1]] - [CODE[U+FE0F]]
-- [97] [[Unicode 3.2]] で導入
-- [98] [[SVS]], [[EVS]] で使われる
- [94]
[CODE[U+E0100]] - [CODE[U+E01EF]] [CODE(charname)@en[VS256]]
-- [99] [[Unicode 4.0]] で導入
-- [100] [[IVS]] で使われる
[101]
兼用でもいいはずなのに、なぜか [[VS]] の種類ごとに使い分けられています。
[102]
[[Unicode 4.0]] 追加分は[[第14面]]にあって、
[[UTF-8]] でも [[UTF-16]] でも4バイトで表されます
(それ以外の文字は、 [[UTF-8]] で3バイト、 [[UTF-16]] で2バイトです)。
[[Unicode 4.0]] 時点では [[BMP]] に押し込められるだけの空き領域があったはずですが...
[[SIP]] の[[漢字]]の [[IVS]] だと
[[UTF-8]] でも [[UTF-16]] でも1つ8バイトにもなってしまいます。
;; [103]
[[Unicode]] で[[欧米]]以外の文字を使うという時点で、
バイト数的な効率が悪いことはわかりきっているので、
いまさら気にするなということかもしれませんが...
;; [104]
それにしたって、いちばん需要が大きそうな[[漢字]]の [[IVS]]
に使う[[異体選択子]]がいちばんバイト長が大きくなる冷遇ぶりw
[REFS[
- [7] [CODE[Variation_Selector]]
の一覧 <https://chars.suikawiki.org/set/%24unicode%3AVariation_Selector>
]REFS]
* 異体列
[39]
[DFN[[RUBY[異体列][いたいれつ][variation sequence]]]]は、
1つの[[基底文字]]または
[[spacing mark]] ([CODE[[[General_Category]]=[[Mc]]]])
に、
1つの[[異体選択子文字]]を続けたものです。
これを[[基底文字]]または [[spacing mark]]
の[DFN[[RUBY[異体][いたい][variant]]]]といいます。
[SRC[>>30]]
[FIG(railroad)[ [38] [[異体列]]
= |
== [[基底文字]]
== [CODE[Mc]]
= [[異体選択子]]
]FIG]
;; [40]
[[基底文字]]が使われることが多く、
[[spacing mark]]
があまりありません [SRC[>>30]]。
そこで
[CITE[The Unicode Standard]]
は、
簡潔のため[[基底文字]]のみ記述するが
[[spacing mark]]
も同様である
[SRC[>>30]]、
というやや曖昧な規定の方法を採っています。
[107]
[[異体選択子]]は、適用対象の直後に置きます。 [SRC[>>105]]
[110]
[[自由異体選択子]]の古い実装は、
[CODE(charname)@en[ZWJ]]
を併用する時、
[[基底文字]]、 [CODE(charname)@en[ZWJ]], [[自由異体選択子]]の順としていました。
古い [CITE[The Unicode Standard]] でないドキュメントがこの順としていたためだといいます。
[SRC[>>105]]
;; [111]
[CITE[The Unicode Standard]] はこのことにわざわざ言及していますが、
古目の実装がそうしていると書いているだけで、新しい実装がどうするべきか明確にしていません。
[[SVS]] でないものは無視するべきとも書いているので、
新しい実装はこの方法を採るべきではないと暗に示しているのでしょうか。
しかし古い実装がこの方法を使っていて、
この方法を使った文書が現に存在しているのだとすると、
[[後方互換性]]のためこの方法も意図通りに解釈できるべきでしょう。
[51]
[[異体列]]の最初の[[文字]]が、
[[nonspacing combining mark]]
や[[正準分解可能文字]]になることは、ありません。
これは、
[[正規化]]文における[[異体列]]の解釈の問題を防ぐための制限です。
[SRC[>>30]]
-*-*-
[41]
[[異体列]]において[[異体選択子]]は[[基底文字]]または
[[spacing mark]]
の[RUBYB[見た目][appearance]]に影響します。
[SRC[>>30]]
[42]
この見た目の変化は、
後に続く[[文字]]、
とりわけ同じ[[基底文字]]または [[spacing mark]]
に[[適用]]される[[結合文字]]にも[RUBYB[視覚的][visual]]な影響を与えることがあります。
[SRC[>>30]]
[EG[
[43]
[[基底文字]]の[RUBYB[図形][shape]]の変化に合わせて、
[[結合マーク]]の図形や位置も変化するべきです。
[[基底文字]]の[[色]]の変化に合わせて、
[[結合マーク]]の[[色]]も変化するべきです。
[[基底文字]]の [[advance width]]
が変化すれば、
次の [[spacing文字]]の位置も変化します。
[SRC[>>30]]
]EG]
[47]
[[異体列]]には、
[[SVS]],
[[IVS]],
[[EVS]]
の3種類があります。
[SRC[>>30]]
* SVS
[48]
[DFN[[RUBY[標準化済異体列][ひょうじゅんかずみいたいれつ][standardized variation sequence]]]]
([DFN[SVS]])
は、
[[UCD]]
の
[DFN[[CODE[StandardizedVariants.txt]]]] [SRC[>>17]]
で定義されます。
[SRC[>>30]]
[24]
[CODE[StandardizedVariants.txt]]
にはコメントとして
[[SVS]]
をいくつかの種類に分けています [SRC[>>17]]。
それによると:
- [73] Mathematical
- [74] East Asian punctuation positional variants
- [75] Myanmar
- [76] Phags-pa
- [77] Manichaean
- [78] Mongolian
- [79] CJK compatibility ideographs
... があります。 (今後他の種類が増えることもあるでしょう。)
[80]
Manichaean
と
Mongolian
は、
適用される
[[shaping environment]]
が、
[CODE[isolate]],
[CODE[initial]],
[CODE[medial]],
[CODE[final]]
のうち1つ[[以上]]のみに限定されるとあります。 [SRC[>>17]]
[81]
このうち
[CODE[Mongolian]]
だけは、
専用の[[自由異体選択子]]文字を使います。
** 蒙古文字自由異体選択子
[67]
[[蒙古文字]]の[[異体]]は、
[[SVS]]
に分類されていますが、
特別な扱いを受けています。
[[蒙古文字]]用には特別な[[異体選択子]]が3つ用意されています (>>8)
[SRC[>>105]]。
この[[異体選択子]]は[[蒙古文字]]だけに使われています。
[[蒙古文字]]には他の[[異体選択子]]は使われていません。
(この原則が将来にわたって維持されるのかは不明。)
[106]
この[[蒙古文字]]の[DFN[[RUBY[自由異体選択子][じゆういたいせんたくし][free variation selector]]]]は、
機械的に決定できない[[グリフ]]形が必要な時
(例えば[RUBYB[[[外来語]]][foreign word]]を書く時)
に使います。
[SRC[>>105]]
[109]
[[利用者]]は、
[[レンダリング]]システムが自動的に正しい[[グリフ]]を選択できないときのみ、
[[自由異体選択子]]を使う[RUBYB[べき][should]]です。
[SRC[>>105]]
** 数学記号
[82]
次の2件は、
[[Unicode 3.2]]
で定義されたものの、
誤りとわかり
[[SVS]]
から削除された、
と
[CODE[StandardizedVariants.txt]]
にコメントがあります。
[SRC[>>17]]
- [CODE[#2278 FE00; with vertical stroke; # [[NEITHER LESS-THAN NOR GREATER-THAN]]]]
- [CODE[#2279 FE00; with vertical stroke; # [[NEITHER GREATER-THAN NOR LESS-THAN]]]]
** CJK互換漢字SVS
[56]
各[[CJK互換漢字]]用に1つずつ、計1002個の [[SVS]] が定義されています。
[SRC[>>30]]
[57] これは
[[CJK互換漢字]]の[[正規化]]の問題の対策として定義されました。
[[CJK互換漢字]]を相当する[[CJK統合漢字]]と区別したい時がありますが、
[[CJK互換漢字]]は[[CJK統合漢字]]に[[正準等価]]な[[写像]]を持つ故、
[[正規化]]によってその区別が失われてしまいます。
そこでかわりに
[[SVS]]
を使えるのです。
[SRC[>>30]]
[58]
[[CJK互換漢字]]用 [[SVS]] は、 [[CJK互換漢字]]の[[符号点]]と一対一対応するものです。
[[IVD]] に登録された実装依存[[グリフ]]に対応付けられた [[IVS]] とは違います。
[SRC[>>30]]
-*-*-
[59]
[[CJK互換漢字]]用の [[SVS]] は、
[[CJK互換漢字]]に[[異体選択子]]を付けたものではなく、
相当する[[CJK統合漢字]]に[[異体選択子]]を付けたものとなります。
[[CJK互換漢字]]は[[正準写像]]を持つので、
[[異体列]]に使えないのです。
[60]
[[CJK互換漢字]]の[[正準写像]]は[[CJK統合漢字]]単体であって、
[[CJK互換漢字]]用 [[SVS]] では''ありません''。
[[SVS]] に[[正準写像]]が変更されればさほど問題は生じなかったのですが、
[[正規化]]の仕様変更は認められていないのです。
それゆえ、
[[正規化]]をおそれて
[[CJK互換漢字]]を避けるなら、
[[CJK統合漢字]] + [[異体選択子]]を使うことになりますが、
それが正しく表示されるのは適切な[[フォント]]を持っている環境のみ、
正しく処理されるのは対応した環境だけです。
[[CJK互換漢字]]をそのまま使っていれば、
[[正規化]]以外はまったく支障がなかったのが、
[[SVS]] に置き換えるとまったく使い物にならなくなってしまいますw
([[フォント]]の問題は過渡期の今だけだと思いたいですが...)
[61]
それどころか同じ表現が [[CJK互換漢字]]と [[SVS]]
の2通りになって、しかも両者は[[正規化]]で同一視される対象ではありませんから、
検索などで新規に個別対応が必要となってしまいます。
むしろ面倒事は増えています。
[62]
[[正規化]]は破壊的操作なので、オリジナルデータや重要なデータには使うべきではありません。
[SEE[ [[正規化]] ]]
[[正規化]]を使わない日常の用途には [[CJK互換漢字]]の [[SVS]]
は出番がなさそうです。
* EVS
[49]
[DFN[[RUBY[絵文字異体列][えもじいたいれつ][emoji variation sequence]]]]
([DFN[EVS]])
は、
[[UTS #51]]
[DFN[[CODE[emoji-variation-sequences.txt]]]]
で定義されます
[SRC[>>30]]。
[66]
古い
[[Unicodeの版]]では
[[EVS]]
は
[[SVS]]
に含まれていました。
当時
[CODE[StandardizedVariants.txt]]
に記述されていた
[[EVS]]
は、現在の版では削除されているようです。
[44]
[[数字]],
[CODE[U+0023]] ([CODE[#]]),
[CODE[U+002A]] ([CODE[*]])
を[[基底文字]]とする[[絵文字異体列]]は、
それに対する[[結合文字]]
[CODE[U+20E3]] [CODE(charname)@en[COMBINING ENCLOSING KEYCAP]]
の[[色]]、[[サイズ]]、位置決定に影響することが想定されています。
[SRC[>>30]]
[11] [CITE[Emoji Variation Sequences]]
([TIME[2016-06-15 08:30:11 +09:00]])
<http://www.unicode.org/emoji/charts/emoji-variants.html>
* IVS
[50]
[DFN[[RUBY[表意文字的異体列][ひょういもじてきいたいれつ][ideographic variation sequence]]]]
([DFN[IVS]])
は、
2つの[[符号化文字]]の列であって、
1つ目が
[CODE[Ideographic]]
であって[[正準的分解可能]]でも[[互換的分解可能]]でも''ない''もの、
2つ目が[[異体選択子文字]]
[ [CODE[U+E0100]], [CODE[U+E01EF]] ]
であるものです。
[SRC[>>19]]
;; [124] [[異体列]]一般よりも、
1文字目が [CODE[Ideographic]]
であることと、
2文字目の範囲に制約が増えています。
[123]
[[IVS]]
は、
[DFN[UTS #37]]
の手続きによる登録で定義され、
[DFN[Ideographic Variation Database]]
([DFN[IVD]])
に一覧化されます。
[SRC[>>30]]
[119]
[[UTS #37]]
によると、
[[漢字]]その他の[[表意文字]]にあっては、
[[利用者]]の需要すべてを満足する[[異体列]]の単一の[[集成]]を構築することが不可能である、
すなわち研究者、政府、出版社の要件が異なりすぎて単一の[[集成]]に収容することが困難であるゆえに、
複数の独立した[[集成]]をもって各要件を満たせるようにしたものであります。
[SRC[>>19]]
;; [121] それが不可能だと認めてしまうのなら、
[[CJK統合漢字]]がやらかしたことも間違いだったと認めてしまった方が楽なのではないかと思わんでもないw
;; [122] なぜ[[表意文字]]でだけそれが不可能で、
他の[[文字]]では可能なのか説明されてませんが、不思議ですね。
[120]
[[UTS #37]]
の規定する
[[IVD]] [SRC[>>21]]
は、[[異体列]]を使った[[テキスト]]の[[情報交換]]を信頼できるものとするべく、
[[異体列]]に単一の定義が存在するようせしめるものであります。
[SRC[>>19]]
[126]
[[IVD]]
の目的は、
[[IVS]]
を固有の[[グリフ的部分集合]]に関連付けることです。
[[IVD]] に含まれる [[IVS]] は、
[RUBYB[登録済み][registered]]の [[IVS]] です。
かかる [[IVS]] が[[テキスト]]に現れたなら、
[[IVD]]
をチェックすればその意図する所を特定できます。
ゆえにそうした [[IVS]] は、テキスト交換に使うのに[RUBYB[適したもの][suitable]]です。
[SRC[>>19]]
[125]
ある[[文字]]の[DFN[[RUBYB[グリフ[RUBY[的][てき]][RUBY[部分集合][ぶぶんしゅうごう]]][glyphic subset]]]]とは、
その[[文字]]の[RUBYB[表示][display]]に適切な[[グリフ]]群の[[部分集合]]です。
[SRC[>>19]]
[127]
[[IVS]] には、[[異体選択子]]の通常の規則が適用されます。
従って未登録の [[IVS]] ([[IVD]] にない [[IVS]]) はテキスト交換で使うべきではありません。
登録された [[IVS]] は、 [[IVD]] 中の [[IVS]] に関連付けられた[[グリフ的部分集合]]に[[レンダリング]]を制限したいときのみ使うべきです。
[SRC[>>19]]
[128]
[[異体選択子]]は [[default ignorable]]
なので、
[[IVS]] に関連付けられた[[グリフ的部分集合]]は、
[[基底文字]]を単体で使った時に適切な[[グリフ]]群の[[部分集合]]である、
言い換えると [[IVS]] の[[グリフ部分集合]]が[[基底文字]]に[[統合][unify]]可能なものである必要があり、
[RUBYB[登録者][registrant]]はそれを[RUBYB[確かめる][ensure]]ことが期待されます。
[CODE[Unified_Ideograph]]
の[[文字]]の場合については、
[CITE[The Unicode Standard]] の[[漢字]]の章と
[[ISO/IEC 10646]] 附属書 S の[[漢字統合規則][包摂規準]]に照らし合わせることが、
その方法の1つです。
[SRC[>>19]]
[131]
encoded variants の数を削減するための取り組みとして、
[CODE[Unified_Ideograph]]
な[[文字]]に関する[[統合規則][包摂規準]]は、
[[IVD]] に適用される時、
次の2つの場合も含めるよう拡大されます。
[SRC[>>19]]
- [132] 異なる構造を持つ文字で、
その違いが別の[[統合漢字]]として[[符号化][符号化済文字]]するほどには重大とはみなされない場合であって、
[[符号化済文字]]の異体として関連付ける強い証拠を有するもの。
-- 例:
⿱椎十 / ⿰木隼,
⿱汨皿 / ⿰氵昷,
⿱戠火 / ⿹戠火
- [133] 同じ構造を持つ文字で、
第2 (以後) 段階の構成要素が違って通常は[[統合][unify]]可能ではない場合であって、
[[符号化済文字]]の異体として関連付ける強い証拠を有するもの。
-- 例:
⿰月㲋 / ⿰月𣬉,
⿺𠃊西 / ⿺辶西
-- [134]
此の場合当該[[文字]]は稀にしか使われないものである[RUBYB[べき][should]]で、
登録者は[[グリフ]]図形の類似性や異体としての許容性の根拠を提示することが期待されます。
;; [135]
[[グリフ的部分集合]]の前提を覆す例外が、
「encoded variants の数を削減」
という意味不明な理由で追加されてることが気になりますが...
通常の統合規則に漏れているのに
「別の漢字とするほど重大ではない」
ものがあるという世界観も意味不明です。
[136]
登録済 [[IVS]] を使ったテキストの安定性を保証するため、
[[IVS]] と[[図形的部分集合]]の関連付けは恒久的なものとされます。
[[IVS]] が他の[[図形的部分集合]]に再割当されることはありません。
[SRC[>>19]]
[137]
[[IVD]] は、登録済 [[IVS]] が単一の[[図形的部分集合]]に対応することを保証しますし、
その関連付けは恒久的なものでありますが、
2つの異なる [[IVS]] が重ならないこと、
異なる[[図形的部分集合]]であることは、
保証しません。
[SRC[>>19]]
[138]
[[IVS]] の[[異体選択子]]が同じだからといって、
[[基底文字]]が違うなら、
その[[異体選択子]]の表すものが同じような意味であるとは限りません。
[[IVS]] はそれぞれの[[基底文字]]に対して独立に定義されます。
[SRC[>>19]]
[139]
240 [[以上]]の [[IVS]] の登録が必要となった時、
[[Unicode Consortium]]
新しい[[異体選択子]]を追加する予定です。
[SRC[>>19]]
-*-*-
[140]
[[IVD]]
において
[[IVS]] とそれに関連付けられた[[グリフ的部分集合]]は、
[RUBYB[集成][collection]]の[RUBYB[エントリー][entry]]という形にグループ化されます。
[[集成]]は特定の利用者コミュニティーの要件を満たす[[グリフ的部分集合]]を集めたものとなることが期待されます。
[SRC[>>19]]
[141]
同じ[[グリフ的部分集合]]の [[IVS]] がいくつもあると実装コストが嵩みますから、
当該[[集成]]が実装される可能性が下がってしまいます。
そこで同じ[[グリフ的部分集合]]の [[IVS]]
を減らすため、
登録者は既存の集成に存する [[IVS]] と似たものを共有することが[RUBYB[強く[[推奨]]されます][strongly encouraged]]
(必須ではありません)。
[RUBYB[登録機関][registrar]]は、
登録手続内で、
[[IVS]]
の共有の可能性を登録者に警告しなければなりません。
[[IVS]] の共有は、
関係する[[集成]]の登録者間相互の合意があれば、
実施できます。
[SRC[>>19]]
[142]
[[集成]]の登録は、
特定目的への[RUBYB[適当性][suitability]]を暗示するものではありません。
[[IVS]] の有用性や[[集成]]全体としての有用性は、
その用途に依存します。
登録者は[[集成]]の意図を説明する[RUBYB[べき][encouraged]]で、
[[利用者]]は[[集成]]が自身の目的に有用かどうか評価する[RUBYB[べき][encouraged]]です。
[SRC[>>19]]
[143]
実装は、登録済 [[IVS]] を任意の組み合わせで自由に対応でき、
複数の[[集成]]であろうとも[[集成]]の[[部分集合]]であろうとも構いません。
[SRC[>>19]]
[144]
登録手続きは登録時点で [[IVS]] を説明することを要求していますし、
登録者が当該説明に可能な限り公衆アクセスを提供し続けることを[RUBYB[強く推奨][strongly encourage]]していますが、
それは保証されません。
[[利用者]]は、
説明への公衆アクセスの継続性が自身の目的に必要かどうか、
関係する [[IVS]] の登録者がそれを提供できるかを、
注意深く評価する[RUBYB[べき][should]]です。
[SRC[>>19]]
[REFS[
- [129] [CODE[Ideographic]] な文字の一覧
<https://chars.suikawiki.org/set/%24unicode%3AIdeographic>
- [130] [CODE[Unified_Ideograph]] な文字の一覧
<https://chars.suikawiki.org/set/%24unicode%3AUnified_Ideograph>
]REFS]
-*-*-
[145]
[[IVD]]
は、
[[Unicode Consortium]]
の
[[Webサイト]]で公表されています [SRC[>>21]]。
[147] [[UCD]] とは別のデータベースになっていて、
[CITE[The Unicode Standard]]
とは同期せずに、
必要があるときに更新されているようです。
過去に公開された版はそのままで、
新しい版を公開されていく形になっています。
各版で完結しているので、
歴史的経緯を気にしないのであれば常に最新版だけを見ていれば済みます。
;; [148] 常に最新版を表す [[URL]] が提供されていないのが、少し使いづらい。
[FIG(short list)[ [146] [[IVD]] の版
- [CODE[2007-12-14]]
- [CODE[2010-11-14]]
- [CODE[2012-03-02]]
- [CODE[2014-05-16]]
- [CODE[2016-08-15]]
- [CODE[2017-12-12]]
- [CODE[2020-11-06]]
]FIG]
[149]
[[IVD]] の[[ファイル]]
[DFN[[CODE[IVD_Collections.txt]]]],
[DFN[[CODE[IVD_Sequences.txt]]]]
が [[IVD]] の[[集成]]と [[IVS]] の情報を含んだ[[テキストファイル]]です。
その構造は [[UTS #37]] で説明されています [SRC[>>19]] が、
[[UCD]] 同様の [CODE[;]] 区切りの行指向データファイルです。
[150]
[CODE[IVD_Collections.txt]]
には、
[[Ideographic Variation Collection]]
の情報が記述されています。
[[IVC]] を表す識別子、
[[IVC]] 内の識別子の[[正規表現]]、
[[IVC]] の説明の [[Webサイト]]の [[URL]] が書かれています。
[SRC[>>19]]
[152]
[CODE[IVD_Sequences.txt]]
には、
[[IVS]]
の情報が記述されています。
[[IVS]] の各[[文字]]の[[符号点]]、
[[IVC]] を表す識別子、
[[IVC]] 内の識別子の組が並べられています。
[SRC[>>19]]
[151]
[[IVC]] 内の識別子の[[正規表現]]は、
[[IVC]] に属する識別子がすべて[[一致]]しなければならないものです。
[[Perl 5.8]] [[正規表現]]です。
必要となれば拡張のために変更できます。
[SRC[>>19]]
[153]
[[IVC]] を表す識別子と
[[IVC]] に属する識別子は、
[[ASCII英字]]から始まり、
[[ASCII英数字]]、
[CODE[_]],
[CODE[-]],
[CODE[+]]
のいずれかが続くような[[文字列]]です。
[SRC[>>19]]
[154]
このうち [CODE[-]], [CODE[L]] は既存の登録との[[後方互換性]]のために認められるものとされます。
[CODE[_]] に置き換えるか、または除去することで、
固有の識別子を生成できるとされます。
[SRC[>>19]]
[FIG(railroad)[
= [[ASCII英字]]
= |
== [[ASCII英字]]
== [CODE[_]]
== [CODE[-]]
== [CODE[+]]
]FIG]
- [158] [CITE@en-us[Ideographic Variation Database - PRI 349]], [TIME[2017-12-12T13:24:06.000Z]], [TIME[2020-12-25T11:33:58.382Z]] <https://www.unicode.org/ivd/pri/pri349/>
- [156] [CITE@en-us[Ideographic Variation Database - PRI 167]], [TIME[2011-10-25T16:14:42.000Z]], [TIME[2020-12-25T11:32:21.536Z]] <http://www.unicode.org/ivd/pri/pri167/>
- [162] [CITE@en-us[Ideographic Variation Database - PRI 259]], [TIME[2014-05-16T14:27:18.000Z]], [TIME[2020-12-25T11:41:12.377Z]] <http://www.unicode.org/ivd/pri/pri259/>
- [160] [CITE@en-us[Ideographic Variation Database - PRI 326]], [TIME[2020-06-07T13:49:34.000Z]], [TIME[2020-12-25T11:36:38.805Z]] <http://www.unicode.org/ivd/pri/pri326/>
- [159] [CITE@en-us[Ideographic Variation Database - PRI 351]], [TIME[2017-12-12T13:23:25.000Z]], [TIME[2020-12-25T11:36:01.641Z]] <https://www.unicode.org/ivd/pri/pri351/>
- [157] [CITE@en-us[Ideographic Variation Database - PRI 354]], [TIME[2017-12-12T13:22:49.000Z]], [TIME[2020-12-25T11:33:06.802Z]] <https://www.unicode.org/ivd/pri/pri354/>
- [155] [CITE@en-us[PRI 418: Registration of additional sequences in the MSARG collection]], [TIME[2020-11-06T12:59:21.000Z]], [TIME[2020-12-25T11:31:27.110Z]] <https://www.unicode.org/ivd/pri/pri418/>
* 代表グリフ
[63]
ほとんどの
[[SVS]]
の[[代表グリフ]]は、
[[符号表]]に示されています。
[SRC[>>30]]
[69]
[[SVS]]
は、
[[符号表]]の[[文字]]一覧の元の[[文字]]の項に、
[[swung dash]] ([CODE[~]])
で示されています。
[SRC[>>68]]
[70]
[[SVS]]
は、
[[符号表]]の元の[[文字]]の[[ブロック]]の後に[[代表グリフ]]の一覧が付されています。
ただし
[[CJK互換漢字]]用の [[SVS]]
は、
[[CJK統合漢字]]でなく
[[CJK互換漢字]]の側に示されています。
[SRC[>>68]]
[HISTORY[
[71]
[[Unicode]] 8.0
の時代まで、
[[CJK互換漢字]]用を''除く''
[[SVS]]
[WEAK[(後の [[EVS]] を含みます。)]]
の[[字形][代表グリフ]]は
[[UCD]]
の
[DFN[[CODE[StandardizedVariants.html]]]]
に収録されていました。
[[蒙古文字]]のものも含まれ、
[[語頭形]]など複数の字形例が示されたものもありました。
[SRC[>>22]]
;; [85]
[CODE[StandardizedVariants.txt]] [SRC[>>84]]
は
[[Unicode]] 4.0 で追加されたもので、
[[Unicode 3.2]] 時代には
[[HTML]]
しかなかったようです。
[72]
[[Unicode]] 9.0
でこのファイルの内容は削除され [SRC[>>23, >>18]]、
[[Unicode]] 10.0
でファイル自体も削除されました。
[REFS[
- [83] [CITE@en-us[Standardized Variants]], [TIME[2002-03-25T23:26:56.000Z]], [TIME[2020-12-23T12:02:59.224Z]] <https://www.unicode.org/Public/3.2-Update/StandardizedVariants-3.2.0.html>
- [84] [TIME[2003-02-28T02:50:29.000Z]], [TIME[2020-12-23T12:04:29.278Z]] <https://www.unicode.org/Public/4.0-Update/StandardizedVariants-4.0.0.txt>
- [22] [CITE@en-us[Standardized Variants]]
([TIME[2015-05-26T21:39:32.000Z]], [TIME[2020-10-24T05:50:46.389Z]])
<https://unicode.org/Public/8.0.0/ucd/StandardizedVariants.html>
-
[23] [CITE@en-us[Standardized Variants]]
([TIME[2016-04-07T23:12:19.000Z]], [TIME[2020-10-24T05:50:56.522Z]])
<https://unicode.org/Public/9.0.0/ucd/StandardizedVariants.html>
]REFS]
]HISTORY]
-*-*-
[64]
[[EVS]]
の[[代表グリフ]]は、
[[絵文字表]]に示されています。
[SRC[>>30]]
[65]
[[IVS]]
の[[代表グリフ]]は、
[[IVD]] に示された登録中にあります。
[SRC[>>30]]
* 処理
[46]
[[異体列]]は、
定義されたものを除き、
[RUBYB[表示][display]]上の効果を持ちません。
[[異体選択子]]によって[RUBYB[視覚的][visual]]な[RUBYB[見た目][appearance]]は変化しません。
[SRC[>>30]]
[[適合]]する[[処理]]は、
未定義のものを
[[SVS]]
として解釈してはなりません
[SRC[>>105]]。
[108]
[[SVS]] を構成しない[[自由異体選択子]]は無視される[RUBYB[べき][should]]です。
[SRC[>>105]]
[52]
[[異体選択子]]は、
[[結合マーク]]であり[[結合クラス]] [N[0]] で、
[[default ignorable]]
です。
従って[[異体列]]に対応していない場合には、
[[異体選択子]]は[RUBYB[不可視][invisible]]で無視されるべきです。
[SRC[>>30]]
[[異体選択子]]は[RUBYB[視覚的][visual]]な[RUBYB[見た目][appearance]]を持ちません
[SRC[>>105]]。
[53]
[[異体選択子]]が[RUBYB[可視的な見た目][visible appearance]]を与えられるモードや環境があっても構いません。
例えば「隠れたものを表示する」モードで特別な[[グリフ]]で表示しても構いませんし、
[[基底文字]]に[[下波線][下線]]を引いて現在の[[フォント]]では対応できないことを示したりできます。
[SRC[>>30]]
* 標準化
[45]
[[異体選択子]]は、
[[文字符号化]]の一般の拡張機構を想定したものではありません。
[[基底文字]]や [[spacing mark]]
と[[異体選択子]]の組み合わせは、
[[Unicode Consortium]]
が定義するリストにあるものを除き、
[RUBYB[表示][display]]上の効果を持ちません。
[SRC[>>30]]
定義されていないものは、
将来の[[標準化]]のために予約されています [SRC[>>105]]。
[54]
特定の[[異体列]]の[[標準化]]や[RUBYB[対応][support]]は、
[[基底文字]]単独での表現に使うことが出来る[[グリフ]]の集合を制限することにはなりません。
[[利用者]]がある[[文字]]とその特定の異体の[RUBYB[視覚的][visual]]な区別を必要としているなら、
その区別のためには[[フォント]]を使わなければなりません。
[SRC[>>30]]
[55]
[[異体列]]が存在するからといって、
異なる[RUBYB[意味][semantics]]で同じまたは重なる[[グリフ]]の範囲の新しい[[文字]]が将来[[符号化][符号化済文字]]されることを否定するものではありません。
[SRC[>>30]]
* [CODE[<ivs>]] (朝刊太郎)
[25]
[[DTP]]
ソフトウェア
[CITE[[[朝刊太郎・改([TATE[仮称]])][朝刊太郎]]]]は、
[[ASCII文字]]を使った
[DFN[[CODE[<ivs>]]]]
タグという機能で
[[IVS]]
を文字列表現しています。
[118]
[CITE[「[[朝刊太郎]]・改(仮称)」タグの使い方]], [TIME[2019-06-11T13:06:00.000Z]], [TIME[2020-12-24T08:24:21.588Z]] <https://www.chokantaro.com/tag/tag.html#Ivs>
>
[PRE[
辻と<ivs>辻、祇園と<ivs>祇園
兵庫の芦屋市と広島の<ivs>芦田川
]PRE]
>
[PRE[
辻と<ivs=2>辻、祇園と<ivs=2>祇園
兵庫の芦屋市と広島の<ivs=2>芦田川
]PRE]
>異体字の枝番号を省略すると「0」番と判断されます。(実際の枝番号定義から逆算しやすいよう番号はゼロから指定します)
* 私用
[112]
[[Unicode]]
の[[異体列]]は標準化の対象とされ、
[[私用]]の仕組みは用意されていません。
[113]
それとは別に、
[[私用文字]]に独自に[[異体選択子]]的な機能を割り当てている[[応用]]もあります。
-*-*-
[114]
[[Apple]]