New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

一部の絵文字幅が1を返す問題 #1086

Open
mattn opened this Issue Sep 9, 2017 · 4 comments

Comments

Projects
None yet
2 participants
@mattn
Member

mattn commented Sep 9, 2017

#1085 より

これまでの経緯( #1085 より引用 )

絵文字の幅は現状 Unicode でも明確に定義されていません。そして絵文字の幅はフォントに依存します。我々日本人の使うフォントでは2セル使用して表示されますが、英国圏などでそれらの文字は1セルで表示されます。ですので彼らにとってはこちらが正常という事になります。

しかし Unicode のペーパー上は Square (正方形) と書かれています。以前、この問題を解決する為に pull-req を送りました。

vim/vim#665

そして一旦マージされました。

vim/vim@3848e00

しかしこのパッチは、英国圏の人達の動作を壊す形となり、端末上で2セル表示する絵文字のリストは 0x1f000 以上にする修正が行われました。

vim/vim@6a08454

ですので、現状はこれが仕様という事になります。

※ただしこの結果に納得が行っている訳ではありませんので、何かしらの形でリベンジしたいとは思っています。

これを修正する為には、ロケールを使う方法が良いと思っています。参考実装としては go-runwdith です。go-runewidth では LC_CTYPE (or LANG) の値を参照して、CJK (ja, zh, ko)であれば IsEastAsian() で2を返し、文字幅を変えるという動作になっています。

https://github.com/mattn/go-runewidth/blob/master/runewidth_posix.go

Windows の場合は GetConsoleCP が CJK の値を返すかでチェックしています。

https://github.com/mattn/go-runewidth/blob/master/runewidth_windows.go#L20

これを C に焼き直して(というか元々これは glibc を参考にしてる)、その場合だけ vim/vim@6a08454 で刈り取られた絵文字を復活できる様にするのが良いと思っています。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 9, 2017

Member

まずは↑のコードを参考に CJK なら 1 を返す関数を作る所から始めます。

Member

mattn commented Sep 9, 2017

まずは↑のコードを参考に CJK なら 1 を返す関数を作る所から始めます。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 9, 2017

Member

現在の実装で ambiwidth と絡めてると思ってたら絡めてなかった様なので、ambiwidth が double なら失われたリストを復帰する方法でワンチャンな気もします。

Member

mattn commented Sep 9, 2017

現在の実装で ambiwidth と絡めてると思ってたら絡めてなかった様なので、ambiwidth が double なら失われたリストを復帰する方法でワンチャンな気もします。

@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 9, 2017

Member

まずはリーズナブルな以下のパッチで提案して駄目そうならロケール案にしようと思います。

diff --git a/src/mbyte.c b/src/mbyte.c
index f279bdef7..6d7e69be1 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -1406,6 +1406,152 @@ utf_uint2cells(UINT32_T c)
 }
 #endif
 
