高見知英のかいはつにっし(β)

高見知英のアプリケーション開発日誌 のほか、地域活動などの活動報告ブログ。

JmEditorでVisualStudio風のXMLタグ入力支援機能を実装するスクリプト

ただいまおんぷ村のCGI用のデータを作成中。エディタには独自の色分けを定義できるので、JmEditorを使用させてもらってます。

さて、おんぷ村のデータはXMLで作成しているので、JmEditorでVisualStudio風のタグ入力補完機能を実装するスクリプトを作ってみました。

// JmEditor用VisualStudio風タグ入力保管用スクリプト
// Editor.EditMode = 100の部分は適宜修正のこと
var result = ">";
var pos = Editor.SelStart + 1;
if(Editor.EditMode == 100 && Editor.SelLength == 0)
{
  var line = Editor.GetLineString(Editor.Row);
  var gtpos;
  if(line.charAt(Editor.Col - 1) != "/")
  {
    // <を探す
    for(gtpos = Editor.Col - 1; gtpos >= 0; gtpos--)
    {
      if(line.charAt(gtpos) == '<') 
      { // <を見つけたら、単語の終わりを探す
        var gtto = line.substr(gtpos + 1);
        if(gtto.match(/(\w+)/))
        {
          result = "></" + RegExp.$1 + ">";
        }
        break;
      }
    }
  }
}
Editor.SelText = result;
Editor.SeLStart = pos;

上のスクリプトをShift+.(>)などに設定しておけば、以下の条件を満たすときに入力補完が行われます。

  • XMLモードである
  • 選択範囲がない
  • 直前の文字が/でない(エンプティタグでない)

処理にはあまり時間をかけていないので、ほかのテキストを編集している際にもあまり気にはなりません。
ほかのテキストを編集しているとき、コメントの中に限りコメントを実行するなどの処理も付け加えるといいかもしれません。