Skip to content

Instantly share code, notes, and snippets.

@saitoha
Created February 28, 2013 11:32
Show Gist options
  • Select an option

  • Save saitoha/5056127 to your computer and use it in GitHub Desktop.

Select an option

Save saitoha/5056127 to your computer and use it in GitHub Desktop.
MinEdのCPR判定の部分。端末判定全体を4フェーズに分けたうちの2フェーズ目。
1.  "\u00e5\u0644\u0627\u0e29\u0e29\u5208\u58a2"("åلاษษ刈墢")の幅を計測し、変数swidthに代入する。2.へ
2. swidthが3かつ端末がGNU Screen(DA2応答の端末IDが83)なら"\u00e5\u006c\u0e29\u0e29\u5208\u58a2"("ålษษ刈墢")の幅を計測し、変数swidthに代入する。3.へ
3.  swidthが13なら、4.へ、そうでなければ5.へ
4.  "a\u0321"("å")の幅が1なら、5.へ。そうでなければ、エンコーディングをTIS-620(タイ)と判定し、7へ。
5.  UTF-8モードのPoderosaを判定候補としてマークし、swidthを9で上書き。7.へ
6.  swidthが16なら、ISO Latain1モードのPoderosaとマークする。そうでなければ、7.へ
7.  swidthが9以下なら、8.へ
8.  "a̡"の幅が1なら端末は文字結合をサポートしているとみなす。9.へ
9.  swidthが偶数なら、リガチャ有り。bidiをサポートするとみなす。奇数なら、リガチャ無し。poor man's bidi機能をonにする。10.へ
10. 幅が8未満(6か7)なら、端末はワイド幅文字をサポートしていないとみなし、26.へ。さもなければ11.へ
11. 縦書き用カンマ("\uFE10", "︐")の幅が2以上なら文字幅テーブルのUnicodeバージョンは4.1相当。さもなければ12.へ
12. 二重山括弧+二重角括弧+全角二重括弧("\u300a\u300b\u301a\u301b\uff5f\uff60", "《》〚〛⦅⦆")の幅が9未満なら、文字幅テーブルのUnicodeバージョンは3.0相当(xterm patch#167以前に相当)。さもなければ13.へ
13. ".\u0604.\u0674"の幅が2なら、文字幅テーブルのUnicodeバージョンは6.1相当。さもなければ14.へ
14. ".\u065f.\u093a"の幅が2なら、文字幅テーブルのUnicodeバージョンは6.0相当。さもなければ15.へ
15. ".\u0816.\u0900"の幅が2なら、文字幅テーブルのUnicodeバージョンは5.2相当。さもなければ16.へ
16. ".҇.᷌"の幅が2なら、文字幅テーブルのUnicodeバージョンは5.1相当。さもなければ17.へ
17. ".᷄.᷅"の幅が2なら、文字幅テーブルのUnicodeバージョンは5.0相当。さもなければ18.へ
18. ".͘.͙"の幅が2なら、文字幅テーブルのUnicodeバージョンは4.1相当。さもなければ19.へ
19. ".͐.឴.\u180e"の幅が4なら、文字幅テーブルのUnicodeバージョンは4.0相当。さもなければ20.へ
20. "aͣ"の幅が1なら、文字幅テーブルのUnicodeバージョンは3.2相当。さもなければ21.へ
21. "a\u070f"の幅が1なら、文字幅テーブルのUnicodeバージョンは3.0相当。さもなければ3.0のドラフト段階のもの。22.へ
22. nonbmp_width_dataを"𠀀𠀀𠀀𠀀a𝆪a𝆪a󠀠"の幅-7とする。23.へ
23. nonbmp_width_dataが8以上なら、nonbmp_width_dataを3減らす。24.へ
24. "𐌀𐌰𐐀"の幅が4以上なら、端末はBMPをサポートしない。25.へ
25. "\u3100\u312f\u3130\u318f\ua48e\ua4cf\ufaff\ufe6f\uff00"の幅が18未満なら、Unicode未定義のグリフ幅を1と想定する。26.へ
26. "䷀䷀\u200e"の幅が4未満なら、markus khun版wcwidthに見られるような甲骨文字グリッチを想定する。27.へ
27. 26.の幅が奇数なら、Bidiコントロールを1文字として扱う(xterm patch#230以降やmltermなど)。28へ
28. 1.の幅が13以上なら27.へ
27. "?0?2"の幅が3以上なら、少くともGB18030端末ではない。29.へ。さもなければ28.へ
28. 27.が0以上ならCJK端末。さらに1なら、UTF-16端末。29.へ
29. "????ꥦ?ޡ"の幅が10未満ならUTF-16端末。30.へ
30. "????"の幅が3以上ならUTF-4端末。さもなければ31.へ
30. 29.の幅が0以上かつ1.の幅が15でなければ,CJK端末(おそらくmlterm)。31.へ
31. "???x"の幅が4以上ならすくなくともEUC3端末ではない。32.へ
32. "??"の幅が2未満ならすくなくともCJK low端末ではない。33.へ
33. 1.の幅が11以上であり、13ではなく、15でもなく、18未満であれば、UTF-8端末ではない。
34. 1.の幅が0なら、ASCII端末であるか、Better Terminal on AndroidのようにCPR応答がとれない。eshellやterm.el等もそう。35.へ
35. すでにPoderosaであるとマークされていれば、36.へ
36. "¡×"の幅が3であれば、Poderosa UTF-8モード。38.へ。さもなければ37.へ
37. CJK端末とマークされていなくて、"??"の幅が3であれば、Poderosa ISO-8859-1モード。38.へ
38. 文字幅テーブルはUnicode3.0ドラフト相当。39.へ
39. CJK端末とマークされていれば、40.へ。さもなければ、41.へ
40. CJKエンコードされた"a\u0300"の幅が1なら、端末は文字結合をサポートする。
41. \x80-\xffの範囲の結合文字を、基底文字"a"に追加して、幅が1であれば、端末は文字結合をサポートする。
42. "a\0644\0627"の幅が2なら、端末はリガチャをサポートし、bidiをサポートし、poor mans bidiは必要ない。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment