初めてのテキスト処理


初めてのテキスト処理

最近、K2Editorというテキストエディタを使ってみようとしています。そのエディタの機能で、キーワードを強調表示することが出来ます。そして、そのキーワードは正規表現を使って指定できます。元々付いているキーワードを使っても良いのですが、あまり僕の好みに合わなかったため、自分で作ってみようと思ったのです。

K2Editorのキーワード定義ファイルを見てみたところ、キーワードは次のような感じで表されているようです。

73,<
73,>
17,</?[Bb][Oo][Dd][Yy]
17,</?[Hh][Tt][Mm][Ll]
17,</?[Pp]

"73","17"というのは色などを示す数値で、コンマのあとに正規表現を使ってキーワードを指定するみたいです。上にあるものほど優先度が高くなるようで、この例だと、<BODY>,<HTML>,<P>の三つのタグが"<BODY>のような感じで強調表示されます。

上のような感じで、HTMLの全てのタグについて指定して行けばキーワード定義ファイルが作れます。全てのタグについて入力していくのも一つの手ですが、大文字小文字を両方とも入力しなくてはいけなかったりで、かなり面倒そうです。そこで、下のようにタグを並べたテキストファイルを用意して(HtmlKey.txt)、それをRubyに処理をさせて上のようなものを出力させようと考えました。

HtmlKey.txt
body
html
p
a
abbr
...

これで作ったRubyプログラムが次の key2hil.rb です。

key2hil.rb
#!/usr/local/bin/ruby
strings = Array.new
while line = ARGF.gets
  str = "17,</?"
  line.scan(/./).each do |x|
    str += "[%s%s]" % [ x.upcase , x.downcase ]
  end
  puts str
end

これを、 "ruby key2hil.rb HtmlKey.txt > HtmlKey.dat" のように実行してファイルに落とすと、次のようなファイルを生成することが出来ます(HtmlKey.dat)。これに少し手を加えて、キーワード定義ファイルを作ることが出来ました。

わずか数行のファイルですが、慣れていなかったため時間がかかってしまいました。しかし、これを使えばHTML以外のものも簡単に作れるので今後も楽になりそうです。

HtmlKey.dat
17,</?[Bb][Oo][Dd][Yy]
17,</?[Hh][Tt][Mm][Ll]
17,</?[Pp]
17,</?[Aa]
17,</?[Aa][Bb][Bb][Rr]
...

その後

上のプログラム(key2hil.rb)では

while line = ARGF.gets
  ...
end
と書いているところを、
ARGF.each do |line|
  ...
end
のようにも書けることが分かりました。また、 str という変数を使っていたのですが、なくても出来そうだということに気づきました。それで今は次のように書き換えてみて使っています。

#!/usr/local/bin/ruby
ARGF.each do |line|
	print "17,</?"
	line.scan(/./).each do |x|
		print "[%s%s]" % [ x.upcase , x.downcase ]
	end
	print "\n"
end