• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Revision9462 (tree)
Time2021-10-10 00:39:06
Authorzmatsuo

Log Message

絵文字設定について追記した

- html のインデントを 4 から 2 に変更した(.editorconfig)
- unicodebuf-text-emoji.txt の typo 修正
- buffer.c 意図が分かりやすいように修正

Change Summary

Incremental Difference

--- trunk/doc/ja/html/menu/setup-additional-coding.html (revision 9461)
+++ trunk/doc/ja/html/menu/setup-additional-coding.html (revision 9462)
@@ -14,13 +14,22 @@
1414 <dl>
1515 <dt>Ambiguous Characters width</dt>
1616 <dd>
17- 1 Cell または 2 Cell を選択。
17+ 1 Cell または 2 Cell を選択します。
1818 </dd>
1919
2020 <dt>Override Emoji Characters width</dt>
2121 <dd>
22- 文字が絵文字のとき、文字属性を無視して文字幅を設定する場合チェックする<br>
23- 1 Cell または 2 Cell を選択。
22+ チェックすると、絵文字属性のある文字は East_Asian_Width特性を置き換えて文字幅を設定します。
23+ <ul>
24+ <li>コードポイント U+1F000 以上の絵文字は常に2Cell(全角)として扱います。
25+ <li>コードポイント U+1F000 未満の絵文字は
26+ <dl>
27+ <dt>2callが選択されたとき</dt>
28+ <dd>2Cell(全角)として扱う</dd>
29+ <dt>1callが選択されたとき</dt>
30+ <dd>1Cell(半角)として扱う</dd>
31+ </dl>
32+ </ul>
2433 </dd>
2534 </dl>
2635
@@ -28,9 +37,9 @@
2837 <dl>
2938 <dt>中国語,日本語,韓国語(CJK)で使用する場合</dt>
3039 <dd>
31- Japanese/UTF-8 など、"Japanese/" などがついたコーディングを選ぶ<br>
32- →Ambiguous Characters Width が 2cell となる
33- →Override Emoji Characters Width 有効となり 2cell となる
40+ Japanese/UTF-8 など、"Japanese/" などがついたコーディングを選ぶ<br>
41+ →Ambiguous Characters Width が 2Cell となる<br>
42+ →Override Emoji Characters Width 有効となり 2Cell となる
3443 </dd>
3544 </dl>
3645
@@ -37,27 +46,44 @@
3746 <h2>表示される文字について</h2>
3847 Tera Term のリポジトリにテスト用テキストがあるので表示してチェックできます。
3948 <ul>
40- <li>漢字の文字幅<br>
41- "wget https://ja.osdn.net/projects/ttssh2/scm/svn/blobs/head/trunk/tests/unicodebuf-east_asian_width.txt?export=raw -O -"
42- <li>絵文字の文字幅<br>
43- "wget https://ja.osdn.net/projects/ttssh2/scm/svn/blobs/head/trunk/tests/unicodebuf-text-emoji.txt?export=raw -O -"
49+ <li>漢字の文字幅<br>
50+ "wget https://ja.osdn.net/projects/ttssh2/scm/svn/blobs/head/trunk/tests/unicodebuf-east_asian_width.txt?export=raw -O -"
51+ <li>絵文字の文字幅<br>
52+ "wget https://ja.osdn.net/projects/ttssh2/scm/svn/blobs/head/trunk/tests/unicodebuf-text-emoji.txt?export=raw -O -"
4453 </ul>
4554 次のことに注意してください
4655 <ul>
47- <li>フォントのデザイン通り表示されます。
48- <ul>
49- <li>Tera Term が全角,2cellとして表示、デザインが半角,1cellの場合、
50- 半角の後ろにスペースが入ってるように表示されます。
51- <li>Tera Term が半角,1cellとして表示、デザインが全角,2cellの場合、
52- 全角の左半分が表示されます。
53- </ul>
54- </li>
56+ <li>フォントのグリフ(デザイン)通り表示されます。
57+ <ul>
58+ <li>Tera Term が全角,2Cellとして表示、デザインが半角,1Cellの場合、
59+ 半角の後ろにスペースが入ってるように表示されます。
60+ <li>Tera Term が半角,1Cellとして表示、デザインが全角,2Cellの場合、
61+ 全角の左半分が表示されます。
62+ </ul>
63+ </li>
64+ <li>Tera Termの扱う文字幅と、ホストが意図している文字幅が異なることがあります。<br>
65+ プログラム、ライブラリ例
66+ <ul>
67+ <li>テキストエディタ(vim,emacs,nanoなど)
68+ <li>ビュア(more,less,lvなど)
69+ <li>bashなどに組み込まれているreadlineライブラリ(行編集ライブラリ)
70+ <li>aptitudeなどに組み込まれているcursesライブラリ(端末制御ライブラリ)
71+ </ul>
72+ </li>
73+ <li>指定フォントに表示したい文字が収納されていないかもしれません。
74+ <ul>
75+ <li>表示できる文字(指定文字のグリフ)が存在しない場合<br>
76+ OSのよって黒い点「・」(例)が描画されます。OSのバージョンによっては他の表示になるかもしれません。
77+ <li>OSのバージョンによっては、自動的に他のフォントを使って描画されます。<br>
78+ この機能をフォントリンクと呼びます。
79+ </ul>
80+ </li>
5581 </ul>
5682
5783 <h2>East_Asian_Width特性とセル数について</h2>
5884
5985 <p>
60- East Asian Width(東アジアの文字幅)として、
86+ East_Asian_Width特性(東アジアの文字幅)として、
6187 各文字には特性が割り当てられています。
6288 </p>
6389
@@ -90,28 +116,49 @@
90116 </pre>
91117
92118 <p>
93- CJK環境では、Ambiguousの場合に文字幅を2 cellにしたほうが自然です。
119+ CJK環境では、Ambiguousの文字幅を 2Cell にしたほうが自然です。<br>
120+ また、日本語フォントでは 2Cell でデザインされていることがほとんどだと思われます。
94121 </p>
95122
96123 <p>
97- Neutralは東アジアの組版には通常出現しない事になっていますが、
98- 絵文字がこの領域に入っています。
124+ Neutralには絵文字が入っていて、1cellで描画すると日本では不自然な表示となります。
125+ 絵文字の時の文字幅を変更することで自然な表示とすることができます。
126+
127+ <dl>
128+ <dt>例</dt>
129+ <dd>顔 U+263A</dd>
130+ <dd>トランプのスイート U+2764</dd>
131+ <dd><a href="https://ja.wikipedia.org/wiki/%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E8%A8%98%E5%8F%B7">wikipedia</a></dd>
99132 </p>
100133
101134 <p>
102- East Asian Width の特性とは別に、各文字には絵文字属性があります。
103- (Tera TermではコードポイントU+0080未満は絵文字として扱いません)
135+ 次のデータをもとに属性を決定しています。<br>
136+ http://www.unicode.org/Public/UCD/latest/ucd/EastAsianWidth.txt
104137 </p>
105138
139+ <h2>絵文字について</h2>
140+
106141 <p>
107- CJK環境では従来の文字コードで1byteでは表現できない場合は
108- 2cellで扱うほうが自然です。
109- Tera termではEast Asian Widthを無視して2 cellとして扱うことができるよう設定が可能です。
142+ 絵文字属性は East Asian Width の特性とは別の文字特性です。
110143 </p>
111144
112145 <p>
113- また、日本語フォントでは絵文字は2cellでデザインされていることが多いと思われます。
146+ CJK環境では、East_Asian_Width特性と同様、
147+ 従来の文字コードで1byteで表現できない文字は
148+ 2Cell で扱うほうが自然です。
114149 </p>
115150
151+ <p>
152+ 非CJK環境では、従来の文字コードでは全角は存在しなかったので、
153+ 多くの文字を半角として扱うのが自然です。<br>
154+ 顔の絵文字など(コードポイントU+1F000以上)はUnicode以降の文字なので、全角としてあつかってよさそうです。
155+ </p>
156+
157+ <p>
158+ 次の情報をもとに絵文字の判定を行っています。<br>
159+ https://www.unicode.org/Public/emoji/12.1/emoji-data.txt<br>
160+ ただし、コードポイントU+0080未満は絵文字として扱いません。
161+ </p>
162+
116163 </body>
117164 </html>
--- trunk/teraterm/teraterm/buffer.c (revision 9461)
+++ trunk/teraterm/teraterm/buffer.c (revision 9462)
@@ -2212,15 +2212,20 @@
22122212 if (ts_->UnicodeEmojiOverride) {
22132213 if (*emoji) {
22142214 // 絵文字だった場合
2215- if (ts_->UnicodeEmojiWidth == 2) {
2216- // 全角
2217- return FALSE;
2218- } else {
2219- if (u32 >= 0x1f000) {
2215+ if (u32 < 0x1f000) {
2216+ if (ts_->UnicodeEmojiWidth == 2) {
2217+ // 全角
22202218 return FALSE;
22212219 }
2222- return TRUE;
2220+ else {
2221+ // 半角
2222+ return TRUE;
2223+ }
22232224 }
2225+ else {
2226+ // 常に全角
2227+ return FALSE;
2228+ }
22242229 }
22252230 }
22262231 return BuffIsHalfWidthFromPropery(ts_, *width_property);
--- trunk/tests/unicodebuf-text-emoji.txt (revision 9461)
+++ trunk/tests/unicodebuf-text-emoji.txt (revision 9462)
@@ -12,12 +12,12 @@
1212 ☻:U+263B BLACK SMILING FACE
1313 -- Emoji + Half
1414 ない?
15--- Emoji(<U+1F000) + Neautral
15+-- Emoji(<U+1F000) + Neutral
1616 ©:U+00A9 COPYRIGHT SIGN
1717 ☹:U+2639 WHITE FROWNING FACE
1818 ☺:U+263A White Smiling Face
1919 ❤:U+2764 HEAVY BLACK HEART
20--- Emoji(>=U+1F000) + Neautral
20+-- Emoji(>=U+1F000) + Neutral
2121 🏎:U+1F3CE racing car
2222 -- Emoji(>=U+1F000) + Wide
2323 🍣:U+1F363 SUSHI
Show on old repository browser