原です。

> まつもと ゆきひろです
> 
> ruby 0.99.3-961210をリリースします.

もう 1.00.0 直前の雰囲気。(^_^)


> jcode.rbがtrだけではなく,squeeze, delete, tr_sにも対応して
> います.あと,正規表現に関するバグがいくつか直ってます.

おお、一気に!

眺めてみましたが、これを見るまで gsub! がイテレータブロックで
|c| の様な引数を取るとは知りませんでした。多分マニュアルにも
ないと思うので、書き加えてください。


それから、_expand_ch を見て思ったのですが、文字列のパターン
毎の処理は、いままで

s = str.dup; s.gsub!(/<pattern>/) { ... }

あるいは、

s = str.dup; while s.sub!(/<pattern>/, '') { ... }

と書いたわけですが、これではしばしば不必要な文字列の生成や変形
を伴うので不効率です。で、今後は scan を使って、

str.scan(/<pattern>/) { ... }

と書くことが推奨されるのではないかと思うのですが、どうでしょう。


例えば今回の jcode.rb では

  def _expand_ch
    a = nil
    s = self.dup
    s.gsub!(/(.|\n)-(.|\n)/) do |r|
      a = []
      if $1.length != $2.length
	next
      elsif $1.length == 1
	$1[0].upto($2[0]) { |c| a.push c.chr }
      else
	$1.upto($2) { |c| a.push c }
      end
      a.join('')
    end
    s.split(//)
  end

となっていますが、

  def _expand_ch
    a = []
    self.scan(/(.|\n)-(.|\n)|(.|\n)/) do
      if $3
	a.push $3
      elsif $1.length != $2.length
	next
      elsif $1.length == 1
	$1[0].upto($2[0]) { |c| a.push c.chr }
      else
	$1.upto($2) { |c| a.push c }
      end
    end
    a
  end

というふうになるわけです。

ところで scan のイテレータブロックでも $&, $1, $2,.. は参照できる
んですね。完璧。(^_^) でも Change.log にも scan の文字はないし、ま
だ正式採用ではないのかな。
---===-=-=-=-=-=-=-=-=======--=-=-=-==-=-===-=-=-=-=-=-=--=-==-=--
                            Shin-ichro Hara(Nagaoka Univ.of Tech.)