Markdown文書で改行時にリスト、引用ブロック開始記号を自動入力する

提供: MeryWiki
移動先: 案内検索

改行を挿入し、編集モードがMarkdownでありかつ現在行がリストまたは引用ブロックの場合は開始記号を挿入します。 順序ありリスト(1.等)の場合、数値を+1します。

#title="Markdown文書で改行時にリスト、引用ブロック開始記号を自動入力"

// by catfist
//
// 編集モードが'Markdown'の場合のみ実行
// 現在行が以下の構文を含む場合、改行して行頭に開始記号を追加する
// (順序ありリストの場合は数値を1加算する)
//
// 順序なしリスト: '-','*','+'
// 順序ありリスト: '1.','2.'...
// 引用ブロック  : '>'
//
// 開始記号のみの場合は記号を削除して改行する
//
// Enterに割り当てて使うことを想定
//
// [2018-07-27] 1.0
// [2018-07-28] 1.1
// bug fix
// 開始記号しかない行では開始記号削除+通常の改行を行うようにした
// 自動インデント機能を利用するため、改行記号の挿入をNewLineメソッドに変更。ただしアンドゥが2回必要。

if (Document.Mode == "Markdown") { // 編集モードがMarkdownの場合
    // 現在行の内容を取得
    var s = Document.GetLine(Document.Selection.GetActivePointY(mePosLogical), 0);
    // リストまたはブロックコメント開始記号に一致する部分を取得
    if (s.match(/^\s*([-\*\+>] ?|\d+\. ?)[^\s]+$/))
    {
        var s_syntax = s.replace(/^\s*([-\*\+>] ?|\d+\. ?).*$/,"$1");
        // 順序ありリストの場合は数値を+1する
        var s_num = s_syntax.replace(/^(\d+).*/,"$1");
        if (s_num !== "") {
            s_num = Number(s_num);
            s_num = s_num + 1;
            s_syntax = s_syntax.replace(/^\d+/,s_num);
        }
    }
    else if (s.match(/^\s*([-\*\+>]|\d+\.)\s*$/)) { // インデントと開始記号のみは場合は削除
        Document.Selection.DeleteLeft(s.length);
        s_syntax = "";
    }
    else { // 指定の構文がない場合は改行のみ
        s_syntax = "";
    }
}
else { // 編集モードがMarkdown以外の場合は改行のみ
    s_syntax = "";
}
// 改行と開始記号を挿入
// Document.Selection.Text = "\n" + s_syntax;
Document.Selection.NewLine()
Document.Selection.Text = s_syntax;
// alert(s_syntax); //[dev]
スポンサーリンク