ClangFormat との統合

概要:選択範囲に対して、 Clang のClangFormatを実行したい場合、以下、マクロを登録

シンプル版

概要:選択範囲でclang-formatを実行する。
ファイル:clang-format.js (ASCII CR/LF)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
(function(){
    var range = Editor.GetSelectedString(0);
    if (range.length == 0) {
        return;
    }
    var objWShell = new ActiveXObject('WScript.Shell');
    var objExec = objWShell.Exec('clang-format');
    objExec.StdIn.Write(range);
    objExec.StdIn.Close();
    while (objExec.Status == 0) {
        Sleep(100);
    }
    Editor.insText(objExec.StdOut.ReadAll());
})();

文字コード対応版

概要:
現在開いているファイルがJIS、EUC、UTF-7、SJISで開かれている場合、
選択範囲の文字コードをUTF-8に変換してclang-formatを実行する。
ただし、現在開いているファイルがUTF-8、UTF-16の場合、そのまま実行する。
ファイル:clang-format_utf8.js (UTF-8 with BOM CR/LF)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
(function() {
    if (Editor.IsTextSelected() == 0) {
        return;
    }
    var objWShell = new ActiveXObject('WScript.Shell');
    var nCharCode = GetCharCode();
    var strCharCode = undefined;
    switch (nCharCode)
    {
    case 1:   JISToSJIS(); SJIStoUTF8(); break; //< JIS
    case 2:   EUCToSJIS(); SJIStoUTF8(); break; //< EUC
    case 5:  UTF7ToSJIS(); SJIStoUTF8(); break; //< UTF-7
    case 0:                SJIStoUTF8(); break; //< SJIS
//  case 4:  UTF8toSJIS(); SJIStoUTF8(); break; //< UTF-8
    case 4:                              break; //< UTF-8
//  case 3:   UnicodeToSJIS(); SJIStoUTF8();  break; //< Unicode
//  case 6: UnicodeBEToSJIS(); SJIStoUTF8();  break; //< UnicodeBE
    case 3:  strCharCode = 'Unicode';    break; //< Unicode
    case 6:  strCharCode = 'UnicodeBE';  break; //< UnicodeBE
    case 7:  strCharCode = 'CESU-8';     break; //< CESU-8
    case 8:  strCharCode = 'Latin1(Windows-1252)'; break; //< Latin1(Windows-1252)
    default: strCharCode = nCharCode;    break;
    }
    if ((strCharCode != undefined)
     && (MessageBox(
            '文字コード ' + strCharCode + ' は対応していません。処理を続行しますか?',
            0x4
        ) != 0x6) //< 0x4=はい/いいえ, 0x6=はい
    ) {
        objWShell.Popup('not supported char code:' + nCharCode);
        return;
    }
    var objExec = objWShell.Exec('clang-format');
    objExec.StdIn.Write(Editor.GetSelectedString(0));
    objExec.StdIn.Close();
    while (objExec.Status == 0) {
        Sleep(100);
    }
    switch (nCharCode)
    {
    case 0: //< SJIS
    case 1: //< JIS
    case 2: //< EUC
    case 5: //< UTF-7
//  case 3: //< Unicode
//  case 6: //< UnicodeBE
        Editor.Delete();
        Editor.MoveHistSet();
        Editor.insText(objExec.StdOut.ReadAll());
        Editor.BeginSelect(0);
        Editor.MoveHistPrev();
        UTF8toSJIS();
        switch (nCharCode)
        {
        case 0:              break; //< SJIS
        case 1: SJIStoJIS(); break; //< JIS
        case 2: SJIStoEUC(); break; //< EUC
        case 5: SJIStoEUC(); break; //< UTF-7
//      case 3: SJISToUnicode();   break; //< Unicode
//      case 6: SJISToUnicodeBE(); break; //< UnicodeBE
        default:
            objWShell.Popup('logic error:' + nCharCode);
            break;
        }
        break;
    default:
        Editor.insText(objExec.StdOut.ReadAll());
        break;
    }
})();