Bug #8689
closedREXML::StreamListener#entityが呼び出されない
Description
REXML::StreamListener#entity のドキュメントによると
# Called when %foo; is encountered in a doctype declaration.
# @p content "foo"
def entity content
end
と書かれていますが、以下のコードを動かしても何も表示されません
require 'rexml/parsers/baseparser'
require 'rexml/parsers/streamparser'
require 'rexml/streamlistener'
xml = <<EOS
class Listener
include REXML::StreamListener
def entity(content)
p content
end
end
REXML::Parsers::StreamParser.new(xml, Listener.new).parse
lib/rexml/parsers/streamparser.rb でもこの entity というメソッドを呼びだしている
場所はないようです。
というわけで、なんらかの修正をする必要があるように思われます。
- このメソッドを削除
- このメソッドを StreamParser から呼びだすようにする
のいずれかの変更が良いでしょう。
私の意見としては、このコールバックの使い道が思いつかない、おそらく誰も使っていない、ので、削除してしまって
よいのではと思います。
Updated by kou (Kouhei Sutou) over 11 years ago
- Status changed from Open to Assigned
- Assignee set to kou (Kouhei Sutou)
Updated by kou (Kouhei Sutou) over 11 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
This issue was solved with changeset r42198.
Ippei, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
- lib/rexml/parsers/streamparser.rb
(REXML::Parsers::StreamParser#parse): Add "entity" event support to
listener. [Bug #8689] [ruby-dev:47542]
Reported by Ippei Obayashi. - test/rexml/test_stream.rb (StreamTester#entity): Add a test for
the above case.
Updated by kou (Kouhei Sutou) over 11 years ago
ちょっとみたらすぐにいけそうだったので実装しておきました!あと、パースして情報が落ちるのは切ないなぁという気持ちもありました。
まぁ、なにに使うんですかねぇ。。。未定義のパラメーター実体参照をしていないか、というチェックをするプログラムを書くためには使えそうですかねぇ。。。
Updated by ohai (Ippei Obayashi) over 11 years ago
修正ありがとうございます。元々のコードを書いた人も取れている情報を捨てずに活用できる手段を用意したかったのでしょう。
るりまもこれに合わせて適当に修正します。