+/* Sorted list of non-overlapping intervals of all Emoji characters,
+ * based on http://unicode.org/emoji/charts/emoji-list.html */
+static struct interval emoji_all[] =
+{
+    {0x203c, 0x203c},
+    {0x2049, 0x2049},
+    {0x2122, 0x2122},
+    {0x2139, 0x2139},
+    {0x2194, 0x2199},
+    {0x21a9, 0x21aa},
+    {0x231a, 0x231b},
+    {0x2328, 0x2328},
+    {0x23cf, 0x23cf},
+    {0x23e9, 0x23f3},
+    {0x23f8, 0x23fa},
+    {0x24c2, 0x24c2},
+    {0x25aa, 0x25ab},
+    {0x25b6, 0x25b6},
+    {0x25c0, 0x25c0},
+    {0x25fb, 0x25fe},
+    {0x2600, 0x2604},
+    {0x260e, 0x260e},
+    {0x2611, 0x2611},
+    {0x2614, 0x2615},
+    {0x2618, 0x2618},
+    {0x261d, 0x261d},
+    {0x2620, 0x2620},
+    {0x2622, 0x2623},
+    {0x2626, 0x2626},
+    {0x262a, 0x262a},
+    {0x262e, 0x262f},
+    {0x2638, 0x263a},
+    {0x2640, 0x2640},
+    {0x2642, 0x2642},
+    {0x2648, 0x2653},
+    {0x2660, 0x2660},
+    {0x2663, 0x2663},
+    {0x2665, 0x2666},
+    {0x2668, 0x2668},
+    {0x267b, 0x267b},
+    {0x267f, 0x267f},
+    {0x2692, 0x2697},
+    {0x2699, 0x2699},
+    {0x269b, 0x269c},
+    {0x26a0, 0x26a1},
+    {0x26aa, 0x26ab},
+    {0x26b0, 0x26b1},
+    {0x26bd, 0x26be},
+    {0x26c4, 0x26c5},
+    {0x26c8, 0x26c8},
+    {0x26ce, 0x26cf},
+    {0x26d1, 0x26d1},
+    {0x26d3, 0x26d4},
+    {0x26e9, 0x26ea},
+    {0x26f0, 0x26f5},
+    {0x26f7, 0x26fa},
+    {0x26fd, 0x26fd},
+    {0x2702, 0x2702},
+    {0x2705, 0x2705},
+    {0x2708, 0x270d},
+    {0x270f, 0x270f},
+    {0x2712, 0x2712},
+    {0x2714, 0x2714},
+    {0x2716, 0x2716},
+    {0x271d, 0x271d},
+    {0x2721, 0x2721},
+    {0x2728, 0x2728},
+    {0x2733, 0x2734},
+    {0x2744, 0x2744},
+    {0x2747, 0x2747},
+    {0x274c, 0x274c},
+    {0x274e, 0x274e},
+    {0x2753, 0x2755},
+    {0x2757, 0x2757},
+    {0x2763, 0x2764},
+    {0x2795, 0x2797},
+    {0x27a1, 0x27a1},
+    {0x27b0, 0x27b0},
+    {0x27bf, 0x27bf},
+    {0x2934, 0x2935},
+    {0x2b05, 0x2b07},
+    {0x2b1b, 0x2b1c},
+    {0x2b50, 0x2b50},
+    {0x2b55, 0x2b55},
+    {0x3030, 0x3030},
+    {0x303d, 0x303d},
+    {0x3297, 0x3297},
+    {0x3299, 0x3299},
+    {0x1f004, 0x1f004},
+    {0x1f0cf, 0x1f0cf},
+    {0x1f170, 0x1f171},
+    {0x1f17e, 0x1f17f},
+    {0x1f18e, 0x1f18e},
+    {0x1f191, 0x1f19a},
+    {0x1f1e6, 0x1f1ff},
+    {0x1f201, 0x1f202},
+    {0x1f21a, 0x1f21a},
+    {0x1f22f, 0x1f22f},
+    {0x1f232, 0x1f23a},
+    {0x1f250, 0x1f251},
+    {0x1f300, 0x1f321},
+    {0x1f324, 0x1f393},
+    {0x1f396, 0x1f397},
+    {0x1f399, 0x1f39b},
+    {0x1f39e, 0x1f3f0},
+    {0x1f3f3, 0x1f3f5},
+    {0x1f3f7, 0x1f4fd},
+    {0x1f4ff, 0x1f53d},
+    {0x1f549, 0x1f54e},
+    {0x1f550, 0x1f567},
+    {0x1f56f, 0x1f570},
+    {0x1f573, 0x1f57a},
+    {0x1f587, 0x1f587},
+    {0x1f58a, 0x1f58d},
+    {0x1f590, 0x1f590},
+    {0x1f595, 0x1f596},
+    {0x1f5a4, 0x1f5a5},
+    {0x1f5a8, 0x1f5a8},
+    {0x1f5b1, 0x1f5b2},
+    {0x1f5bc, 0x1f5bc},
+    {0x1f5c2, 0x1f5c4},
+    {0x1f5d1, 0x1f5d3},
+    {0x1f5dc, 0x1f5de},
+    {0x1f5e1, 0x1f5e1},
+    {0x1f5e3, 0x1f5e3},
+    {0x1f5e8, 0x1f5e8},
+    {0x1f5ef, 0x1f5ef},
+    {0x1f5f3, 0x1f5f3},
+    {0x1f5fa, 0x1f64f},
+    {0x1f680, 0x1f6c5},
+    {0x1f6cb, 0x1f6d2},
+    {0x1f6e0, 0x1f6e5},
+    {0x1f6e9, 0x1f6e9},
+    {0x1f6eb, 0x1f6ec},
+    {0x1f6f0, 0x1f6f0},
+    {0x1f6f3, 0x1f6f8},
+    {0x1f910, 0x1f93a},
+    {0x1f93c, 0x1f93e},
+    {0x1f940, 0x1f945},
+    {0x1f947, 0x1f94c},
+    {0x1f950, 0x1f96b},
+    {0x1f980, 0x1f997},
+    {0x1f9c0, 0x1f9c0},
+    {0x1f9d0, 0x1f9e6}
+};
+
 /*
  * For UTF-8 character "c" return 2 for a double-width character, 1 for others.
  * Returns 4 or 6 for an unprintable character.
@@ -1593,8 +1739,16 @@ utf_char2cells(int c)
 	if (intable(doublewidth, sizeof(doublewidth), c))
 	    return 2;
 #endif
-	if (p_emoji && intable(emoji_width, sizeof(emoji_width), c))
-	    return 2;
+	if (p_emoji)
+	{
+	    if (*p_ambw == 'd')
+	    {
+		if (intable(emoji_all, sizeof(emoji_all), c))
+		    return 2;
+	    }
+	    else if (intable(emoji_width, sizeof(emoji_width), c))
+		return 2;
+	}
     }
 
     /* Characters below 0x100 are influenced by 'isprint' option */
