[Hiki-dev:00826] Re: ブロックプラグインとインラインプラグインについて

Zurück zum Archiv-Index

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(/&/, '&amp;').gsub(/</, '&lt;').gsub(/>/, '&gt;')
-      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/>
  「恋とハックはアジャイルが命!」



Hiki-dev メーリングリストの案内
Zurück zum Archiv-Index