windows Terminalの問題「特定の絵文字が半角（サイズ1/4）」「罫線の縦線が削除」が解決した。異文字セレクタ付けただけ



## 2023年5月28日追記
　windows Terminal 1.18で「特定の絵文字が半角（サイズ1/4）」問題は解決した。長かった
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/5ffcfb92-abb4-0222-2623-5f89fdef21f5.png)

# はじめに
　windows Terminalは楽しいターミナルだが以下2点の悲しい点がある。

1. 罫線素片「┌┐└┘│─」が半角なのと、縦線が細い場合消える。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/c5e09ed0-926b-6175-b32c-a39388ae54e9.png)


1. 絵文字の一部が四分の一になる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/6d022429-95b3-60ac-f671-583a1647710b.png)

　他力本願ですが、世界の誰かに修正して欲しくて、Githubでの提案をみているが動きはない。やはり英語圏で作っているから東アジアの言語への扱いは後回しなのだろうか？
　それならば自分でGithubに提案しようと思い原因を調査した。
　それにしても、Githubは英語だしプログラム言語はやっぱり高難度のC++だし、かなり大変そうだ。

## 罫線が半角で、縦線が消える原因
　C++言語で作成されているWindows Terminalのソースコードを眺めてた結果、「CodepointWidthDetector.cpp」が原因のようだ。そのファイル中で、罫線素片【Unicode：0x2500 ～ 0x259f】の幅設定が「Narrow」になっている。（欧米か！　なんでや！）

## 絵文字の一部が半角の原因
　C++言語で作成されているWindows Terminalのソースコード・ファイル「CodepointWidthDetector.cpp」の絵文字の幅設定が「Ambiguous（曖昧）」もしくはコードの幅設定が「未定義」となっていると1/4になるらしい。以下代表例です。

```text
⛰26F0　Ambiguous　→1/4になる(# ﾟДﾟ)
🏒1F3D2　Wide　→正しい大きさ
🏓1F3D3　Wide　→正しい大きさ
🏔1F3D4　未設定　→1/4になる(# ﾟДﾟ)
🏕1F3D5　未設定　→1/4になる(# ﾟДﾟ)
🏖1F3D6　未設定　→1/4になる(# ﾟДﾟ)
🏗1F3D7　未設定　→1/4になる(# ﾟДﾟ)
🏘1F3D8　未設定　→1/4になる(# ﾟДﾟ)
🏜1F3DC　未設定　→1/4になる(# ﾟДﾟ)
🎎1F38E　wide　→正しい大きさ
🎏1F38F　wide　→正しい大きさ
```

