読者です 読者をやめる 読者になる 読者になる

chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

MUGENのステート定義をステート番号から追いかけるためのtagsファイル生成スクリプト

ステート番号を使っている部分から実際のステート定義を見れたら便利だろうか、などとついった見ながら思ったのでとりあえず作った。
…んだけど、これ便利かなぁ…(´・ω・`)

Gistにも置いてみた MUGEN用tagsファイル作成スクリプト。 ステート番号をタグ扱いにしてます。

#!ruby
# -*- coding: utf-8 -*-
tags = {
}

tagfile = nil
section_pattern = /\s*\[\s*(statedef)\s+((-+)?\d+)\].*$/i
ARGV.each do |arg|
  Dir.glob(arg) do |path|
    File.binread(path).split(%r{\r\n|\r|\n}).each_with_index do |line, lineno|
      match = line.match(section_pattern)
      if match
        tagname = match[2].to_i

        unless taglist.has_key?(tagname)
          tags[tagname] = []
        end
        tags[tagname] << "#{arg}\t#{lineno + 1}"
        #tagfile.puts "#{tagname}\t#{arg}\t#{lineno}"
      end
    end
  end
end

begin
  tagfile = File.open("tags", "wb")

  tags.keys.sort.each do |key|
    tags[key].each do |value|
      tagfile.puts "#{key}\t#{value}"
    end
  end
ensure
  if tagfile != nil
    tagfile.close
  end
end

# vim: set sts=2 ts=2 sw=2 expandtab:

使い方は

ruby mtags.rb **.st **.cns **.cmd

コレを実行すると↓みたいな内容のtagsファイルがカレントディレクトリに作成されます。

-3	GodRugal.st	725
-2	GodRugal.st	11
40	Common.st	12
50	Common.st	112
52	Common.st	169
100	Common.st	221
101	Common.st	274
102	Common.st	312
103	Common.st	346
105	Common.st	385
106	Common.st	420
120	Common.st	463
130	Common.st	527
131	Common.st	567
132	Common.st	607
150	Common.st	675
151	Common.st	729
152	Common.st	781
153	Common.st	835
154	Common.st	887
155	Common.st	927
180	PosesR.st	9
181	PosesG.st	65
182	PosesG.st	90
185	PosesG.st	120
186	PosesG.st	181
190	PosesR.st	44
191	PosesR.st	70
192	PosesR.st	102
195	PosesR.st	135
197	PosesG.st	322

後はVIMとかのctags対応アプリでステート番号の上*1でタグジャンプを使うと、そのステート定義が書いてあるファイルを開いて、該当ステートまで移動します。たぶん。

*1:ChangeStateのvalue=に書いた数字とか、StateNo=とかの数字