class Ripper::Filter

[edit]

要約

イベントドリブンスタイルで Ruby プログラムを加工するためのクラスです。

このクラスを継承して、必要なイベントに対応するメソッドを定義して使用します。

使用例

require 'ripper'
require 'cgi'

class Ruby2HTML < Ripper::Filter
  def on_default(event, tok, f)
    f << CGI.escapeHTML(tok)
  end

  def on_comment(tok, f)
    f << %Q[<span class="comment">#{CGI.escapeHTML(tok)}</span>]
  end

  def on_tstring_beg(tok, f)
    f << %Q[<span class="string">#{CGI.escapeHTML(tok)}]
  end

  def on_tstring_end(tok, f)
    f << %Q[#{CGI.escapeHTML(tok)}</span>]
  end
end

Ruby2HTML.new(ARGF).parse('')

Ruby プログラムを解析して、Ripper::SCANNER_EVENTS にあるスキャナイベントを実行します。イベントはプログラムに書いた順番で実行されます。

上記の例では、parse メソッドに渡した空文字列を初期値として、イベントハンドラが ARGF で渡された Ruby プログラムを HTML にして返します。

目次

特異メソッド
インスタンスメソッド
privateメソッド

特異メソッド

new(src, filename = '-', lineno = 1) -> Ripper::Filter[permalink][rdoc][edit]

Ripper::Filter オブジェクトを作成します。

[PARAM] src:
Ruby プログラムを文字列か IO オブジェクトで指定します。
[PARAM] filename:
src のファイル名を文字列で指定します。省略すると "-" になります。
[PARAM] lineno:
src の開始行番号を指定します。省略すると 1 になります。

インスタンスメソッド

column -> Integer | nil[permalink][rdoc][edit]

現在のトークンの桁番号を 0 から始まる数値で返します。

このメソッドはイベントハンドラの中でのみ意味のある値を返します。イベントハンドラの中で self.column を実行してください。

filename -> String[permalink][rdoc][edit]

Ruby プログラムのファイル名を文字列で返します。

lineno -> Integer | nil[permalink][rdoc][edit]

現在のトークンの行番号を 1 から始まる数値で返します。

このメソッドはイベントハンドラの中でのみ意味のある値を返します。イベントハンドラの中で self.lineno を実行してください。

parse(init = nil) -> object[permalink][rdoc][edit]

自身の持つ Ruby プログラムの解析を開始します。各種イベントハンドラで処理を行った結果を返します。

[PARAM] init:
任意の値を指定できます。この値がイベントハンドラに渡されていきます。

引数 init を初期値としてイベントハンドラに渡されていきます。各種イベントハンドラの戻り値は次のイベントハンドラに渡されます。 Enumerable#inject のように、最終的な結果を戻り値として返します。

[SEE_ALSO] Ripper::Filter#on_default, Ripper::Filter#on_XXX

privateメソッド

on_XXX(token, data) -> object[permalink][rdoc][edit]

各種スキャナイベントを実行します。

実際には on_XXX というメソッドは存在しません。「XXX」の部分を Ripper::SCANNER_EVENTS にあるスキャナイベントに読み替えてください。

[PARAM] token:
現在のトークンが指定されます。
[PARAM] data:
前のイベントハンドラの戻り値です。最初のイベントの場合は Ripper::Filter#parse の引数になります。

オーバライドしなかった場合は on_default が実行されます。

このメソッドの戻り値は次のイベントハンドラの data 引数に渡されます。

[SEE_ALSO] Ripper::Filter#parse, Ripper::Filter#on_default, Ripper::SCANNER_EVENTS

on_default(event, token, data) -> object[permalink][rdoc][edit]

イベントハンドラが未定義のイベントが実行された場合に実行されるイベントハンドラです。

[PARAM] event:
実行されたイベントを :on_XXX 形式のシンボルで指定されます。
[PARAM] token:
現在のトークンが指定されます。
[PARAM] data:
前のイベントハンドラの戻り値です。最初のイベントの場合は Ripper::Filter#parse の引数になります。

このメソッドの戻り値は次のイベントハンドラの data 引数に渡されます。 on_default をオーバライドしなかった場合は data 引数をそのまま返します。

[SEE_ALSO] Ripper::Filter#parse, Ripper::Filter#on_XXX