mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	* lib/rdoc/markup: Remove ListBase and Line constants.
* lib/rdoc/ri: Allow output IO to be specified. * test/rdoc/parser/test_parse_c.rb: Move up one level, fixed. * test/rdoc/parser/test_rdoc_markup_attribute_manager.rb: Renamed to match new class name, updated to match new classes. * test/rdoc/test_rdoc_ri_formatter.rb: Start of RI formatting tests. * test/rdoc/test_rdoc_ri_attribute_manager.rb: Start of RDoc::RI::AttributeManager tests. * test/rdoc/test_simple_markup.rb: Moved to match new class name. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15120 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
		
							parent
							
								
									9872d4d600
								
							
						
					
					
						commit
						8d37cefaf8
					
				
					 15 changed files with 443 additions and 261 deletions
				
			
		
							
								
								
									
										18
									
								
								ChangeLog
									
										
									
									
									
								
							
							
						
						
									
										18
									
								
								ChangeLog
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,3 +1,21 @@
 | 
			
		|||
Sat Jan 19 08:58:47 2008  Eric Hodel  <drbrain@segment7.net>
 | 
			
		||||
 | 
			
		||||
	* lib/rdoc/markup: Remove ListBase and Line constants.
 | 
			
		||||
 | 
			
		||||
	* lib/rdoc/ri: Allow output IO to be specified.
 | 
			
		||||
 | 
			
		||||
	* test/rdoc/parser/test_parse_c.rb: Move up one level, fixed.
 | 
			
		||||
 | 
			
		||||
	* test/rdoc/parser/test_rdoc_markup_attribute_manager.rb: Renamed to
 | 
			
		||||
	  match new class name, updated to match new classes.
 | 
			
		||||
 | 
			
		||||
	* test/rdoc/test_rdoc_ri_formatter.rb: Start of RI formatting tests.
 | 
			
		||||
 | 
			
		||||
	* test/rdoc/test_rdoc_ri_attribute_manager.rb: Start of
 | 
			
		||||
	  RDoc::RI::AttributeManager tests.
 | 
			
		||||
 | 
			
		||||
	* test/rdoc/test_simple_markup.rb: Moved to match new class name.
 | 
			
		||||
 | 
			
		||||
Sat Jan 19 08:35:36 2008  Nobuyoshi Nakada  <nobu@ruby-lang.org>
 | 
			
		||||
 | 
			
		||||
	* parse.y (parser_prepare): get encoding from the first line.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -159,7 +159,6 @@ require 'rdoc'
 | 
			
		|||
#
 | 
			
		||||
#--
 | 
			
		||||
# Author::   Dave Thomas,  dave@pragmaticprogrammer.com
 | 
			
		||||
# Version::  0.0
 | 
			
		||||
# License::  Ruby license
 | 
			
		||||
 | 
			
		||||
class RDoc::Markup
 | 
			
		||||
| 
						 | 
				
			
			@ -256,7 +255,7 @@ class RDoc::Markup
 | 
			
		|||
 | 
			
		||||
    while line = @lines.next
 | 
			
		||||
      if line.isBlank?
 | 
			
		||||
        line.stamp(Line::BLANK, level)
 | 
			
		||||
        line.stamp :BLANK, level
 | 
			
		||||
        next
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -282,7 +281,7 @@ class RDoc::Markup
 | 
			
		|||
      #
 | 
			
		||||
 | 
			
		||||
      if /^(---+)\s*$/ =~ active_line
 | 
			
		||||
        line.stamp(Line::RULE, level, $1.length-2)
 | 
			
		||||
        line.stamp :RULE, level, $1.length-2
 | 
			
		||||
        next
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -296,14 +295,14 @@ class RDoc::Markup
 | 
			
		|||
        prefix_length = prefix.length
 | 
			
		||||
 | 
			
		||||
        flag = case prefix
 | 
			
		||||
               when "*","-" then ListBase::BULLET
 | 
			
		||||
               when /^\d/   then ListBase::NUMBER
 | 
			
		||||
               when /^[A-Z]/ then ListBase::UPPERALPHA
 | 
			
		||||
               when /^[a-z]/ then ListBase::LOWERALPHA
 | 
			
		||||
               when "*","-" then :BULLET
 | 
			
		||||
               when /^\d/   then :NUMBER
 | 
			
		||||
               when /^[A-Z]/ then :UPPERALPHA
 | 
			
		||||
               when /^[a-z]/ then :LOWERALPHA
 | 
			
		||||
               else raise "Invalid List Type: #{self.inspect}"
 | 
			
		||||
               end
 | 
			
		||||
 | 
			
		||||
        line.stamp(Line::LIST, level+1, prefix, flag)
 | 
			
		||||
        line.stamp :LIST, level+1, prefix, flag
 | 
			
		||||
        text[margin, prefix_length] = " " * prefix_length
 | 
			
		||||
        assign_types_to_lines(offset, level + 1)
 | 
			
		||||
        next
 | 
			
		||||
| 
						 | 
				
			
			@ -328,7 +327,7 @@ class RDoc::Markup
 | 
			
		|||
      if active_line[0] == ?= and active_line =~ /^(=+)\s*(.*)/
 | 
			
		||||
        prefix_length = $1.length
 | 
			
		||||
        prefix_length = 6 if prefix_length > 6
 | 
			
		||||
        line.stamp(Line::HEADING, 0, prefix_length)
 | 
			
		||||
        line.stamp :HEADING, 0, prefix_length
 | 
			
		||||
        line.strip_leading(margin + prefix_length)
 | 
			
		||||
        next
 | 
			
		||||
      end
 | 
			
		||||
