From: Shugo Maeda <shugo / ruby-lang.org>
Subject: [ruby-list:26958] Re: RD で引用
Date: Sun, 31 Dec 2000 18:00:35 +0900

るびきちです。

> インデントとかはスタイルシートで指定できるのでよいのですが、
> やっぱりHTMLだったらBLOCKQUOTE要素で表現したいですよね。
snip
> > たとえばインデントされていて「>」が前置されたブロックがあれば
> > それは引用であるとするとか, 逆に verbatime なブロックを
snip
> 私的には前者の方がいいと思います。
とりあえず実装してみましたがいかがでしょう。
Verbatimにおいて各行が /^</ な行をBLOCKQUOTEでくるむようにしてみましたが。

Code: rd2html-quote-lib.rb
=begin
= rd2html-quote-lib.rb
=end

require "cgi"
require "rd/rd2html-lib"

module RD
  class RD2HTMLQuoteVisitor < RD2HTMLVisitor
    # must-have constants
    OUTPUT_SUFFIX = "html"
    INCLUDE_SUFFIX = ["html"]
    
    METACHAR = { "<" => "&lt;", ">" => "&gt;", "&" => "&amp;" }

    def apply_to_Verbatim(element)
      content = []
      quote = false
      element.each_line do |i|
	quote = if i =~ /^>/ then true else false end
        content.push(apply_to_String(i))
      end
      if quote
        %Q[<BLOCKQUOTE><PRE>\n#{content.join("")}</PRE></BLOCKQUOTE>\n]
      else
        %Q[<PRE>\n#{content.join("")}</PRE>\n]
      end
    end
  end # RD2HTMLQuoteVisitor
end # RD

$Visitor_Class = RD::RD2HTMLQuoteVisitor
$RD2_Sub_OptionParser = "rd/rd2html-opt"


そしてこんなRDを用意すると、
Code: quote.rd
=begin
TextBlock1
  >Quote1
  >Quote2
本文2
    Verbatim1
    Verbatim2
   >Verbatim3
   >Verbatim4
   Verbatim5
=end

$ rd2 -r rd/rd2html-quote-lib quote.rd
rd2 -r rd/rd2html-quote-lib quote.rd
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>quote.rd</TITLE>
</HEAD>
<BODY>
<P>
TextBlock1
</P>
<BLOCKQUOTE><PRE>
&gt;Quote1
&gt;Quote2
</PRE></BLOCKQUOTE>
<P>
本文2
</P>
<PRE>
Verbatim1
Verbatim2
</PRE>
<PRE>
&gt;Verbatim3
&gt;Verbatim4
Verbatim5
</PRE>

</BODY>
</HTML>


-- rubikitch