> From: Clemens Wyss
> Sent: Thursday, March 01, 2001 11:40 PM

> >Sorry for RWiki specific topic...
> 
> and long ;-)

and late X-(

> >> <rbi_code: >>ruby code goes here<< >
> >
> 
> OK, maybe my example was missleading (because of the << and >>):
> 
> <rbi_code: 
> class a 
>   def say()
>     p "hello"
>   end
> end
> >
> 
> This looks like your img-example and the visitor could be written as
> proposed in my previous post. 

I understood this time (maybe.)

> So if you decide to add <:>-tags to rwiki we could easily add
> <rbi_code:>! As I mentioned in the post before, I have concerns in what
> happens if the code includes a ">". Will the RD parser fail? 

Maybe.  And the parser will not accept indented lines
in inline element.  User-defined element that Tosh was
talking about in [ruby-talk:11863] is an inline element.
I started to think that your code block should be a
block element.

> >You can override apply_to_Code in rd2rwiki-lib.rb to get
> >the program code ('print ">"' in above example) and insert
> ><textarea /> instead of '<code>print "&gt;"</code>'.
> 
> should we really override this RD-semantic? 
> How about adding a new RD-syntax element, i.e. (([])) or ((~~))? 

As I stated above, I don't think we should.

> >Next candidate.  How do you feel this?
> >
> >  = this is a sample code
> >  Using verbatim block.
> >    rbi_code:
> >    class Foo
> >      def say
> >        "hello"
> >      end
> >    end
> >    Foo.new.say
> >
> >This is exactly what [ruby-talk:11208] does.
> >RWiki does not support this type of extension now...

> looks fine, too

I tried to implement VerbatimBlock extension API.  See
attached patch to rd2rwiki-lib.rb.  How do you feel
this interface?  Though we might not include
RD::RD2RWikiVisitor::ext_VerbatimBlock_rbi_code(content_str)
in distribution, all you have to do is add
'require myExt.rb' in rwiki.rb.

BTW, Clemens, JavaScript code in this patch does not
work in my environment.  I do not know JavaScript
well...  Am I missing something?

Index: rd2rwiki-lib.rb
===================================================================
RCS file: /src/app/rwiki/rd2rwiki-lib.rb,v
retrieving revision 1.26
diff -u -2 -p -r1.26 rd2rwiki-lib.rb
--- rd2rwiki-lib.rb	2001/02/03 22:29:24	1.26
+++ rd2rwiki-lib.rb	2001/03/03 09:49:32
@@ -80,5 +80,11 @@ module RD
 	content.push(apply_to_String(i))
       end
-      %Q[<pre>\n#{content.join("")}</pre>\n]
+      content_str = content.join("")
+      if /\A#\s*([^\n]+)\s*\n(.*)\z/m =~ content_str
+	apply_VerbatimBlock_extension($1, $2) ||
+	  %Q[<pre>\n#{content_str}</pre>\n]
+      else
+      	%Q[<pre>\n#{content_str}</pre>\n]
+      end
     end
   
@@ -304,4 +310,13 @@ module RD
     end
 
+    def apply_VerbatimBlock_extension(label, content)
+      method_name = "ext_VerbatimBlock_" + label.to_s
+      if respond_to?(method_name, true)
+	__send__(method_name, content)
+      else
+	nil
+      end
+    end
+
     def apply_ref_extension(label, content)
       @ref_extension.each do |entry|
@@ -350,4 +365,22 @@ module RD
       content = "[#{label}]" if label == content
       url_ref_ext("http://www.ruby-lang.org/en/raa-list.rhtml?name=#{ name }", content)
+    end
+
+    def ext_VerbatimBlock_rbi_code(content_str)
+      return <<__EOS__
+<form method="POST" onSubmit="var ie=document.all?1:0;var
+<ns=document.layers?1:0;var
+<url;winStats='toolbar=no,location=no,directories=no,menubar=no,';winStats
+<+='scrollbars=no,width=400,height=300';if (ie)
+<{winStats+=',left=10,top=25'}else{winStats+=',screenX=10,screenY=25'};flo
+<ater=window.open('','RubyResults',winStats);floater.focus();return
+<true;" id="rubyinterpreter" TITLE="rubyinterpreter"
+<ACTION="http://www.ruby.ch/rbx/rbinterp.rbx" target="RubyResults"> 
+<textarea id="rubycode" name="cmd" rows="2"> 
+#{content_str}
+</textarea>
+<input type="SUBMIT" value="interpret it!">
+</form>
+__EOS__
     end