# あれ、まてよ・・・
　上の代表絵文字をパソコン画面で見たら、白黒の絵文字が、WindowsTerminal上で規則正しく1/4だ。
　（スマホで見るとカラー絵文字になってしまいますが）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/9f6289de-6031-d387-ba4c-69d5d778af2b.png)
**白黒の絵文字は「異体字セレクタ（絵文字セレクタ or バリエーションセレクタ16）」を付けたら、カラー絵文字になる。**
　異体字セレクタは複雑だが、とりあえず「\uFE0F」を、カラーにしたい白黒絵文字の後ろにつけてみる。
　尚、異体字セレクタは複数があるが、「\uFE0E」はテキストスタイルになるようだ。
- [バリエーションセレクター16について](https://www.emojiall.com/ja/emoji/%EF%B8%8F)
- [テキストスタイルがVS15: U+FE0E](https://unicode-table.com/jp/FE0E/)
- [絵文字スタイルがVS16: U+FE0F](https://unicode-table.com/jp/FE0F/)

## ⛰ + ️ = ⛰️
## 🏔 + ️ = 🏔️
## 🏜 + ️ = 🏜️

上記のようになる。ということは？


# 絵文字に異体字セレクタをくっつけてwindows Terminalで表示すれば？！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/a5eb3dca-746f-3084-b6ff-e2605b65bbfd.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157498/de7a6bf4-85e9-e8b1-3336-96b6e237afa1.png)

　おお！　できた！！　てか知らんわ！！！　こんな設定！！！　ともかく、めでたい。めでたい。


# ちなみにwindows Terminalの文字幅設定しているソースコード

「CodepointWidthDetector.cpp」の一部を抜粋「version :1.12.10334.0」

```C++:CodepointWidthDetector.cpp

    static constexpr std::array<UnicodeRange, 295> s_wideAndAmbiguousTable{
        UnicodeRange{ 0xa1, 0xa1, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xa4, 0xa4, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xa7, 0xa8, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xaa, 0xaa, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xad, 0xae, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xb0, 0xb4, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xb6, 0xba, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xbc, 0xbf, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xc6, 0xc6, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xd0, 0xd0, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xd7, 0xd8, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xde, 0xe1, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xe6, 0xe6, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xe8, 0xea, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xec, 0xed, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xf0, 0xf0, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xf2, 0xf3, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xf7, 0xfa, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xfc, 0xfc, CodepointWidth::Ambiguous },
        UnicodeRange{ 0xfe, 0xfe, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x101, 0x101, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x111, 0x111, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x113, 0x113, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x11b, 0x11b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x126, 0x127, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x12b, 0x12b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x131, 0x133, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x138, 0x138, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x13f, 0x142, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x144, 0x144, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x148, 0x14b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x14d, 0x14d, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x152, 0x153, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x166, 0x167, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x16b, 0x16b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1ce, 0x1ce, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1d0, 0x1d0, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1d2, 0x1d2, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1d4, 0x1d4, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1d6, 0x1d6, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1d8, 0x1d8, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1da, 0x1da, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1dc, 0x1dc, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x251, 0x251, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x261, 0x261, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2c4, 0x2c4, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2c7, 0x2c7, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2c9, 0x2cb, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2cd, 0x2cd, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2d0, 0x2d0, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2d8, 0x2db, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2dd, 0x2dd, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2df, 0x2df, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x300, 0x36f, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x391, 0x3a1, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x3a3, 0x3a9, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x3b1, 0x3c1, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x3c3, 0x3c9, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x401, 0x401, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x410, 0x44f, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x451, 0x451, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x1100, 0x115f, CodepointWidth::Wide },//ハングル字母の途中まで
        UnicodeRange{ 0x2010, 0x2010, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2013, 0x2016, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2018, 0x2019, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x201c, 0x201d, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2020, 0x2022, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2024, 0x2027, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2030, 0x2030, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2032, 0x2033, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2035, 0x2035, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x203b, 0x203b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x203e, 0x203e, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2074, 0x2074, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x207f, 0x207f, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2081, 0x2084, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x20ac, 0x20ac, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2103, 0x2103, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2105, 0x2105, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2109, 0x2109, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2113, 0x2113, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2116, 0x2116, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2121, 0x2122, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2126, 0x2126, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x212b, 0x212b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2153, 0x2154, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x215b, 0x215e, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2160, 0x216b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2170, 0x2179, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2189, 0x2189, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2190, 0x2199, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x21b8, 0x21b9, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x21d2, 0x21d2, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x21d4, 0x21d4, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x21e7, 0x21e7, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2200, 0x2200, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2202, 0x2203, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2207, 0x2208, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x220b, 0x220b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x220f, 0x220f, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2211, 0x2211, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2215, 0x2215, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x221a, 0x221a, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x221d, 0x2220, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2223, 0x2223, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2225, 0x2225, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2227, 0x222c, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x222e, 0x222e, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2234, 0x2237, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x223c, 0x223d, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2248, 0x2248, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x224c, 0x224c, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2252, 0x2252, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2260, 0x2261, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2264, 0x2267, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x226a, 0x226b, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x226e, 0x226f, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2282, 0x2283, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2286, 0x2287, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2295, 0x2295, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2299, 0x2299, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x22a5, 0x22a5, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x22bf, 0x22bf, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x2312, 0x2312, CodepointWidth::Ambiguous },
        UnicodeRange{ 0x231a, 0x231b, CodepointWidth::Wide },//その他の技術的記号「⌚,⌛」
        UnicodeRange{ 0x2329, 0x232a, CodepointWidth::Wide },//その他の技術的記号「〈,〉」
        UnicodeRange{ 0x23e9, 0x23ec, CodepointWidth::Wide },//その他の技術的記号「⏩,⏪,⏫,⏬」
        UnicodeRange{ 0x23f0, 0x23f0, CodepointWidth::Wide },//その他の技術的記号「⏰」
        UnicodeRange{ 0x23f3, 0x23f3, CodepointWidth::Wide },//その他の技術的記号「⏳」
        UnicodeRange{ 0x2460, 0x24e9, CodepointWidth::Ambiguous },//「①️️～ⓩ」
        UnicodeRange{ 0x24eb, 0x24ff, CodepointWidth::Ambiguous },//「⓫～⓿」
        UnicodeRange{ 0x2500, 0x259f, CodepointWidth::Narrow }, // box-drawing and block elements require 1-cell alignment　罫線素片～ブロック要素「─　～　▟」
        UnicodeRange{ 0x25a0, 0x25a1, CodepointWidth::Ambiguous },         //　　■,□,
        UnicodeRange{ 0x25a3, 0x25a9, CodepointWidth::Ambiguous },         //  ▣,▩, 
        UnicodeRange{ 0x25b2, 0x25b3, CodepointWidth::Ambiguous },         //   ▲,△,
        UnicodeRange{ 0x25b6, 0x25b7, CodepointWidth::Ambiguous },         //   ▶,▷,
        UnicodeRange{ 0x25bc, 0x25bd, CodepointWidth::Ambiguous },         //   ▼,▽,
        UnicodeRange{ 0x25c0, 0x25c1, CodepointWidth::Ambiguous },         //   ◀,◁,
        UnicodeRange{ 0x25c6, 0x25c8, CodepointWidth::Ambiguous },         //   ◆,◈,
        UnicodeRange{ 0x25cb, 0x25cb, CodepointWidth::Ambiguous },         //   ○,○,
        UnicodeRange{ 0x25ce, 0x25d1, CodepointWidth::Ambiguous },         //   ◎,◑,
        UnicodeRange{ 0x25e2, 0x25e5, CodepointWidth::Ambiguous },         //   ◢,◥,
        UnicodeRange{ 0x25ef, 0x25ef, CodepointWidth::Ambiguous },         //   ◯,◯,
        UnicodeRange{ 0x25fd, 0x25fe, CodepointWidth::Wide },              //   ◽,◾,
        UnicodeRange{ 0x2605, 0x2606, CodepointWidth::Ambiguous },         //   ★,☆,
        UnicodeRange{ 0x2609, 0x2609, CodepointWidth::Ambiguous },         //   ☉,☉,
        UnicodeRange{ 0x260e, 0x260f, CodepointWidth::Ambiguous },         //   ☎,☏,
        UnicodeRange{ 0x2614, 0x2615, CodepointWidth::Wide },              //   ☔,
        UnicodeRange{ 0x261c, 0x261c, CodepointWidth::Ambiguous },         //   ☜,☜,
        UnicodeRange{ 0x261e, 0x261e, CodepointWidth::Ambiguous },         //   ☞,☞,
        UnicodeRange{ 0x2640, 0x2640, CodepointWidth::Ambiguous },         //   ♀,♀,
        UnicodeRange{ 0x2642, 0x2642, CodepointWidth::Ambiguous },         //   ♂,♂,
        UnicodeRange{ 0x2648, 0x2653, CodepointWidth::Wide },              //  ♈,♓,
        UnicodeRange{ 0x2660, 0x2661, CodepointWidth::Ambiguous },         //   ♠,♡,
        UnicodeRange{ 0x2663, 0x2665, CodepointWidth::Ambiguous },         //   ♣,♥,
        UnicodeRange{ 0x2667, 0x266a, CodepointWidth::Ambiguous },         //   ♧,♪,
        UnicodeRange{ 0x266c, 0x266d, CodepointWidth::Ambiguous },         //  ♬,♭, 
        UnicodeRange{ 0x266f, 0x266f, CodepointWidth::Ambiguous },         //   ♯,♯,
        UnicodeRange{ 0x267f, 0x267f, CodepointWidth::Wide },              //   ♿,
        UnicodeRange{ 0x2693, 0x2693, CodepointWidth::Wide },              //   ⚓,
        UnicodeRange{ 0x269e, 0x269f, CodepointWidth::Ambiguous },         //   ⚞,⚟,
        UnicodeRange{ 0x26a1, 0x26a1, CodepointWidth::Wide },              //   ⚡,
        UnicodeRange{ 0x26aa, 0x26ab, CodepointWidth::Wide },              //  ⚪,⚫,
        UnicodeRange{ 0x26bd, 0x26be, CodepointWidth::Wide },              //   ⚽,
        UnicodeRange{ 0x26bf, 0x26bf, CodepointWidth::Ambiguous },         //   ⚿,⚿,
        UnicodeRange{ 0x26c4, 0x26c5, CodepointWidth::Wide },              //  ⛄,⛅
        UnicodeRange{ 0x26c6, 0x26cd, CodepointWidth::Ambiguous },         //   ⛆,⛍,
        UnicodeRange{ 0x26ce, 0x26ce, CodepointWidth::Wide },              //   ⛎,
        UnicodeRange{ 0x26cf, 0x26d3, CodepointWidth::Ambiguous },         //   ⛏,⛓
        UnicodeRange{ 0x26d4, 0x26d4, CodepointWidth::Wide },              //   ⛔,
        UnicodeRange{ 0x26d5, 0x26e1, CodepointWidth::Ambiguous },         //   ⛕,⛡,
        UnicodeRange{ 0x26e3, 0x26e3, CodepointWidth::Ambiguous },         //   ⛣,⛣,
        UnicodeRange{ 0x26e8, 0x26e9, CodepointWidth::Ambiguous },         //   ⛨,⛩
        UnicodeRange{ 0x26ea, 0x26ea, CodepointWidth::Wide },              //   ⛪,
        UnicodeRange{ 0x26eb, 0x26f1, CodepointWidth::Ambiguous },         //   ⛫,⛱
        UnicodeRange{ 0x26f2, 0x26f3, CodepointWidth::Wide },              //   ⛲,
        UnicodeRange{ 0x26f4, 0x26f4, CodepointWidth::Ambiguous },         //   ⛴,
        UnicodeRange{ 0x26f5, 0x26f5, CodepointWidth::Wide },              //   ⛵,
        UnicodeRange{ 0x26f6, 0x26f9, CodepointWidth::Ambiguous },         //   ⛶,⛹,
        UnicodeRange{ 0x26fa, 0x26fa, CodepointWidth::Wide },              //   ⛺,
        UnicodeRange{ 0x26fb, 0x26fc, CodepointWidth::Ambiguous },         //   ⛻,⛼,
        UnicodeRange{ 0x26fd, 0x26fd, CodepointWidth::Wide },              //   ⛽,⛽
        UnicodeRange{ 0x26fe, 0x26ff, CodepointWidth::Ambiguous },         //   ⛾,⛿,
        UnicodeRange{ 0x2705, 0x2705, CodepointWidth::Wide },              //   ✅,
        UnicodeRange{ 0x270a, 0x270b, CodepointWidth::Wide },              //   ✊,✋
        UnicodeRange{ 0x2728, 0x2728, CodepointWidth::Wide },              //   ✨,
        UnicodeRange{ 0x273d, 0x273d, CodepointWidth::Ambiguous },         //   ✽,✽,
        UnicodeRange{ 0x274c, 0x274c, CodepointWidth::Wide },              //   ❌,
        UnicodeRange{ 0x274e, 0x274e, CodepointWidth::Wide },              //   ❎,
        UnicodeRange{ 0x2753, 0x2755, CodepointWidth::Wide },              //  ❓,❕, 
        UnicodeRange{ 0x2757, 0x2757, CodepointWidth::Wide },              //   ❗,❗, 
        UnicodeRange{ 0x2776, 0x277f, CodepointWidth::Ambiguous },         //   ❶,❿,
        UnicodeRange{ 0x2795, 0x2797, CodepointWidth::Wide },              //   ➕,
        UnicodeRange{ 0x27b0, 0x27b0, CodepointWidth::Wide },              //   ➰,
        UnicodeRange{ 0x27bf, 0x27bf, CodepointWidth::Wide },              //   ➿,
        UnicodeRange{ 0x2b1b, 0x2b1c, CodepointWidth::Wide },              //  ⬛,⬜,
        UnicodeRange{ 0x2b50, 0x2b50, CodepointWidth::Wide },              //   ⭐,⭐,
        UnicodeRange{ 0x2b55, 0x2b55, CodepointWidth::Wide },              //   ⭕,⭕,
        UnicodeRange{ 0x2b56, 0x2b59, CodepointWidth::Ambiguous },         //   ⭖,⭙,
        UnicodeRange{ 0x2e80, 0x2e99, CodepointWidth::Wide },              //  ⺀,⺙,
        UnicodeRange{ 0x2e9b, 0x2ef3, CodepointWidth::Wide },              //  ⺛,⻳,
        UnicodeRange{ 0x2f00, 0x2fd5, CodepointWidth::Wide },              //  ⼀,⿕,
        UnicodeRange{ 0x2ff0, 0x2ffb, CodepointWidth::Wide },              //  ⿰,⿻,
        UnicodeRange{ 0x3000, 0x303e, CodepointWidth::Wide },              //  　,〾,
        UnicodeRange{ 0x3041, 0x3096, CodepointWidth::Wide },              //  ぁ,ゖ,
        UnicodeRange{ 0x3099, 0x30ff, CodepointWidth::Wide },              //  ゙,ヿ,
        UnicodeRange{ 0x3105, 0x312f, CodepointWidth::Wide },              //  ㄅ,ㄯ,
        UnicodeRange{ 0x3131, 0x318e, CodepointWidth::Wide },              //  ㄱ,ㆎ,
        UnicodeRange{ 0x3190, 0x31e3, CodepointWidth::Wide },              //  ㆐,㇣,
        UnicodeRange{ 0x31f0, 0x321e, CodepointWidth::Wide },              //  ㇰ,㈞,
        UnicodeRange{ 0x3220, 0x3247, CodepointWidth::Wide },              //  ㈠,㉇,
        UnicodeRange{ 0x3248, 0x324f, CodepointWidth::Ambiguous },         //   ㉈,㉏,
        UnicodeRange{ 0x3250, 0x4dbf, CodepointWidth::Wide },              //  ㉐,䶿,
        UnicodeRange{ 0x4dc0, 0x4dff, CodepointWidth::Narrow }, // hexagramrams are historically s are historically narrow
        UnicodeRange{ 0x4e00, 0xa48c, CodepointWidth::Wide },              //   一,ꒌ,
        UnicodeRange{ 0xa490, 0xa4c6, CodepointWidth::Wide },              //  ꒐,꓆, 
        UnicodeRange{ 0xa960, 0xa97c, CodepointWidth::Wide },              //  ꥠ,ꥼ,
        UnicodeRange{ 0xac00, 0xd7a3, CodepointWidth::Wide },              //  가,힣,
        UnicodeRange{ 0xe000, 0xf8ff, CodepointWidth::Ambiguous },         //   ,,
        UnicodeRange{ 0xf900, 0xfaff, CodepointWidth::Wide },              //  豈,﫿,
        UnicodeRange{ 0xfe00, 0xfe0f, CodepointWidth::Ambiguous },         //   ︀,️,
        UnicodeRange{ 0xfe10, 0xfe19, CodepointWidth::Wide },              //  ︐,︙,
        UnicodeRange{ 0xfe20, 0xfe2f, CodepointWidth::Narrow }, // narrow ccomb Cining ligaturesombining ligatures (split into left/right halves, which take 2 columns together)
        UnicodeRange{ 0xfe30, 0xfe52, CodepointWidth::Wide },              //  ︰,﹒,
        UnicodeRange{ 0xfe54, 0xfe66, CodepointWidth::Wide },              //  ﹔,﹦,
        UnicodeRange{ 0xfe68, 0xfe6b, CodepointWidth::Wide },              //  ﹨,﹫,
        UnicodeRange{ 0xff01, 0xff60, CodepointWidth::Wide },              //  ！,｠,
        UnicodeRange{ 0xffe0, 0xffe6, CodepointWidth::Wide },              //  ￠,￦,
        UnicodeRange{ 0xfffd, 0xfffd, CodepointWidth::Ambiguous },         //   �,�,
        UnicodeRange{ 0x16fe0, 0x16fe4, CodepointWidth::Wide },            //  𖿠,𖿤,
        UnicodeRange{ 0x16ff0, 0x16ff1, CodepointWidth::Wide },            //  𖿰,𖿱,
        UnicodeRange{ 0x17000, 0x187f7, CodepointWidth::Wide },            //  𗀀,𘟷,
        UnicodeRange{ 0x18800, 0x18cd5, CodepointWidth::Wide },            //  𘠀,𘳕,
        UnicodeRange{ 0x18d00, 0x18d08, CodepointWidth::Wide },            //  𘴀,𘴈,
        UnicodeRange{ 0x1b000, 0x1b11e, CodepointWidth::Wide },            //  𛀀,𛄞,
        UnicodeRange{ 0x1b150, 0x1b152, CodepointWidth::Wide },            //  𛅐,𛅒,
        UnicodeRange{ 0x1b164, 0x1b167, CodepointWidth::Wide },            //  𛅤,𛅧,
        UnicodeRange{ 0x1b170, 0x1b2fb, CodepointWidth::Wide },            //  𛅰,𛋻,
        UnicodeRange{ 0x1f004, 0x1f004, CodepointWidth::Wide },            //   🀄,🀄
        UnicodeRange{ 0x1f0cf, 0x1f0cf, CodepointWidth::Wide },            //   🃏,🃏
        UnicodeRange{ 0x1f100, 0x1f10a, CodepointWidth::Ambiguous },       //   🄀,🄊, 
        UnicodeRange{ 0x1f110, 0x1f12d, CodepointWidth::Ambiguous },       //   🄐,🄭,
        UnicodeRange{ 0x1f130, 0x1f169, CodepointWidth::Ambiguous },       //   🄰,🅩,
        UnicodeRange{ 0x1f170, 0x1f18d, CodepointWidth::Ambiguous },       //   🅰,🆍
        UnicodeRange{ 0x1f18e, 0x1f18e, CodepointWidth::Wide },            //   🆎,
        UnicodeRange{ 0x1f18f, 0x1f190, CodepointWidth::Ambiguous },       //   🆏,🆐,
        UnicodeRange{ 0x1f191, 0x1f19a, CodepointWidth::Wide },            //   🆑,
        UnicodeRange{ 0x1f19b, 0x1f1ac, CodepointWidth::Ambiguous },       //   🆛,🆬,
        UnicodeRange{ 0x1f1e6, 0x1f202, CodepointWidth::Wide },            //  ,🈂, 
        UnicodeRange{ 0x1f210, 0x1f23b, CodepointWidth::Wide },            //  🈐,🈻,
        UnicodeRange{ 0x1f240, 0x1f248, CodepointWidth::Wide },            //  🉀,🉈,
        UnicodeRange{ 0x1f250, 0x1f251, CodepointWidth::Wide },            //  🉐,🉑,
        UnicodeRange{ 0x1f260, 0x1f265, CodepointWidth::Wide },            //  🉠,🉥,
        UnicodeRange{ 0x1f300, 0x1f320, CodepointWidth::Wide },            //  🌀,🌠
        UnicodeRange{ 0x1f32d, 0x1f335, CodepointWidth::Wide },            //  🌭,🌵
        UnicodeRange{ 0x1f337, 0x1f37c, CodepointWidth::Wide },            //  🌷,🍼,
        UnicodeRange{ 0x1f37e, 0x1f393, CodepointWidth::Wide },            //   🍾,
        UnicodeRange{ 0x1f3a0, 0x1f3ca, CodepointWidth::Wide },            //   🎠,
        UnicodeRange{ 0x1f3cf, 0x1f3d3, CodepointWidth::Wide },            //   🏏,
        UnicodeRange{ 0x1f3e0, 0x1f3f0, CodepointWidth::Wide },            //   🏠,
        UnicodeRange{ 0x1f3f4, 0x1f3f4, CodepointWidth::Wide },            //   🏴,
        UnicodeRange{ 0x1f3f8, 0x1f43e, CodepointWidth::Wide },            //   🏸,
        UnicodeRange{ 0x1f440, 0x1f440, CodepointWidth::Wide },            //   👀,
        UnicodeRange{ 0x1f442, 0x1f4fc, CodepointWidth::Wide },            //  👂,📼
        UnicodeRange{ 0x1f4ff, 0x1f53d, CodepointWidth::Wide },            //  📿,🔽
        UnicodeRange{ 0x1f54b, 0x1f54e, CodepointWidth::Wide },            //   🕋,
        UnicodeRange{ 0x1f550, 0x1f567, CodepointWidth::Wide },            //   🕐,
        UnicodeRange{ 0x1f57a, 0x1f57a, CodepointWidth::Wide },            //  🕺,🕺,
        UnicodeRange{ 0x1f595, 0x1f596, CodepointWidth::Wide },            //   🖕,🖖
        UnicodeRange{ 0x1f5a4, 0x1f5a4, CodepointWidth::Wide },            //   🖤,
        UnicodeRange{ 0x1f5fb, 0x1f64f, CodepointWidth::Wide },            //   🗻,
        UnicodeRange{ 0x1f680, 0x1f6c5, CodepointWidth::Wide },            //   🚀,
        UnicodeRange{ 0x1f6cc, 0x1f6cc, CodepointWidth::Wide },            //   🛌,
        UnicodeRange{ 0x1f6d0, 0x1f6d2, CodepointWidth::Wide },            //   🛐,
        UnicodeRange{ 0x1f6d5, 0x1f6d7, CodepointWidth::Wide },            //  🛕,🛗
        UnicodeRange{ 0x1f6eb, 0x1f6ec, CodepointWidth::Wide },            //   🛫,
        UnicodeRange{ 0x1f6f4, 0x1f6fc, CodepointWidth::Wide },            //  🛴,🛼
        UnicodeRange{ 0x1f7e0, 0x1f7eb, CodepointWidth::Wide },            //  🟠,🟫,
        UnicodeRange{ 0x1f90c, 0x1f93a, CodepointWidth::Wide },            //  🤌,🤺
        UnicodeRange{ 0x1f93c, 0x1f945, CodepointWidth::Wide },            //   🤼,
        UnicodeRange{ 0x1f947, 0x1f978, CodepointWidth::Wide },            //  🥇,🥸
        UnicodeRange{ 0x1f97a, 0x1f9cb, CodepointWidth::Wide },            //  🥺,🧋
        UnicodeRange{ 0x1f9cd, 0x1f9ff, CodepointWidth::Wide },            //   🧍,🧿
        UnicodeRange{ 0x1fa70, 0x1fa74, CodepointWidth::Wide },            //  🩰,🩴
        UnicodeRange{ 0x1fa78, 0x1fa7a, CodepointWidth::Wide },            //  🩸,🩺
        UnicodeRange{ 0x1fa80, 0x1fa86, CodepointWidth::Wide },            //  🪀,🪆
        UnicodeRange{ 0x1fa90, 0x1faa8, CodepointWidth::Wide },            //  🪐,🪨
        UnicodeRange{ 0x1fab0, 0x1fab6, CodepointWidth::Wide },            //  🪰,🪶,
        UnicodeRange{ 0x1fac0, 0x1fac2, CodepointWidth::Wide },            //  🫀,🫂,
        UnicodeRange{ 0x1fad0, 0x1fad6, CodepointWidth::Wide },            //  🫐,🫖,
        UnicodeRange{ 0x20000, 0x2fffd, CodepointWidth::Wide },            //  𠀀,𯿽,
        UnicodeRange{ 0x30000, 0x3fffd, CodepointWidth::Wide },            //  𰀀,𿿽,
        UnicodeRange{ 0xe0100, 0xe01ef, CodepointWidth::Ambiguous },       //   󠄀,󠇯,
        UnicodeRange{ 0xf0000, 0xffffd, CodepointWidth::Ambiguous },       //   󰀀,󿿽,
        UnicodeRange{ 0x100000, 0x10fffd, CodepointWidth::Ambiguous },     //   􀀀,􏿽,
        

    };
```