| 
						 | 
				
			
			@ -338,9 +337,9 @@ class RDoc::Markup
 | 
			
		|||
 | 
			
		||||
      if active_line[0] == SPACE
 | 
			
		||||
        line.strip_leading(margin) if margin > 0
 | 
			
		||||
        line.stamp(Line::VERBATIM, level)
 | 
			
		||||
        line.stamp :VERBATIM, level
 | 
			
		||||
      else
 | 
			
		||||
        line.stamp(Line::PARAGRAPH, level)
 | 
			
		||||
        line.stamp :PARAGRAPH, level
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -369,10 +368,10 @@ class RDoc::Markup
 | 
			
		|||
    flag = nil
 | 
			
		||||
    case prefix
 | 
			
		||||
    when /^\[/
 | 
			
		||||
      flag = ListBase::LABELED
 | 
			
		||||
      flag = :LABELED
 | 
			
		||||
      prefix = prefix[1, prefix.length-2]
 | 
			
		||||
    when /:$/
 | 
			
		||||
      flag = ListBase::NOTE
 | 
			
		||||
      flag = :NOTE
 | 
			
		||||
      prefix.chop!
 | 
			
		||||
    else raise "Invalid List Type: #{self.inspect}"
 | 
			
		||||
    end
 | 
			
		||||
| 
						 | 
				
			
			@ -403,7 +402,7 @@ class RDoc::Markup
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    line.stamp(Line::LIST, level+1, prefix, flag)
 | 
			
		||||
    line.stamp :LIST, level+1, prefix, flag
 | 
			
		||||
    text[margin, prefix_length] = " " * prefix_length
 | 
			
		||||
    assign_types_to_lines(offset, level + 1)
 | 
			
		||||
    return true
 | 
			
		||||
| 
						 | 
				
			
			@ -431,12 +430,12 @@ class RDoc::Markup
 | 
			
		|||
      else
 | 
			
		||||
        group = block.fragment_for(line)
 | 
			
		||||
        block.add(group)
 | 
			
		||||
        if line.type == Line::LIST
 | 
			
		||||
          wantedType = Line::PARAGRAPH
 | 
			
		||||
        if line.type == :LIST
 | 
			
		||||
          wantedType = :PARAGRAPH
 | 
			
		||||
        else
 | 
			
		||||
          wantedType = line.type
 | 
			
		||||
        end
 | 
			
		||||
        wantedLevel = line.type == Line::HEADING ? line.param : line.level
 | 
			
		||||
        wantedLevel = line.type == :HEADING ? line.param : line.level
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,6 +11,22 @@ class RDoc::Markup
 | 
			
		|||
    attr_reader   :level, :param, :txt
 | 
			
		||||
    attr_accessor :type
 | 
			
		||||
 | 
			
		||||
    ######
 | 
			
		||||
    # This is a simple factory system that lets us associate fragement
 | 
			
		||||
    # types (a string) with a subclass of fragment
 | 
			
		||||
 | 
			
		||||
    TYPE_MAP = {}
 | 
			
		||||
 | 
			
		||||
    def self.type_name(name)
 | 
			
		||||
      TYPE_MAP[name] = self
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def self.for(line)
 | 
			
		||||
      klass =  TYPE_MAP[line.type] ||
 | 
			
		||||
        raise("Unknown line type: '#{line.type.inspect}:' '#{line.text}'")
 | 
			
		||||
      return klass.new(line.level, line.param, line.flag, line.text)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def initialize(level, param, type, txt)
 | 
			
		||||
      @level = level
 | 
			
		||||
      @param = param
 | 
			
		||||
| 
						 | 
				
			
			@ -28,21 +44,6 @@ class RDoc::Markup
 | 
			
		|||
      "L#@level: #{self.class.name.split('::')[-1]}\n#@txt"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    ######
 | 
			
		||||
    # This is a simple factory system that lets us associate fragement
 | 
			
		||||
    # types (a string) with a subclass of fragment
 | 
			
		||||
 | 
			
		||||
    TYPE_MAP = {}
 | 
			
		||||
 | 
			
		||||
    def Fragment.type_name(name)
 | 
			
		||||
      TYPE_MAP[name] = self
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def Fragment.for(line)
 | 
			
		||||
      klass =  TYPE_MAP[line.type] ||
 | 
			
		||||
        raise("Unknown line type: '#{line.type.inspect}:' '#{line.text}'")
 | 
			
		||||
      return klass.new(line.level, line.param, line.flag, line.text)
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
| 
						 | 
				
			
			@ -50,15 +51,15 @@ class RDoc::Markup
 | 
			
		|||
  # newlines when we're created, and have them put back on output.
 | 
			
		||||
 | 
			
		||||
  class Paragraph < Fragment
 | 
			
		||||
    type_name Line::PARAGRAPH
 | 
			
		||||
    type_name :PARAGRAPH
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  class BlankLine < Paragraph
 | 
			
		||||
    type_name Line::BLANK
 | 
			
		||||
    type_name :BLANK
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  class Heading < Paragraph
 | 
			
		||||
    type_name Line::HEADING
 | 
			
		||||
    type_name :HEADING
 | 
			
		||||
 | 
			
		||||
    def head_level
 | 
			
		||||
      @param.to_i
 | 
			
		||||
| 
						 | 
				
			
			@ -69,17 +70,18 @@ class RDoc::Markup
 | 
			
		|||
  # A List is a fragment with some kind of label
 | 
			
		||||
 | 
			
		||||
  class ListBase < Paragraph
 | 
			
		||||
    # List types
 | 
			
		||||
    BULLET  = :BULLET
 | 
			
		||||
    NUMBER  = :NUMBER
 | 
			
		||||
    UPPERALPHA  = :UPPERALPHA
 | 
			
		||||
    LOWERALPHA  = :LOWERALPHA
 | 
			
		||||
    LABELED = :LABELED
 | 
			
		||||
    NOTE    = :NOTE
 | 
			
		||||
    LIST_TYPES = [
 | 
			
		||||
      :BULLET,
 | 
			
		||||
      :NUMBER,
 | 
			
		||||
      :UPPERALPHA,
 | 
			
		||||
      :LOWERALPHA,
 | 
			
		||||
      :LABELED,
 | 
			
		||||
      :NOTE,
 | 
			
		||||
    ]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  class ListItem < ListBase
 | 
			
		||||
    type_name Line::LIST
 | 
			
		||||
    type_name :LIST
 | 
			
		||||
 | 
			
		||||
    #  def label
 | 
			
		||||
    #    am = AttributeManager.new(@param)
 | 
			
		||||
| 
						 | 
				
			
			@ -103,7 +105,7 @@ class RDoc::Markup
 | 
			
		|||
  # Verbatim code contains lines that don't get wrapped.
 | 
			
		||||
 | 
			
		||||
  class Verbatim < Fragment
 | 
			
		||||
    type_name  Line::VERBATIM
 | 
			
		||||
    type_name  :VERBATIM
 | 
			
		||||
 | 
			
		||||
    def add_text(txt)
 | 
			
		||||
      @txt << txt.chomp << "\n"
 | 
			
		||||
| 
						 | 
				
			
			@ -115,7 +117,7 @@ class RDoc::Markup
 | 
			
		|||
  # A horizontal rule
 | 
			
		||||
 | 
			
		||||
  class Rule < Fragment
 | 
			
		||||
    type_name Line::RULE
 | 
			
		||||
    type_name :RULE
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -8,12 +8,14 @@ class RDoc::Markup
 | 
			
		|||
  class Line
 | 
			
		||||
    INFINITY = 9999
 | 
			
		||||
 | 
			
		||||
    BLANK     = :BLANK
 | 
			
		||||
    HEADING   = :HEADING
 | 
			
		||||
    LIST      = :LIST
 | 
			
		||||
    RULE      = :RULE
 | 
			
		||||
    PARAGRAPH = :PARAGRAPH
 | 
			
		||||
    VERBATIM  = :VERBATIM
 | 
			
		||||
    LINE_TYPES = [
 | 
			
		||||
      :BLANK,
 | 
			
		||||
      :HEADING,
 | 
			
		||||
      :LIST,
 | 
			
		||||
      :PARAGRAPH,
 | 
			
		||||
      :RULE,
 | 
			
		||||
      :VERBATIM,
 | 
			
		||||
    ]
 | 
			
		||||
 | 
			
		||||
    # line type
 | 
			
		||||
    attr_accessor :type
 | 
			
		||||
| 
						 | 
				
			
			@ -132,7 +134,7 @@ class RDoc::Markup
 | 
			
		|||
 | 
			
		||||
    def normalize
 | 
			
		||||
      margin = @lines.collect{|l| l.leading_spaces}.min
 | 
			
		||||
      margin = 0 if margin == Line::INFINITY
 | 
			
		||||
      margin = 0 if margin == :INFINITY
 | 
			
		||||
      @lines.each {|line| line.strip_leading(margin) } if margin > 0
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,12 +24,12 @@ class RDoc::Markup
 | 
			
		|||
 | 
			
		||||
  class ToFlow
 | 
			
		||||
    LIST_TYPE_TO_HTML = {
 | 
			
		||||
      RDoc::Markup::ListBase::BULLET     =>  [ "<ul>", "</ul>" ],
 | 
			
		||||
      RDoc::Markup::ListBase::NUMBER     =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
      RDoc::Markup::ListBase::UPPERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
      RDoc::Markup::ListBase::LOWERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
      RDoc::Markup::ListBase::LABELED    =>  [ "<dl>", "</dl>" ],
 | 
			
		||||
      RDoc::Markup::ListBase::NOTE       =>  [ "<table>", "</table>" ],
 | 
			
		||||
      :BULLET     =>  [ "<ul>", "</ul>" ],
 | 
			
		||||
      :NUMBER     =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
      :UPPERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
      :LOWERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
      :LABELED    =>  [ "<dl>", "</dl>" ],
 | 
			
		||||
      :NOTE       =>  [ "<table>", "</table>" ],
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    InlineTag = Struct.new(:bit, :on, :off)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,12 +6,12 @@ require 'cgi'
 | 
			
		|||
class RDoc::Markup::ToHtml
 | 
			
		||||
 | 
			
		||||
  LIST_TYPE_TO_HTML = {
 | 
			
		||||
    RDoc::Markup::ListBase::BULLET =>  [ "<ul>", "</ul>" ],
 | 
			
		||||
    RDoc::Markup::ListBase::NUMBER =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
    RDoc::Markup::ListBase::UPPERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
    RDoc::Markup::ListBase::LOWERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
    RDoc::Markup::ListBase::LABELED => [ "<dl>", "</dl>" ],
 | 
			
		||||
    RDoc::Markup::ListBase::NOTE    => [ "<table>", "</table>" ],
 | 
			
		||||
    :BULLET =>  [ "<ul>", "</ul>" ],
 | 
			
		||||
    :NUMBER =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
    :UPPERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
    :LOWERALPHA =>  [ "<ol>", "</ol>" ],
 | 
			
		||||
    :LABELED => [ "<dl>", "</dl>" ],
 | 
			
		||||
    :NOTE    => [ "<table>", "</table>" ],
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  InlineTag = Struct.new(:bit, :on, :off)
 | 
			
		||||
| 
						 | 
				
			
			@ -241,22 +241,22 @@ class RDoc::Markup::ToHtml
 | 
			
		|||
 | 
			
		||||
  def list_item_start(am, fragment)
 | 
			
		||||
    case fragment.type
 | 
			
		||||
    when RDoc::Markup::ListBase::BULLET, RDoc::Markup::ListBase::NUMBER then
 | 
			
		||||
    when :BULLET, :NUMBER then
 | 
			
		||||
      annotate("<li>")
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::UPPERALPHA then
 | 
			
		||||
    when :UPPERALPHA then
 | 
			
		||||
      annotate("<li type=\"A\">")
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::LOWERALPHA then
 | 
			
		||||
    when :LOWERALPHA then
 | 
			
		||||
      annotate("<li type=\"a\">")
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::LABELED then
 | 
			
		||||
    when :LABELED then
 | 
			
		||||
      annotate("<dt>") +
 | 
			
		||||
        convert_flow(am.flow(fragment.param)) +
 | 
			
		||||
        annotate("</dt>") +
 | 
			
		||||
        annotate("<dd>")
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::NOTE then
 | 
			
		||||
    when :NOTE then
 | 
			
		||||
      annotate("<tr>") +
 | 
			
		||||
        annotate("<td valign=\"top\">") +
 | 
			
		||||
        convert_flow(am.flow(fragment.param)) +
 | 
			
		||||
| 
						 | 
				
			
			@ -269,13 +269,11 @@ class RDoc::Markup::ToHtml
 | 
			
		|||
 | 
			
		||||
  def list_end_for(fragment_type)
 | 
			
		||||
    case fragment_type
 | 
			
		||||
    when RDoc::Markup::ListBase::BULLET, RDoc::Markup::ListBase::NUMBER,
 | 
			
		||||
         RDoc::Markup::ListBase::UPPERALPHA,
 | 
			
		||||
         RDoc::Markup::ListBase::LOWERALPHA then
 | 
			
		||||
    when :BULLET, :NUMBER, :UPPERALPHA, :LOWERALPHA then
 | 
			
		||||
      "</li>"
 | 
			
		||||
    when RDoc::Markup::ListBase::LABELED then
 | 
			
		||||
    when :LABELED then
 | 
			
		||||
      "</dd>"
 | 
			
		||||
    when RDoc::Markup::ListBase::NOTE then
 | 
			
		||||
    when :NOTE then
 | 
			
		||||
      "</td></tr>"
 | 
			
		||||
    else
 | 
			
		||||
      raise "Invalid list type"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,12 +29,12 @@ class RDoc::Markup::ToLaTeX
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  LIST_TYPE_TO_LATEX = {
 | 
			
		||||
    RDoc::Markup::ListBase::BULLET =>  [ l("\\begin{itemize}"), l("\\end{itemize}") ],
 | 
			
		||||
    RDoc::Markup::ListBase::NUMBER =>  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\arabic" ],
 | 
			
		||||
    RDoc::Markup::ListBase::UPPERALPHA =>  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\Alph" ],
 | 
			
		||||
    RDoc::Markup::ListBase::LOWERALPHA =>  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\alph" ],
 | 
			
		||||
    RDoc::Markup::ListBase::LABELED => [ l("\\begin{description}"), l("\\end{description}") ],
 | 
			
		||||
    RDoc::Markup::ListBase::NOTE    => [
 | 
			
		||||
    :BULLET =>  [ l("\\begin{itemize}"), l("\\end{itemize}") ],
 | 
			
		||||
    :NUMBER =>  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\arabic" ],
 | 
			
		||||
    :UPPERALPHA =>  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\Alph" ],
 | 
			
		||||
    :LOWERALPHA =>  [ l("\\begin{enumerate}"), l("\\end{enumerate}"), "\\alph" ],
 | 
			
		||||
    :LABELED => [ l("\\begin{description}"), l("\\end{description}") ],
 | 
			
		||||
    :NOTE    => [
 | 
			
		||||
      l("\\begin{tabularx}{\\linewidth}{@{} l X @{}}"),
 | 
			
		||||
      l("\\end{tabularx}") ],
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -299,15 +299,13 @@ class RDoc::Markup::ToLaTeX
 | 
			
		|||
 | 
			
		||||
  def list_item_start(am, fragment)
 | 
			
		||||
    case fragment.type
 | 
			
		||||
    when RDoc::Markup::ListBase::BULLET, RDoc::Markup::ListBase::NUMBER,
 | 
			
		||||
         RDoc::Markup::ListBase::UPPERALPHA,
 | 
			
		||||
         RDoc::Markup::ListBase::LOWERALPHA then
 | 
			
		||||
    when :BULLET, :NUMBER, :UPPERALPHA, :LOWERALPHA then
 | 
			
		||||
      "\\item "
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::LABELED then
 | 
			
		||||
    when :LABELED then
 | 
			
		||||
      "\\item[" + convert_flow(am.flow(fragment.param)) + "] "
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::NOTE then
 | 
			
		||||
    when :NOTE then
 | 
			
		||||
        convert_flow(am.flow(fragment.param)) + " & "
 | 
			
		||||
    else
 | 
			
		||||
      raise "Invalid list type"
 | 
			
		||||
| 
						 | 
				
			
			@ -316,13 +314,9 @@ class RDoc::Markup::ToLaTeX
 | 
			
		|||
 | 
			
		||||
  def list_end_for(fragment_type)
 | 
			
		||||
    case fragment_type
 | 
			
		||||
    when RDoc::Markup::ListBase::BULLET,
 | 
			
		||||
         RDoc::Markup::ListBase::NUMBER,
 | 
			
		||||
         RDoc::Markup::ListBase::UPPERALPHA,
 | 
			
		||||
         RDoc::Markup::ListBase::LOWERALPHA,
 | 
			
		||||
         RDoc::Markup::ListBase::LABELED then
 | 
			
		||||
    when :BULLET, :NUMBER, :UPPERALPHA, :LOWERALPHA, :LABELED then
 | 
			
		||||
      ""
 | 
			
		||||
    when RDoc::Markup::ListBase::NOTE
 | 
			
		||||
    when :NOTE
 | 
			
		||||
      "\\\\\n"
 | 
			
		||||
    else
 | 
			
		||||
      raise "Invalid list type"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										49
									
								
								lib/rdoc/markup/to_test.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								lib/rdoc/markup/to_test.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,49 @@
 | 
			
		|||
require 'rdoc/markup'
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# This Markup outputter is used for testing purposes.
 | 
			
		||||
 | 
			
		||||
class RDoc::Markup::ToTest
 | 
			
		||||
 | 
			
		||||
  def start_accepting
 | 
			
		||||
    @res = []
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def end_accepting
 | 
			
		||||
    @res
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_paragraph(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_verbatim(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_list_start(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_list_end(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_list_item(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_blank_line(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_heading(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def accept_rule(am, fragment)
 | 
			
		||||
    @res << fragment.to_s
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -34,7 +34,7 @@ class RDoc::RI::DefaultDisplay
 | 
			
		|||
 | 
			
		||||
  def initialize(formatter, width, use_stdout)
 | 
			
		||||
    @use_stdout = use_stdout
 | 
			
		||||
    @formatter = formatter.new width, "     "
 | 
			
		||||
    @formatter = formatter.new $stdout, width, "     "
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_method_info(method)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,27 +1,49 @@
 | 
			
		|||
require 'rdoc/ri'
 | 
			
		||||
require 'rdoc/markup'
 | 
			
		||||
 | 
			
		||||
class RDoc::RI::Formatter
 | 
			
		||||
 | 
			
		||||
  attr_reader :indent
 | 
			
		||||
 | 
			
		||||
  def initialize(width, indent)
 | 
			
		||||
    @width   = width
 | 
			
		||||
    @indent  = indent
 | 
			
		||||
  FORMATTERS = { }
 | 
			
		||||
 | 
			
		||||
  def self.for(name)
 | 
			
		||||
    FORMATTERS[name.downcase]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.list
 | 
			
		||||
    FORMATTERS.keys.sort.join ", "
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def initialize(output, width, indent)
 | 
			
		||||
    @output = output
 | 
			
		||||
    @width  = width
 | 
			
		||||
    @indent = indent
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def draw_line(label=nil)
 | 
			
		||||
    len = @width
 | 
			
		||||
    len -= (label.size+1) if label
 | 
			
		||||
    print "-"*len
 | 
			
		||||
    if label
 | 
			
		||||
      print(" ")
 | 
			
		||||
      bold_print(label)
 | 
			
		||||
    len -= (label.size + 1) if label
 | 
			
		||||
 | 
			
		||||
    if len > 0 then
 | 
			
		||||
      @output.print '-' * len
 | 
			
		||||
      if label
 | 
			
		||||
        @output.print ' '
 | 
			
		||||
        bold_print label
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
      @output.puts
 | 
			
		||||
    else
 | 
			
		||||
      @output.print '-' * @width
 | 
			
		||||
      @output.puts
 | 
			
		||||
 | 
			
		||||
      @output.puts label
 | 
			
		||||
    end
 | 
			
		||||
    puts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def wrap(txt,  prefix=@indent, linelen=@width)
 | 
			
		||||
  def wrap(txt, prefix=@indent, linelen=@width)
 | 
			
		||||
    return unless txt && !txt.empty?
 | 
			
		||||
 | 
			
		||||
    work = conv_markup(txt)
 | 
			
		||||
    textLen = linelen - prefix.length
 | 
			
		||||
    patt = Regexp.new("^(.{0,#{textLen}})[ \n]")
 | 
			
		||||
| 
						 | 
				
			
			@ -38,11 +60,11 @@ class RDoc::RI::Formatter
 | 
			
		|||
      end
 | 
			
		||||
    end
 | 
			
		||||
    res << work if work.length.nonzero?
 | 
			
		||||
    puts(prefix + res.join("\n" + next_prefix))
 | 
			
		||||
    @output.puts(prefix + res.join("\n" + next_prefix))
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def blankline
 | 
			
		||||
    puts
 | 
			
		||||
    @output.puts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
| 
						 | 
				
			
			@ -53,11 +75,11 @@ class RDoc::RI::Formatter
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def bold_print(txt)
 | 
			
		||||
    print txt
 | 
			
		||||
    @output.print txt
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def raw_print_line(txt)
 | 
			
		||||
    puts txt
 | 
			
		||||
    @output.puts txt
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
| 
						 | 
				
			
			@ -69,7 +91,6 @@ class RDoc::RI::Formatter
 | 
			
		|||
      gsub(/</, '<').
 | 
			
		||||
      gsub(/"/, '"').
 | 
			
		||||
      gsub(/&/, '&')
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
| 
						 | 
				
			
			@ -78,25 +99,22 @@ class RDoc::RI::Formatter
 | 
			
		|||
  def conv_markup(txt)
 | 
			
		||||
    txt.
 | 
			
		||||
      gsub(%r{<tt>(.*?)</tt>}) { "+#$1+" } .
 | 
			
		||||
    gsub(%r{<code>(.*?)</code>}) { "+#$1+" } .
 | 
			
		||||
    gsub(%r{<b>(.*?)</b>}) { "*#$1*" } .
 | 
			
		||||
    gsub(%r{<em>(.*?)</em>}) { "_#$1_" }
 | 
			
		||||
      gsub(%r{<code>(.*?)</code>}) { "+#$1+" } .
 | 
			
		||||
      gsub(%r{<b>(.*?)</b>}) { "*#$1*" } .
 | 
			
		||||
      gsub(%r{<em>(.*?)</em>}) { "_#$1_" }
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_list(list)
 | 
			
		||||
    case list.type
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::BULLET
 | 
			
		||||
    when :BULLET
 | 
			
		||||
      prefixer = proc { |ignored| @indent + "*   " }
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::NUMBER,
 | 
			
		||||
      RDoc::Markup::ListBase::UPPERALPHA,
 | 
			
		||||
      RDoc::Markup::ListBase::LOWERALPHA
 | 
			
		||||
    when :NUMBER, :UPPERALPHA, :LOWERALPHA then
 | 
			
		||||
 | 
			
		||||
      start = case list.type
 | 
			
		||||
              when RDoc::Markup::ListBase::NUMBER      then 1
 | 
			
		||||
              when RDoc::Markup::ListBase::UPPERALPHA then 'A'
 | 
			
		||||
              when RDoc::Markup::ListBase::LOWERALPHA  then 'a'
 | 
			
		||||
              when :NUMBER     then 1
 | 
			
		||||
              when :UPPERALPHA then 'A'
 | 
			
		||||
              when :LOWERALPHA then 'a'
 | 
			
		||||
              end
 | 
			
		||||
      prefixer = proc do |ignored|
 | 
			
		||||
        res = @indent + "#{start}.".ljust(4)
 | 
			
		||||
| 
						 | 
				
			
			@ -104,12 +122,12 @@ class RDoc::RI::Formatter
 | 
			
		|||
        res
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::LABELED
 | 
			
		||||
    when :LABELED then
 | 
			
		||||
      prefixer = proc do |li|
 | 
			
		||||
        li.label
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::NOTE
 | 
			
		||||
    when :NOTE then
 | 
			
		||||
      longest = 0
 | 
			
		||||
      list.contents.each do |item|
 | 
			
		||||
        if item.kind_of?(RDoc::Markup::Flow::LI) && item.label.length > longest
 | 
			
		||||
| 
						 | 
				
			
			@ -122,8 +140,7 @@ class RDoc::RI::Formatter
 | 
			
		|||
      end
 | 
			
		||||
 | 
			
		||||
    else
 | 
			
		||||
      fail "unknown list type"
 | 
			
		||||
 | 
			
		||||
      raise ArgumentError, "unknown list type #{list.type}"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    list.contents.each do |item|
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +178,7 @@ class RDoc::RI::Formatter
 | 
			
		|||
 | 
			
		||||
  def display_verbatim_flow_item(item, prefix=@indent)
 | 
			
		||||
    item.body.split(/\n/).each do |line|
 | 
			
		||||
      print @indent, conv_html(line), "\n"
 | 
			
		||||
      @output.print @indent, conv_html(line), "\n"
 | 
			
		||||
    end
 | 
			
		||||
    blankline
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -171,19 +188,19 @@ class RDoc::RI::Formatter
 | 
			
		|||
    case level
 | 
			
		||||
    when 1
 | 
			
		||||
      ul = "=" * text.length
 | 
			
		||||
      puts
 | 
			
		||||
      puts text.upcase
 | 
			
		||||
      puts ul
 | 
			
		||||
      @output.puts
 | 
			
		||||
      @output.puts text.upcase
 | 
			
		||||
      @output.puts ul
 | 
			
		||||
      #        puts
 | 
			
		||||
 | 
			
		||||
    when 2
 | 
			
		||||
      ul = "-" * text.length
 | 
			
		||||
      puts
 | 
			
		||||
      puts text
 | 
			
		||||
      puts ul
 | 
			
		||||
      @output.puts
 | 
			
		||||
      @output.puts text
 | 
			
		||||
      @output.puts ul
 | 
			
		||||
      #        puts
 | 
			
		||||
    else
 | 
			
		||||
      print indent, text, "\n"
 | 
			
		||||
      @output.print indent, text, "\n"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -274,11 +291,11 @@ class RDoc::RI::AttributeFormatter < RDoc::RI::Formatter
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
  # Overrides base class. Looks for <tt>...</tt> etc sequences
 | 
			
		||||
  # and generates an array of AttrChars. This array is then used
 | 
			
		||||
  # as the basis for the split
 | 
			
		||||
  # Overrides base class.  Looks for <tt>...</tt> etc sequences and generates
 | 
			
		||||
  # an array of AttrChars.  This array is then used as the basis for the
 | 
			
		||||
  # split.
 | 
			
		||||
 | 
			
		||||
  def wrap(txt,  prefix=@indent, linelen=@width)
 | 
			
		||||
  def wrap(txt, prefix=@indent, linelen=@width)
 | 
			
		||||
    return unless txt && !txt.empty?
 | 
			
		||||
 | 
			
		||||
    txt = add_attributes_to(txt)
 | 
			
		||||
| 
						 | 
				
			
			@ -303,15 +320,15 @@ class RDoc::RI::AttributeFormatter < RDoc::RI::Formatter
 | 
			
		|||
  protected
 | 
			
		||||
 | 
			
		||||
  def write_attribute_text(prefix, line)
 | 
			
		||||
    print prefix
 | 
			
		||||
    @output.print prefix
 | 
			
		||||
    line.each do |achar|
 | 
			
		||||
      print achar.char
 | 
			
		||||
      @output.print achar.char
 | 
			
		||||
    end
 | 
			
		||||
    puts
 | 
			
		||||
    @output.puts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def bold_print(txt)
 | 
			
		||||
    print txt
 | 
			
		||||
    @output.print txt
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
| 
						 | 
				
			
			@ -342,18 +359,18 @@ class RDoc::RI::OverstrikeFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
  BS = "\C-h"
 | 
			
		||||
 | 
			
		||||
  def write_attribute_text(prefix, line)
 | 
			
		||||
    print prefix
 | 
			
		||||
    @output.print prefix
 | 
			
		||||
    line.each do |achar|
 | 
			
		||||
      attr = achar.attr
 | 
			
		||||
      if (attr & (ITALIC+CODE)) != 0
 | 
			
		||||
        print "_", BS
 | 
			
		||||
        @output.print "_", BS
 | 
			
		||||
      end
 | 
			
		||||
      if (attr & BOLD) != 0
 | 
			
		||||
        print achar.char, BS
 | 
			
		||||
        @output.print achar.char, BS
 | 
			
		||||
      end
 | 
			
		||||
      print achar.char
 | 
			
		||||
      @output.print achar.char
 | 
			
		||||
    end
 | 
			
		||||
    puts
 | 
			
		||||
    @output.puts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  ##
 | 
			
		||||
| 
						 | 
				
			
			@ -361,7 +378,7 @@ class RDoc::RI::OverstrikeFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
 | 
			
		||||
  def bold_print(text)
 | 
			
		||||
    text.split(//).each do |ch|
 | 
			
		||||
      print ch, BS, ch
 | 
			
		||||
      @output.print ch, BS, ch
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -374,12 +391,12 @@ end
 | 
			
		|||
class RDoc::RI::AnsiFormatter < RDoc::RI::AttributeFormatter
 | 
			
		||||
 | 
			
		||||
  def initialize(*args)
 | 
			
		||||
    print "\033[0m"
 | 
			
		||||
    super
 | 
			
		||||
    @output.print "\033[0m"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def write_attribute_text(prefix, line)
 | 
			
		||||
    print prefix
 | 
			
		||||
    @output.print prefix
 | 
			
		||||
    curr_attr = 0
 | 
			
		||||
    line.each do |achar|
 | 
			
		||||
      attr = achar.attr
 | 
			
		||||
| 
						 | 
				
			
			@ -387,14 +404,14 @@ class RDoc::RI::AnsiFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
        update_attributes(achar.attr)
 | 
			
		||||
        curr_attr = achar.attr
 | 
			
		||||
      end
 | 
			
		||||
      print achar.char
 | 
			
		||||
      @output.print achar.char
 | 
			
		||||
    end
 | 
			
		||||
    update_attributes(0) unless curr_attr.zero?
 | 
			
		||||
    puts
 | 
			
		||||
    @output.puts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def bold_print(txt)
 | 
			
		||||
    print "\033[1m#{txt}\033[m"
 | 
			
		||||
    @output.print "\033[1m#{txt}\033[m"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  HEADINGS = {
 | 
			
		||||
| 
						 | 
				
			
			@ -406,10 +423,10 @@ class RDoc::RI::AnsiFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
  def display_heading(text, level, indent)
 | 
			
		||||
    level = 3 if level > 3
 | 
			
		||||
    heading = HEADINGS[level]
 | 
			
		||||
    print indent
 | 
			
		||||
    print heading[0]
 | 
			
		||||
    print strip_attributes(text)
 | 
			
		||||
    puts heading[1]
 | 
			
		||||
    @output.print indent
 | 
			
		||||
    @output.print heading[0]
 | 
			
		||||
    @output.print strip_attributes(text)
 | 
			
		||||
    @output.puts heading[1]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
| 
						 | 
				
			
			@ -427,7 +444,7 @@ class RDoc::RI::AnsiFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
        str << ATTR_MAP[quality]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    print str, "m"
 | 
			
		||||
    @output.print str, "m"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			@ -445,7 +462,7 @@ class RDoc::RI::HtmlFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
        update_attributes(curr_attr, achar.attr)
 | 
			
		||||
        curr_attr = achar.attr
 | 
			
		||||
      end
 | 
			
		||||
      print(escape(achar.char))
 | 
			
		||||
      @output.print(escape(achar.char))
 | 
			
		||||
    end
 | 
			
		||||
    update_attributes(curr_attr, 0) unless curr_attr.zero?
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -454,7 +471,7 @@ class RDoc::RI::HtmlFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
    if label != nil
 | 
			
		||||
      bold_print(label)
 | 
			
		||||
    end
 | 
			
		||||
    puts("<hr>")
 | 
			
		||||
    @output.puts("<hr>")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def bold_print(txt)
 | 
			
		||||
| 
						 | 
				
			
			@ -462,38 +479,36 @@ class RDoc::RI::HtmlFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def blankline()
 | 
			
		||||
    puts("<p>")
 | 
			
		||||
    @output.puts("<p>")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def break_to_newline
 | 
			
		||||
    puts("<br>")
 | 
			
		||||
    @output.puts("<br>")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_heading(text, level, indent)
 | 
			
		||||
    level = 4 if level > 4
 | 
			
		||||
    tag("h#{level}") { text }
 | 
			
		||||
    puts
 | 
			
		||||
    @output.puts
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_list(list)
 | 
			
		||||
    case list.type
 | 
			
		||||
    when RDoc::Markup::ListBase::BULLET
 | 
			
		||||
    when :BULLET then
 | 
			
		||||
      list_type = "ul"
 | 
			
		||||
      prefixer = proc { |ignored| "<li>" }
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::NUMBER,
 | 
			
		||||
      RDoc::Markup::ListBase::UPPERALPHA,
 | 
			
		||||
      RDoc::Markup::ListBase::LOWERALPHA
 | 
			
		||||
    when :NUMBER, :UPPERALPHA, :LOWERALPHA then
 | 
			
		||||
      list_type = "ol"
 | 
			
		||||
      prefixer = proc { |ignored| "<li>" }
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::LABELED
 | 
			
		||||
    when :LABELED then
 | 
			
		||||
      list_type = "dl"
 | 
			
		||||
      prefixer = proc do |li|
 | 
			
		||||
          "<dt><b>" + escape(li.label) + "</b><dd>"
 | 
			
		||||
      end
 | 
			
		||||
 | 
			
		||||
    when RDoc::Markup::ListBase::NOTE
 | 
			
		||||
    when :NOTE then
 | 
			
		||||
      list_type = "table"
 | 
			
		||||
      prefixer = proc do |li|
 | 
			
		||||
          %{<tr valign="top"><td>#{li.label.gsub(/ /, ' ')}</td><td>}
 | 
			
		||||
| 
						 | 
				
			
			@ -502,25 +517,25 @@ class RDoc::RI::HtmlFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
      fail "unknown list type"
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    print "<#{list_type}>"
 | 
			
		||||
    @output.print "<#{list_type}>"
 | 
			
		||||
    list.contents.each do |item|
 | 
			
		||||
      if item.kind_of? RDoc::Markup::Flow::LI
 | 
			
		||||
        prefix = prefixer.call(item)
 | 
			
		||||
        print prefix
 | 
			
		||||
        @output.print prefix
 | 
			
		||||
        display_flow_item(item, prefix)
 | 
			
		||||
      else
 | 
			
		||||
        display_flow_item(item)
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    print "</#{list_type}>"
 | 
			
		||||
    @output.print "</#{list_type}>"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def display_verbatim_flow_item(item, prefix=@indent)
 | 
			
		||||
    print("<pre>")
 | 
			
		||||
    @output.print("<pre>")
 | 
			
		||||
    item.body.split(/\n/).each do |line|
 | 
			
		||||
      puts conv_html(line)
 | 
			
		||||
      @output.puts conv_html(line)
 | 
			
		||||
    end
 | 
			
		||||
    puts("</pre>")
 | 
			
		||||
    @output.puts("</pre>")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  private
 | 
			
		||||
| 
						 | 
				
			
			@ -547,13 +562,13 @@ class RDoc::RI::HtmlFormatter < RDoc::RI::AttributeFormatter
 | 
			
		|||
        str << "<" << ATTR_MAP[quality]
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
    print str
 | 
			
		||||
    @output.print str
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def tag(code)
 | 
			
		||||
    print("<#{code}>")
 | 
			
		||||
    print(yield)
 | 
			
		||||
    print("</#{code}>")
 | 
			
		||||
    @output.print("<#{code}>")
 | 
			
		||||
    @output.print(yield)
 | 
			
		||||
    @output.print("</#{code}>")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def escape(str)
 | 
			
		||||
| 
						 | 
				
			
			@ -584,7 +599,7 @@ class RDoc::RI::SimpleFormatter < RDoc::RI::Formatter
 | 
			
		|||
  def draw_line(label=nil)
 | 
			
		||||
    unless label.nil? then
 | 
			
		||||
      bold_print(label)
 | 
			
		||||
      puts
 | 
			
		||||
      @output.puts
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -595,36 +610,18 @@ class RDoc::RI::SimpleFormatter < RDoc::RI::Formatter
 | 
			
		|||
    text = strip_attributes(text)
 | 
			
		||||
    case level
 | 
			
		||||
    when 1
 | 
			
		||||
      puts "= " + text.upcase
 | 
			
		||||
      @output.puts "= " + text.upcase
 | 
			
		||||
    when 2
 | 
			
		||||
      puts "-- " + text
 | 
			
		||||
      @output.puts "-- " + text
 | 
			
		||||
    else
 | 
			
		||||
      print indent, text, "\n"
 | 
			
		||||
      @output.print indent, text, "\n"
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
# Finally, fill in the list of known formatters
 | 
			
		||||
 | 
			
		||||
class RDoc::RI::Formatter
 | 
			
		||||
 | 
			
		||||
  FORMATTERS = {
 | 
			
		||||
    "plain"  => RDoc::RI::Formatter,
 | 
			
		||||
    "simple" => RDoc::RI::SimpleFormatter,
 | 
			
		||||
    "bs"     => RDoc::RI::OverstrikeFormatter,
 | 
			
		||||
    "ansi"   => RDoc::RI::AnsiFormatter,
 | 
			
		||||
    "html"   => RDoc::RI::HtmlFormatter,
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  def self.list
 | 
			
		||||
    FORMATTERS.keys.sort.join(", ")
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def self.for(name)
 | 
			
		||||
    FORMATTERS[name.downcase]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
RDoc::RI::Formatter::FORMATTERS['plain']  = RDoc::RI::Formatter
 | 
			
		||||
RDoc::RI::Formatter::FORMATTERS['simple'] = RDoc::RI::SimpleFormatter
 | 
			
		||||
RDoc::RI::Formatter::FORMATTERS['bs']     = RDoc::RI::OverstrikeFormatter
 | 
			
		||||
RDoc::RI::Formatter::FORMATTERS['ansi']   = RDoc::RI::AnsiFormatter
 | 
			
		||||
RDoc::RI::Formatter::FORMATTERS['html']   = RDoc::RI::HtmlFormatter
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ class TestRdocC_Parser < Test::Unit::TestCase
 | 
			
		|||
 | 
			
		||||
    @top_level = RDoc::TopLevel.new filename
 | 
			
		||||
    @fn = filename
 | 
			
		||||
    @options = Options.instance
 | 
			
		||||
    @options = RDoc::Options.new Hash.new
 | 
			
		||||
    @stats = RDoc::Stats.new
 | 
			
		||||
 | 
			
		||||
    @progress = StringIO.new
 | 
			
		||||
| 
						 | 
				
			
			@ -1,62 +1,19 @@
 | 
			
		|||
require 'test/unit'
 | 
			
		||||
require 'rdoc/markup/simple_markup'
 | 
			
		||||
require 'rdoc/markup'
 | 
			
		||||
require 'rdoc/markup/to_test'
 | 
			
		||||
 | 
			
		||||
class TestSimpleMarkup < Test::Unit::TestCase
 | 
			
		||||
 | 
			
		||||
  class MockOutput
 | 
			
		||||
 | 
			
		||||
    def start_accepting
 | 
			
		||||
      @res = []
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def end_accepting
 | 
			
		||||
      @res
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_paragraph(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_verbatim(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_list_start(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_list_end(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_list_item(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_blank_line(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_heading(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    def accept_rule(am, fragment)
 | 
			
		||||
      @res << fragment.to_s
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
  end
 | 
			
		||||
class TestRDocMarkup < Test::Unit::TestCase
 | 
			
		||||
 | 
			
		||||
  def basic_conv(str)
 | 
			
		||||
    sm = SM::SimpleMarkup.new
 | 
			
		||||
    mock = MockOutput.new
 | 
			
		||||
    sm = RDoc::Markup.new
 | 
			
		||||
    mock = RDoc::Markup::ToTest.new
 | 
			
		||||
    sm.convert(str, mock)
 | 
			
		||||
    sm.content
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def line_groups(str, expected)
 | 
			
		||||
    p = SM::SimpleMarkup.new
 | 
			
		||||
    mock = MockOutput.new
 | 
			
		||||
    p = RDoc::Markup.new
 | 
			
		||||
    mock = RDoc::Markup::ToTest.new
 | 
			
		||||
 | 
			
		||||
    block = p.convert(str, mock)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,8 +29,8 @@ class TestSimpleMarkup < Test::Unit::TestCase
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def line_types(str, expected)
 | 
			
		||||
    p = SM::SimpleMarkup.new
 | 
			
		||||
    mock = MockOutput.new
 | 
			
		||||
    p = RDoc::Markup.new
 | 
			
		||||
    mock = RDoc::Markup::ToTest.new
 | 
			
		||||
    p.convert(str, mock)
 | 
			
		||||
    assert_equal(expected, p.get_line_types.map{|type| type.to_s[0,1]}.join(''))
 | 
			
		||||
  end
 | 
			
		||||
| 
						 | 
				
			
			@ -1,10 +1,10 @@
 | 
			
		|||
require "test/unit"
 | 
			
		||||
require "rdoc/markup/simple_markup/inline"
 | 
			
		||||
require "rdoc/markup/inline"
 | 
			
		||||
 | 
			
		||||
class TestSimpleMarkupAttributeManager < Test::Unit::TestCase
 | 
			
		||||
class TestRDocMarkupAttributeManager < Test::Unit::TestCase
 | 
			
		||||
 | 
			
		||||
  def setup
 | 
			
		||||
    @am = SM::AttributeManager.new
 | 
			
		||||
    @am = RDoc::Markup::AttributeManager.new
 | 
			
		||||
 | 
			
		||||
    @bold_on  = @am.changed_attribute_by_name([], [:BOLD])
 | 
			
		||||
    @bold_off = @am.changed_attribute_by_name([:BOLD], [])
 | 
			
		||||
| 
						 | 
				
			
			@ -28,11 +28,11 @@ class TestSimpleMarkupAttributeManager < Test::Unit::TestCase
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def crossref(text)
 | 
			
		||||
    crossref_bitmap = SM::Attribute.bitmap_for(:_SPECIAL_) |
 | 
			
		||||
                      SM::Attribute.bitmap_for(:CROSSREF)
 | 
			
		||||
    crossref_bitmap = RDoc::Markup::Attribute.bitmap_for(:_SPECIAL_) |
 | 
			
		||||
                      RDoc::Markup::Attribute.bitmap_for(:CROSSREF)
 | 
			
		||||
 | 
			
		||||
    [ @am.changed_attribute_by_name([], [:CROSSREF] | [:_SPECIAL_]),
 | 
			
		||||
      SM::Special.new(crossref_bitmap, text),
 | 
			
		||||
      RDoc::Markup::Special.new(crossref_bitmap, text),
 | 
			
		||||
      @am.changed_attribute_by_name([:CROSSREF] | [:_SPECIAL_], [])
 | 
			
		||||
    ]
 | 
			
		||||
  end
 | 
			
		||||
							
								
								
									
										42
									
								
								test/rdoc/test_rdoc_ri_attribute_formatter.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								test/rdoc/test_rdoc_ri_attribute_formatter.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,42 @@
 | 
			
		|||
require 'stringio'
 | 
			
		||||
require 'test/unit'
 | 
			
		||||
require 'rdoc/ri/formatter'
 | 
			
		||||
 | 
			
		||||
class TestRDocRIAttributeFormatter < Test::Unit::TestCase
 | 
			
		||||
 | 
			
		||||
  def setup
 | 
			
		||||
    @output = StringIO.new
 | 
			
		||||
    @width = 78
 | 
			
		||||
    @indent = '  '
 | 
			
		||||
 | 
			
		||||
    @f = RDoc::RI::AttributeFormatter.new @output, @width, @indent
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_empty
 | 
			
		||||
    @f.wrap ''
 | 
			
		||||
    assert_equal '', @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_long
 | 
			
		||||
    @f.wrap 'a ' * (@width / 2)
 | 
			
		||||
    assert_equal "  a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a \n  a \n",
 | 
			
		||||
                 @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_markup
 | 
			
		||||
    @f.wrap 'a <tt>b</tt> c'
 | 
			
		||||
    assert_equal "  a b c\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_nil
 | 
			
		||||
    @f.wrap nil
 | 
			
		||||
    assert_equal '', @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_short
 | 
			
		||||
    @f.wrap 'a b c'
 | 
			
		||||
    assert_equal "  a b c\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										124
									
								
								test/rdoc/test_rdoc_ri_formatter.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										124
									
								
								test/rdoc/test_rdoc_ri_formatter.rb
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,124 @@
 | 
			
		|||
require 'stringio'
 | 
			
		||||
require 'test/unit'
 | 
			
		||||
require 'rdoc/ri/formatter'
 | 
			
		||||
require 'rdoc/markup/to_flow'
 | 
			
		||||
 | 
			
		||||
class TestRDocRIFormatter < Test::Unit::TestCase
 | 
			
		||||
 | 
			
		||||
  def setup
 | 
			
		||||
    @output = StringIO.new
 | 
			
		||||
    @width = 78
 | 
			
		||||
    @indent = '  '
 | 
			
		||||
 | 
			
		||||
    @f = RDoc::RI::Formatter.new @output, @width, @indent
 | 
			
		||||
    @markup = RDoc::Markup.new
 | 
			
		||||
    @flow = RDoc::Markup::ToFlow.new
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_blankline
 | 
			
		||||
    @f.blankline
 | 
			
		||||
 | 
			
		||||
    assert_equal "\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_bold_print
 | 
			
		||||
    @f.bold_print 'a b c'
 | 
			
		||||
 | 
			
		||||
    assert_equal 'a b c', @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_break_to_newline
 | 
			
		||||
    @f.break_to_newline
 | 
			
		||||
 | 
			
		||||
    assert_equal '', @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_conv_html
 | 
			
		||||
    assert_equal '> < " &', @f.conv_html('> < " &')
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_conv_markup
 | 
			
		||||
    text = '<tt>a</tt> <code>b</code> <b>c</b> <em>d</em>'
 | 
			
		||||
 | 
			
		||||
    expected = '+a+ +b+ *c* _d_'
 | 
			
		||||
 | 
			
		||||
    assert_equal expected, @f.conv_markup(text)
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_display_list_bullet
 | 
			
		||||
    list = util_convert('* a b c').first
 | 
			
		||||
 | 
			
		||||
    @f.display_list list
 | 
			
		||||
 | 
			
		||||
    assert_equal "  *   a b c\n\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_display_list_unknown
 | 
			
		||||
    list = util_convert('* a b c').first
 | 
			
		||||
    list.instance_variable_set :@type, :UNKNOWN
 | 
			
		||||
 | 
			
		||||
    e = assert_raise ArgumentError do
 | 
			
		||||
      @f.display_list list
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    assert_equal 'unknown list type UNKNOWN', e.message
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_draw_line
 | 
			
		||||
    @f.draw_line
 | 
			
		||||
 | 
			
		||||
    expected = '-' * @width + "\n"
 | 
			
		||||
    assert_equal expected, @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_draw_line_label
 | 
			
		||||
    @f.draw_line 'label'
 | 
			
		||||
 | 
			
		||||
    expected = '-' * (@width - 6) + " label\n"
 | 
			
		||||
    assert_equal expected, @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_draw_line_label_long
 | 
			
		||||
    @f.draw_line 'a' * @width
 | 
			
		||||
 | 
			
		||||
    expected = '-' * @width + "\n" + ('a' * @width) + "\n"
 | 
			
		||||
    assert_equal expected, @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_raw_print_line
 | 
			
		||||
    @f.raw_print_line 'a b c'
 | 
			
		||||
 | 
			
		||||
    assert_equal "a b c\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_empty
 | 
			
		||||
    @f.wrap ''
 | 
			
		||||
    assert_equal '', @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_long
 | 
			
		||||
    @f.wrap 'a ' * (@width / 2)
 | 
			
		||||
    assert_equal "  a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a a\n  a \n",
 | 
			
		||||
                 @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_markup
 | 
			
		||||
    @f.wrap 'a <tt>b</tt> c'
 | 
			
		||||
    assert_equal "  a +b+ c\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_nil
 | 
			
		||||
    @f.wrap nil
 | 
			
		||||
    assert_equal '', @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def test_wrap_short
 | 
			
		||||
    @f.wrap 'a b c'
 | 
			
		||||
    assert_equal "  a b c\n", @output.string
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  def util_convert(text)
 | 
			
		||||
    @markup.convert text, @flow
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue