- ファイル名:
- CharCode.mac
- 概要:
- カーソル行の文字コードを表示します。
- 詳細:
- 秀丸エディタには、すでに「文字コード表示」という機能がありますが、それを少し拡張したようなものです。
- ちなみに私は、Alt + Enter にキーを割り当てています。
- 以下コード:
- // ------------------------------------------------------------
- if (code < 0x20 && unicode < 0x20)
- { beep; endmacro; }
- loaddll "hmjre.dll";
- $SP = " ";
- $menu[0] = "文字サンプル: ";
- $menu[1] = "Shift-JIS(&S): ";
- $menu[2] = "EUC(&E): ";
- $menu[3] = "JIS(&J): ";
- $menu[4] = "Unicode(UTF-32)(&U): ";
- $menu[5] = "Unicode(UTF-16)(&W): ";
- $menu[6] = "Unicode(UTF-8)(&8): ";
- $menu[7] = "more(&M)...";
- $menu[8] = "FileFormat.Info...";
- $menu[9] = "unicode.org...";
- $menu[10] = "ウィクショナリー...";
- #menu=11;
- // ------------------------------------------------------------
- #c = code; // Shift-JIS
- #u = unicode; // UCS-4
- $s = unichar(unicode); // WCHAR
- if ($s == "&")
- $item[0] = "&&";
- else
- $item[0] = $s;
- // ------------------------------------------------------------
- // [1] Shift-JIS
- if (#c == 0)
- $item[1] = "--";
- else
- $item[1] = hex(#c);
- // ------------------------------------------------------------
- // [2] EUC
- // [3] JIS
- if (#c == 0) {
- $item[2] = "--";
- $item[3] = "--";
- } else if (#c < 256) {
- $e = hex(#c);
- $item[2] = $e;
- $item[3] = $e;
- if (0xA0 < #c && #c < 0xE0)
- $item[2] = hex(0x8E00 + #c);
- } else {
- #a = #c / 256;
- #b = #c & 255;
- // if (#a < 0xA0) #a = #a - 0x71; else #a = #a - 0xB1; #a = #a * 2 + 1; if (#b > 0x7E) #b = #b - 1; if (#b > 0x9D) { #b = #b - 0x7D; #a = #a + 1; } else #b = #b - 0x1F; #j = #a * 256 + #b; // orthodox
- if (#a < 224) if (#b < 128) #j = 57631; else if (#b < 159) #j = 57632; else #j = 57470; else if (#b < 128) #j = 90399; else if (#b < 159) #j = 90400; else #j = 90238; #j = #a * 512 + #b - #j; // HmfSjisJis.cpp
- // if (#a > 0xDF) #a = #a - 0x40; if (#b > 0x7F) #b = #b - 1; #a = #a * 2 - 0xE0; if (#b < 0x9E) { #a = #a - 1; #b = #b - 0x1F; } else #b = #b - 0x7D; #j = #a * 256 + #b;
- $item[2] = hex(#j | 0x8080);
- $item[3] = hex(#j );
- }
- // ------------------------------------------------------------
- // [4] Unicode(UTF-32)
- $item[4] = rightstr("0000000" + hex(#u), 8);
- // ------------------------------------------------------------
- // [5] Unicode(UTF-16)
- if (#u >= 0x010000) {
- #i = #u - 0x010000;
- $item[5] = hex(#i / 0x0400 + 0xD800)
- + $SP + hex(#i % 0x0400 + 0xDC00);
- }
- else
- $item[5] = rightstr("000" + hex(#u), 4);
- // ------------------------------------------------------------
- // [6] Unicode(UTF-8)
- $e = "";
- if (#u <= 0x0000007F) { #k = 0x00; #n = 1; }
- else if (#u <= 0x000007FF) { #k = 0xC0; #n = 2; }
- else if (#u <= 0x0000FFFF) { #k = 0xE0; #n = 3; }
- else if (#u <= 0x001FFFFF) { #k = 0xF0; #n = 4; }
- else if (#u <= 0x03FFFFFF) { #k = 0xF8; #n = 5; }
- else if (#u <= 0x7FFFFFFF) { #k = 0xFC; #n = 6; }
- else { beep; endmacro; }
- #i = #u;
- while (#n >= 2) {
- $e = $SP + hex(#i & 0x3F | 0x80) + $e;
- #i = #i / 64;
- #n = #n - 1;
- }
- $item[6] = hex(#i | #k) + $e;
- // ------------------------------------------------------------
- #i = 0; while (#i < #menu) {
- $menu[#i] = $menu[#i] + $item[#i];
- #i = #i + 1;
- }
- // ------------------------------------------------------------
- enabledraw;
- menuarray $menu, #menu; #a = result - 1;
- disabledraw;
- if (#a == -1)
- endmacro;
- else if (#a == 0)
- endmacro;
- else if (#a == 7)
- goto MORE;
- else if (#a == 8)
- run getenv("Comspec") + " /c start http://www.fileformat.info/info/unicode/char/" + hex(unicode) + "/index.htm>NUL";
- else if (#a == 9)
- run getenv("Comspec") + " /c start http://unicode.org/cldr/utility/character.jsp?a=" + hex(unicode) + " >NUL";
- else if (#a == 10) {
- $s = unichar(unicode);
- #ScriptControl = createobject("ScriptControl");
- setpropstr #ScriptControl, "Language", "JScript";
- #CodeObject = getpropobj(#ScriptControl, "CodeObject");
- $s = callmethod_returnstr(#CodeObject, "encodeURIComponent", $s);
- releaseobject #ScriptControl;
- $s = "https://ja.wiktionary.org/wiki/" + $s;
- $s = dllfuncstr("ReplaceRegular", "%", $s, 0, "^%%", 2);
- freedll;
- run getenv("Comspec") + " /c start " + $s + " >NUL";
- }
- else if ($item[#a] != "--") { // 1..6
- begingroupundo;
- insert $item[#a];
- endgroupundo;
- }
- endmacro;
- ////////////////////////////////////////////////////////////////
- MORE:
- $l = $item[4]; // "0001F408"
- $w = $item[5]; // "D83D DC08"
- $b = $item[6]; // "F0 9F 90 88"
- // ------------------------------------------------------------
- // [0] 🐈
- // [1] 🐈
- $item[0] = "&#" + str(#u) + ";";
- $item[1] = "&#x" + hex(#u) + ";";
- // ------------------------------------------------------------
- // [2] 0x0001F408
- // [3] \U0001F408
- $item[2] = "0x" + $l;
- $item[3] = "\\U" + $l;
- // ------------------------------------------------------------
- // [4] 0xD83D,0xDC08
- // [5] \uD83D\uDC08
- $item[4] = "0x" + dllfuncstr("ReplaceRegular", $SP, $w, 0, ",0x", 2);
- $item[5] = "\\u" + dllfuncstr("ReplaceRegular", $SP, $w, 0, "\\\\u", 2);
- // ------------------------------------------------------------
- // [6] 0xF0,0x9F,0x90,0x88
- // [7] \xF0\x9F\x90\x88
- // [8] 0xF09F9088
- $item[6] = "0x" + dllfuncstr("ReplaceRegular", $SP, $b, 0, ",0x", 2);
- $item[7] = "\\x" + dllfuncstr("ReplaceRegular", $SP, $b, 0, "\\\\x", 2);
- $item[8] = "0x" + dllfuncstr("ReplaceRegular", $SP, $b, 0, "", 2);
- #menu=9;
- // ------------------------------------------------------------
- #i = 0; while (#i < #menu) {
- $menu[#i] = "(&" + str(#i) + ") " + dllfuncstr("ReplaceRegular", "&", $item[#i], 0, "&&", 2);
- #i = #i + 1;
- }
- // ------------------------------------------------------------
- enabledraw;
- menuarray $menu, #menu; #a = result - 1;
- disabledraw;
- if (#a == -1)
- endmacro;
- begingroupundo;
- insert $item[#a];
- endgroupundo;
- endmacro;
- ////////////////////////////////////////////////////////////////