日本語Ruby?

見えないプログラムは、全角スペースが識別子に使えるというトリビアから生まれたわけですが、全角文字が識別子になるならRubyプログラムを日本語で書けないか?

というわけでRuby1.9 用 mp3tag.rb。RubyGemsruby-mp3info をインストールしてください。(インストールコマンドは「gem install ruby-mp3info」)

ruby -Ku mp3tag.rb *.mp3」などとすると、mp3ファイルのタグをずらっと表示します。
mac以外での動作は確認していません(^^;)

# coding: utf-8

# mp3のタグを表示する

require_relative "Ruby日本語化"
ライブラリを使う 'mp3info'

class String
  defBOMつきなら
    self[0].の文字コード == 255 && self[1].の文字コード == 254
  end
  
  def からBOMを取って
    self[2..-1].を配列に変換して("S*").文字列に変換して("U*")
  end
end

class Mp3Info
  class << self
    alias :開いて :open
  end
  alias :のタグ全部 :tag
end

def mp3情報
  Mp3Info
end

アルバム = ファイル::ベース名をとって Dir.カレントフォルダ
行出力 アルバム
コマンドライン.をひとつひとつ { |音楽ファイル|
  行出力 音楽ファイル
  mp3情報::開いて(音楽ファイル) {||
    曲.のタグ全部.をひとつひとつ { |タグ名, 内容|
      データ出力 "#{タグ名} "
      if 内容.のクラスが 文字列
        if 内容.がBOMつきなら
          内容 = 内容.からBOMを取って
        else
          内容 = 内容.のエンコーディングを変換して("UTF-8", "Windows-31J")
        end
        "#{内容}".を表示する
      else
        "#{内容}".を表示する
      end
    }
    "".を表示する
  }
}

if とか def、class なんかは日本語化できないのですが、その他はがんばってみました。
メソッド名が「〜して」風になっているのはメソッドチェーンを意識してますが、今度「の」とか「を」なんかで始めた部分が不自然になる。
今回は恣意的に助詞をつけたり省いたりしましたが、本気でやるなら助詞があってもなくてもメソッドとすべきでしょうね。

each を「ひとつひとつ」としたのはちょっと自信訳ですが(^^;、凝れば凝るほど英語のSVOの語順が気になる。ドットもいらない。
「内容のエンコーディングを"Windows-31J"から"UTF-8"に変換して」とか書きたいわけです。「内容を行出力」とか「カレントフォルダからベース名を取って」とか。
もうパーサ作るしかないか。(えー)


あと忘れちゃいけない、同じフォルダに Ruby日本語化.rb が必要です。

# coding: utf-8

def コマンドライン
  ARGV
end

class Object
  alias :のクラスが :is_a?
  alias :ライブラリを使う :require
  alias :行出力 :puts
  alias :データ出力 :printf
end

class Array
  alias :をひとつひとつ :each
  alias :文字列に変換して :pack
  alias :の頭 :first
end

class Hash
  alias :をひとつひとつ :each
end

class File
  class << self
    alias :ベース名をとって :basename
  end
end

class String
  def を表示する
    puts self
  end
  
  alias :を置換して :sub!
  alias :を整数にして :to_i
  alias :をあてはめて :scan
  alias :のエンコーディングを変換して :encode
  alias :のエンコーディングを決め打ちして :force_encoding
  alias :のエンコーディング :encoding
  alias :をひと文字ごとに :each_char
  alias :を配列に変換して :unpack
  alias :の文字コード :ord
end

class Dir
  class << self
    alias :カレントフォルダ :pwd
  end
end

class Integer
  alias :文字列にして :to_s
end

def 文字列
  String
end

def ファイル
  File
end||<
単なる力技(笑)でも class << self なんて書き方できるの初めて知りました。
method_missing とかをうまく使えば、「の」や「を」の問題は解決できるかも。


あと日本語化とは関係ないんですが、iTunes の日本語エンコードがなんか大変なことになってて参りました。
mp3ファイルによっては文字化けすると思います。

(10/17 ちょっと修正)
String#を表示する を定義して、行表示のところ直しました。