Kazuhiko
kazuh****@fdiar*****
2005年 6月 20日 (月) 16:31:08 JST
かずひこです。 At Mon, 20 Jun 2005 16:17:05 +0900, Kazuhiko wrote: > > plugin 側から、自分がブロックプラグインとして呼ばれているか、 > > インラインプラグインとして呼ばれているかを知る方法はありますか? > > 今のところありません。これをできるようにするにはけっこう変更が必要っぽい > 気がするので、すくなくとも 0.8.0 では見送りたい気分です。 とは言え、いちおうやってみました。末尾のパッチを当てたら、 def hoge(*args) # inline / block plugin end のかわりに def hoge(*args, &proc) case yield(proc) when true # inline plugin else # block plugin end end みたいなことができますが、もっといいやりかたがあるのかなぁ。 Index: hiki/plugin.rb =================================================================== RCS file: /cvsroot/hiki/hiki/hiki/plugin.rb,v retrieving revision 1.22 diff -u -r1.22 plugin.rb --- hiki/plugin.rb 17 Jun 2005 05:06:00 -0000 1.22 +++ hiki/plugin.rb 20 Jun 2005 07:23:24 -0000 @@ -214,7 +214,7 @@ end end - def send(name, *args) + def send(name, *args, &proc) name = name.intern if name.is_a?(String) if not name.is_a?(Symbol) raise ArgumentError, "#{name.inspect} is not a symbol" @@ -222,7 +222,7 @@ if not @plugin_method_list.include?(name) method_missing(name, *args) else - __send__(name, *args) + __send__(name, *args, &proc) end end Index: hiki/pluginutil.rb =================================================================== RCS file: /cvsroot/hiki/hiki/hiki/pluginutil.rb,v retrieving revision 1.7 diff -u -r1.7 pluginutil.rb --- hiki/pluginutil.rb 9 Jun 2005 02:15:14 -0000 1.7 +++ hiki/pluginutil.rb 20 Jun 2005 07:23:24 -0000 @@ -20,16 +20,17 @@ LSTRIP_RE = /\A\s+/ module_function - def apply_plugin(str, plugin, conf) + def apply_plugin(str, plugin, conf, inline = true) return str unless conf.use_plugin set_conf(conf) method, *args = methodwords(str) begin if plugin.respond_to?(method) && !Object.method_defined?(method) + proc = inline ? Proc.new{true} : Proc.new{false} if args - plugin.send(method, *args) + plugin.send(method, *args, &proc) else - plugin.send(method) + plugin.send(method, &proc) end else raise PluginException, 'not plugin method' Index: style/default/html_formatter.rb =================================================================== RCS file: /cvsroot/hiki/hiki/style/default/html_formatter.rb,v retrieving revision 1.31 diff -u -r1.31 html_formatter.rb --- style/default/html_formatter.rb 16 Jun 2005 01:22:18 -0000 1.31 +++ style/default/html_formatter.rb 20 Jun 2005 07:23:24 -0000 @@ -258,7 +258,12 @@ def call_plugin_method( t ) return nil unles****@conf*****_plugin str = t[:method].gsub(/&/, '&').gsub(/</, '<').gsub(/>/, '>') - return apply_plugin( str, @plugin, @conf ) + case t[:e] + when :inline_plugin + return apply_plugin( str, @plugin, @conf ) + else + return apply_plugin( str, @plugin, @conf, false ) + end end def make_link(t, s) -- かずひこ <http://wiki.fdiary.net/kazuhiko/> 「恋とハックはアジャイルが命!」