@@ -2624,152 +2778,6 @@ utf_printable(int c)
 #endif
 }
 
-/* Sorted list of non-overlapping intervals of all Emoji characters,
- * based on http://unicode.org/emoji/charts/emoji-list.html */
-static struct interval emoji_all[] =
-{
-    {0x203c, 0x203c},
-    {0x2049, 0x2049},
-    {0x2122, 0x2122},
-    {0x2139, 0x2139},
-    {0x2194, 0x2199},
-    {0x21a9, 0x21aa},
-    {0x231a, 0x231b},
-    {0x2328, 0x2328},
-    {0x23cf, 0x23cf},
-    {0x23e9, 0x23f3},
-    {0x23f8, 0x23fa},
-    {0x24c2, 0x24c2},
-    {0x25aa, 0x25ab},
-    {0x25b6, 0x25b6},
-    {0x25c0, 0x25c0},
-    {0x25fb, 0x25fe},
-    {0x2600, 0x2604},
-    {0x260e, 0x260e},
-    {0x2611, 0x2611},
-    {0x2614, 0x2615},
-    {0x2618, 0x2618},
-    {0x261d, 0x261d},
-    {0x2620, 0x2620},
-    {0x2622, 0x2623},
-    {0x2626, 0x2626},
-    {0x262a, 0x262a},
-    {0x262e, 0x262f},
-    {0x2638, 0x263a},
-    {0x2640, 0x2640},
-    {0x2642, 0x2642},
-    {0x2648, 0x2653},
-    {0x2660, 0x2660},
-    {0x2663, 0x2663},
-    {0x2665, 0x2666},
-    {0x2668, 0x2668},
-    {0x267b, 0x267b},
-    {0x267f, 0x267f},
-    {0x2692, 0x2697},
-    {0x2699, 0x2699},
-    {0x269b, 0x269c},
-    {0x26a0, 0x26a1},
-    {0x26aa, 0x26ab},
-    {0x26b0, 0x26b1},
-    {0x26bd, 0x26be},
-    {0x26c4, 0x26c5},
-    {0x26c8, 0x26c8},
-    {0x26ce, 0x26cf},
-    {0x26d1, 0x26d1},
-    {0x26d3, 0x26d4},
-    {0x26e9, 0x26ea},
-    {0x26f0, 0x26f5},
-    {0x26f7, 0x26fa},
-    {0x26fd, 0x26fd},
-    {0x2702, 0x2702},
-    {0x2705, 0x2705},
-    {0x2708, 0x270d},
-    {0x270f, 0x270f},
-    {0x2712, 0x2712},
-    {0x2714, 0x2714},
-    {0x2716, 0x2716},
-    {0x271d, 0x271d},
-    {0x2721, 0x2721},
-    {0x2728, 0x2728},
-    {0x2733, 0x2734},
-    {0x2744, 0x2744},
-    {0x2747, 0x2747},
-    {0x274c, 0x274c},
-    {0x274e, 0x274e},
-    {0x2753, 0x2755},
-    {0x2757, 0x2757},
-    {0x2763, 0x2764},
-    {0x2795, 0x2797},
-    {0x27a1, 0x27a1},
-    {0x27b0, 0x27b0},
-    {0x27bf, 0x27bf},
-    {0x2934, 0x2935},
-    {0x2b05, 0x2b07},
-    {0x2b1b, 0x2b1c},
-    {0x2b50, 0x2b50},
-    {0x2b55, 0x2b55},
-    {0x3030, 0x3030},
-    {0x303d, 0x303d},
-    {0x3297, 0x3297},
-    {0x3299, 0x3299},
-    {0x1f004, 0x1f004},
-    {0x1f0cf, 0x1f0cf},
-    {0x1f170, 0x1f171},
-    {0x1f17e, 0x1f17f},
-    {0x1f18e, 0x1f18e},
-    {0x1f191, 0x1f19a},
-    {0x1f1e6, 0x1f1ff},
-    {0x1f201, 0x1f202},
-    {0x1f21a, 0x1f21a},
-    {0x1f22f, 0x1f22f},
-    {0x1f232, 0x1f23a},
-    {0x1f250, 0x1f251},
-    {0x1f300, 0x1f321},
-    {0x1f324, 0x1f393},
-    {0x1f396, 0x1f397},
-    {0x1f399, 0x1f39b},
-    {0x1f39e, 0x1f3f0},
-    {0x1f3f3, 0x1f3f5},
-    {0x1f3f7, 0x1f4fd},
-    {0x1f4ff, 0x1f53d},
-    {0x1f549, 0x1f54e},
-    {0x1f550, 0x1f567},
-    {0x1f56f, 0x1f570},
-    {0x1f573, 0x1f57a},
-    {0x1f587, 0x1f587},
-    {0x1f58a, 0x1f58d},
-    {0x1f590, 0x1f590},
-    {0x1f595, 0x1f596},
-    {0x1f5a4, 0x1f5a5},
-    {0x1f5a8, 0x1f5a8},
-    {0x1f5b1, 0x1f5b2},
-    {0x1f5bc, 0x1f5bc},
-    {0x1f5c2, 0x1f5c4},
-    {0x1f5d1, 0x1f5d3},
-    {0x1f5dc, 0x1f5de},
-    {0x1f5e1, 0x1f5e1},
-    {0x1f5e3, 0x1f5e3},
-    {0x1f5e8, 0x1f5e8},
-    {0x1f5ef, 0x1f5ef},
-    {0x1f5f3, 0x1f5f3},
-    {0x1f5fa, 0x1f64f},
-    {0x1f680, 0x1f6c5},
-    {0x1f6cb, 0x1f6d2},
-    {0x1f6e0, 0x1f6e5},
-    {0x1f6e9, 0x1f6e9},
-    {0x1f6eb, 0x1f6ec},
-    {0x1f6f0, 0x1f6f0},
-    {0x1f6f3, 0x1f6f8},
-    {0x1f910, 0x1f93a},
-    {0x1f93c, 0x1f93e},
-    {0x1f940, 0x1f945},
-    {0x1f947, 0x1f94c},
-    {0x1f950, 0x1f96b},
-    {0x1f980, 0x1f997},
-    {0x1f9c0, 0x1f9c0},
-    {0x1f9d0, 0x1f9e6}
-};
-
 /*
  * Get class of a Unicode character.
  * 0: white space
Member

mattn commented Sep 9, 2017

まずはリーズナブルな以下のパッチで提案して駄目そうならロケール案にしようと思います。

diff --git a/src/mbyte.c b/src/mbyte.c
index f279bdef7..6d7e69be1 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -1406,6 +1406,152 @@ utf_uint2cells(UINT32_T c)
 }
 #endif
 
+/* Sorted list of non-overlapping intervals of all Emoji characters,
+ * based on http://unicode.org/emoji/charts/emoji-list.html */
+static struct interval emoji_all[] =
+{
+    {0x203c, 0x203c},
+    {0x2049, 0x2049},
+    {0x2122, 0x2122},
+    {0x2139, 0x2139},
+    {0x2194, 0x2199},
+    {0x21a9, 0x21aa},
+    {0x231a, 0x231b},
+    {0x2328, 0x2328},
+    {0x23cf, 0x23cf},
+    {0x23e9, 0x23f3},
+    {0x23f8, 0x23fa},
+    {0x24c2, 0x24c2},
+    {0x25aa, 0x25ab},
+    {0x25b6, 0x25b6},
+    {0x25c0, 0x25c0},
+    {0x25fb, 0x25fe},
+    {0x2600, 0x2604},
+    {0x260e, 0x260e},
+    {0x2611, 0x2611},
+    {0x2614, 0x2615},
+    {0x2618, 0x2618},
+    {0x261d, 0x261d},
+    {0x2620, 0x2620},
+    {0x2622, 0x2623},
+    {0x2626, 0x2626},
+    {0x262a, 0x262a},
+    {0x262e, 0x262f},
+    {0x2638, 0x263a},
+    {0x2640, 0x2640},
+    {0x2642, 0x2642},
+    {0x2648, 0x2653},
+    {0x2660, 0x2660},
+    {0x2663, 0x2663},
+    {0x2665, 0x2666},
+    {0x2668, 0x2668},
+    {0x267b, 0x267b},
+    {0x267f, 0x267f},
+    {0x2692, 0x2697},
+    {0x2699, 0x2699},
+    {0x269b, 0x269c},
+    {0x26a0, 0x26a1},
+    {0x26aa, 0x26ab},
+    {0x26b0, 0x26b1},
+    {0x26bd, 0x26be},
+    {0x26c4, 0x26c5},
+    {0x26c8, 0x26c8},
+    {0x26ce, 0x26cf},
+    {0x26d1, 0x26d1},
+    {0x26d3, 0x26d4},
+    {0x26e9, 0x26ea},
+    {0x26f0, 0x26f5},
+    {0x26f7, 0x26fa},
+    {0x26fd, 0x26fd},
+    {0x2702, 0x2702},
+    {0x2705, 0x2705},
+    {0x2708, 0x270d},
+    {0x270f, 0x270f},
+    {0x2712, 0x2712},
+    {0x2714, 0x2714},
+    {0x2716, 0x2716},
+    {0x271d, 0x271d},
+    {0x2721, 0x2721},
+    {0x2728, 0x2728},
+    {0x2733, 0x2734},
+    {0x2744, 0x2744},
+    {0x2747, 0x2747},
+    {0x274c, 0x274c},
+    {0x274e, 0x274e},
+    {0x2753, 0x2755},
+    {0x2757, 0x2757},
+    {0x2763, 0x2764},
+    {0x2795, 0x2797},
+    {0x27a1, 0x27a1},
+    {0x27b0, 0x27b0},
+    {0x27bf, 0x27bf},
+    {0x2934, 0x2935},
+    {0x2b05, 0x2b07},
+    {0x2b1b, 0x2b1c},
+    {0x2b50, 0x2b50},
+    {0x2b55, 0x2b55},
+    {0x3030, 0x3030},
+    {0x303d, 0x303d},
+    {0x3297, 0x3297},
+    {0x3299, 0x3299},
+    {0x1f004, 0x1f004},
+    {0x1f0cf, 0x1f0cf},
+    {0x1f170, 0x1f171},
+    {0x1f17e, 0x1f17f},
+    {0x1f18e, 0x1f18e},
+    {0x1f191, 0x1f19a},
+    {0x1f1e6, 0x1f1ff},
+    {0x1f201, 0x1f202},
+    {0x1f21a, 0x1f21a},
+    {0x1f22f, 0x1f22f},
+    {0x1f232, 0x1f23a},
+    {0x1f250, 0x1f251},
+    {0x1f300, 0x1f321},
+    {0x1f324, 0x1f393},
+    {0x1f396, 0x1f397},
+    {0x1f399, 0x1f39b},
+    {0x1f39e, 0x1f3f0},
+    {0x1f3f3, 0x1f3f5},
+    {0x1f3f7, 0x1f4fd},
+    {0x1f4ff, 0x1f53d},
+    {0x1f549, 0x1f54e},
+    {0x1f550, 0x1f567},
+    {0x1f56f, 0x1f570},
+    {0x1f573, 0x1f57a},
+    {0x1f587, 0x1f587},
+    {0x1f58a, 0x1f58d},
+    {0x1f590, 0x1f590},
+    {0x1f595, 0x1f596},
+    {0x1f5a4, 0x1f5a5},
+    {0x1f5a8, 0x1f5a8},
+    {0x1f5b1, 0x1f5b2},
+    {0x1f5bc, 0x1f5bc},
+    {0x1f5c2, 0x1f5c4},
+    {0x1f5d1, 0x1f5d3},
+    {0x1f5dc, 0x1f5de},
+    {0x1f5e1, 0x1f5e1},
+    {0x1f5e3, 0x1f5e3},
+    {0x1f5e8, 0x1f5e8},
+    {0x1f5ef, 0x1f5ef},
+    {0x1f5f3, 0x1f5f3},
+    {0x1f5fa, 0x1f64f},
+    {0x1f680, 0x1f6c5},
+    {0x1f6cb, 0x1f6d2},
+    {0x1f6e0, 0x1f6e5},
+    {0x1f6e9, 0x1f6e9},
+    {0x1f6eb, 0x1f6ec},
+    {0x1f6f0, 0x1f6f0},
+    {0x1f6f3, 0x1f6f8},
+    {0x1f910, 0x1f93a},
+    {0x1f93c, 0x1f93e},
+    {0x1f940, 0x1f945},
+    {0x1f947, 0x1f94c},
+    {0x1f950, 0x1f96b},
+    {0x1f980, 0x1f997},
+    {0x1f9c0, 0x1f9c0},
+    {0x1f9d0, 0x1f9e6}
+};
+
 /*
  * For UTF-8 character "c" return 2 for a double-width character, 1 for others.
  * Returns 4 or 6 for an unprintable character.
@@ -1593,8 +1739,16 @@ utf_char2cells(int c)
 	if (intable(doublewidth, sizeof(doublewidth), c))
 	    return 2;
 #endif
-	if (p_emoji && intable(emoji_width, sizeof(emoji_width), c))
-	    return 2;
+	if (p_emoji)
+	{
+	    if (*p_ambw == 'd')
+	    {
+		if (intable(emoji_all, sizeof(emoji_all), c))
+		    return 2;
+	    }
+	    else if (intable(emoji_width, sizeof(emoji_width), c))
+		return 2;
+	}
     }
 
     /* Characters below 0x100 are influenced by 'isprint' option */
