ヽ(´・肉・`)ノログ

How do we fighting without fighting?

xmpfilterを読む

xmpfilter の存在を知ってからずっと不思議で,いつかは読んでやろうと思っていた. 5 年くらい前はあまりのわからなさっぷりに投げだしたのだけど,今なら読めるかもしれないので挑戦してみる.

読めたら ympfilter という形で再実装してみる.

xmpfilter コマンドを実行

$ xmpfilter [ファイル名]

を実行すると bin/xmpfilter が呼ばれる.

bin/xmpfilter

最終的には一番下の行にある

puts klass.run(targetcode, options)

が呼ばれる.

何もオプションを指定しなければ,klass は XMPFilter,targetcode はARGF.read,options は DEFAULT_OPTIONS になる. ARGF.read は「引数をファイル名として扱い,そのファイルを読み込む」なので,

puts XMPFilter.run('コマンド引数で指定したファイルの内容', DEFAULT_OPTIONS)

ということになる.

lib/rcodetools/xmpfilter

XMPFilter.run は lib/rcodetools/xmpfilter.rb の中の self.run で定義されていて

new(opts).annotate(code)

という1行のコードである.

つまり,デフォルトオプションを指定して初期化したのち,

XMPFilter#annotate('引数で指定したファイルの内容')

を実行する.