@@ -2624,152 +2778,6 @@ utf_printable(int c)
 #endif
 }
 
-/* Sorted list of non-overlapping intervals of all Emoji characters,
- * based on http://unicode.org/emoji/charts/emoji-list.html */
-static struct interval emoji_all[] =
-{
-    {0x203c, 0x203c},
-    {0x2049, 0x2049},
-    {0x2122, 0x2122},
-    {0x2139, 0x2139},
-    {0x2194, 0x2199},
-    {0x21a9, 0x21aa},
-    {0x231a, 0x231b},
-    {0x2328, 0x2328},
-    {0x23cf, 0x23cf},
-    {0x23e9, 0x23f3},
-    {0x23f8, 0x23fa},
-    {0x24c2, 0x24c2},
-    {0x25aa, 0x25ab},
-    {0x25b6, 0x25b6},
-    {0x25c0, 0x25c0},
-    {0x25fb, 0x25fe},
-    {0x2600, 0x2604},
-    {0x260e, 0x260e},
-    {0x2611, 0x2611},
-    {0x2614, 0x2615},
-    {0x2618, 0x2618},
-    {0x261d, 0x261d},
-    {0x2620, 0x2620},
-    {0x2622, 0x2623},
-    {0x2626, 0x2626},
-    {0x262a, 0x262a},
-    {0x262e, 0x262f},
-    {0x2638, 0x263a},
-    {0x2640, 0x2640},
-    {0x2642, 0x2642},
-    {0x2648, 0x2653},
-    {0x2660, 0x2660},
-    {0x2663, 0x2663},
-    {0x2665, 0x2666},
-    {0x2668, 0x2668},
-    {0x267b, 0x267b},
-    {0x267f, 0x267f},
-    {0x2692, 0x2697},
-    {0x2699, 0x2699},
-    {0x269b, 0x269c},
-    {0x26a0, 0x26a1},
-    {0x26aa, 0x26ab},
-    {0x26b0, 0x26b1},
-    {0x26bd, 0x26be},
-    {0x26c4, 0x26c5},
-    {0x26c8, 0x26c8},
-    {0x26ce, 0x26cf},
-    {0x26d1, 0x26d1},
-    {0x26d3, 0x26d4},
-    {0x26e9, 0x26ea},
-    {0x26f0, 0x26f5},
-    {0x26f7, 0x26fa},
-    {0x26fd, 0x26fd},
-    {0x2702, 0x2702},
-    {0x2705, 0x2705},
-    {0x2708, 0x270d},
-    {0x270f, 0x270f},
-    {0x2712, 0x2712},
-    {0x2714, 0x2714},
-    {0x2716, 0x2716},
-    {0x271d, 0x271d},
-    {0x2721, 0x2721},
-    {0x2728, 0x2728},
-    {0x2733, 0x2734},
-    {0x2744, 0x2744},
-    {0x2747, 0x2747},
-    {0x274c, 0x274c},
-    {0x274e, 0x274e},
-    {0x2753, 0x2755},
-    {0x2757, 0x2757},
-    {0x2763, 0x2764},
-    {0x2795, 0x2797},
-    {0x27a1, 0x27a1},
-    {0x27b0, 0x27b0},
-    {0x27bf, 0x27bf},
-    {0x2934, 0x2935},
-    {0x2b05, 0x2b07},
-    {0x2b1b, 0x2b1c},
-    {0x2b50, 0x2b50},
-    {0x2b55, 0x2b55},
-    {0x3030, 0x3030},
-    {0x303d, 0x303d},
-    {0x3297, 0x3297},
-    {0x3299, 0x3299},
-    {0x1f004, 0x1f004},
-    {0x1f0cf, 0x1f0cf},
-    {0x1f170, 0x1f171},
-    {0x1f17e, 0x1f17f},
-    {0x1f18e, 0x1f18e},
-    {0x1f191, 0x1f19a},
-    {0x1f1e6, 0x1f1ff},
-    {0x1f201, 0x1f202},
-    {0x1f21a, 0x1f21a},
-    {0x1f22f, 0x1f22f},
-    {0x1f232, 0x1f23a},
-    {0x1f250, 0x1f251},
-    {0x1f300, 0x1f321},
-    {0x1f324, 0x1f393},
-    {0x1f396, 0x1f397},
-    {0x1f399, 0x1f39b},
-    {0x1f39e, 0x1f3f0},
-    {0x1f3f3, 0x1f3f5},
-    {0x1f3f7, 0x1f4fd},
-    {0x1f4ff, 0x1f53d},
-    {0x1f549, 0x1f54e},
-    {0x1f550, 0x1f567},
-    {0x1f56f, 0x1f570},
-    {0x1f573, 0x1f57a},
-    {0x1f587, 0x1f587},
-    {0x1f58a, 0x1f58d},
-    {0x1f590, 0x1f590},
-    {0x1f595, 0x1f596},
-    {0x1f5a4, 0x1f5a5},
-    {0x1f5a8, 0x1f5a8},
-    {0x1f5b1, 0x1f5b2},
-    {0x1f5bc, 0x1f5bc},
-    {0x1f5c2, 0x1f5c4},
-    {0x1f5d1, 0x1f5d3},
-    {0x1f5dc, 0x1f5de},
-    {0x1f5e1, 0x1f5e1},
-    {0x1f5e3, 0x1f5e3},
-    {0x1f5e8, 0x1f5e8},
-    {0x1f5ef, 0x1f5ef},
-    {0x1f5f3, 0x1f5f3},
-    {0x1f5fa, 0x1f64f},
-    {0x1f680, 0x1f6c5},
-    {0x1f6cb, 0x1f6d2},
-    {0x1f6e0, 0x1f6e5},
-    {0x1f6e9, 0x1f6e9},
-    {0x1f6eb, 0x1f6ec},
-    {0x1f6f0, 0x1f6f0},
-    {0x1f6f3, 0x1f6f8},
-    {0x1f910, 0x1f93a},
-    {0x1f93c, 0x1f93e},
-    {0x1f940, 0x1f945},
-    {0x1f947, 0x1f94c},
-    {0x1f950, 0x1f96b},
-    {0x1f980, 0x1f997},
-    {0x1f9c0, 0x1f9c0},
-    {0x1f9d0, 0x1f9e6}
-};
-
 /*
  * Get class of a Unicode character.
  * 0: white space
@mattn

This comment has been minimized.

Show comment
Hide comment
@mattn

mattn Sep 9, 2017

Member

鉄は熱い内に叩けという事で

vim/vim#2074

Member

mattn commented Sep 9, 2017

鉄は熱い内に叩けという事で

vim/vim#2074

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment