Class: RT::RTParser

### Home Classes Methods

### In Files

- lib/rt/rtparser.rb

### Parent

Object

### Methods

- ::new
- ::parse
- #blocks
- #calc_span
- #make_blocks
- #normalize_linefeed!
- #parse_body
- #parse_config
- #parse_header

### Class/Module Index

Quicksearch

- RT
- RT::RT2HTMLVisitor
- RT::RT2TXTVisitor
- RT::RTCell
- RT::RTParser
- RT::RTVisitor
- W3M

No matching classes.

# RT::RTParser

### Constants

DefaultConfig
ESCAPE_TMP

### Attributes

body[R]
config[R]
header[R]
str[R]

### Public Class Methods

new(str="") click to toggle source

    # File lib/rt/rtparser.rb, line 63
    def initialize(str="")
      @str = str.dup
      normalize_linefeed! @str
      @config_line = []
      @header_line = []
      @body_line = []
      @config = DefaultConfig.dup
      @header = []
      @body = []
    end

parse(str) click to toggle source

    # File lib/rt/rtparser.rb, line 80
    def self::parse(str)
      obj = self::new str
      obj.make_blocks
      obj.parse_config
      obj.parse_header
      obj.parse_body
      obj.calc_span(obj.header)
      obj.calc_span(obj.body)
      obj
    end

### Public Instance Methods

blocks() click to toggle source

    # File lib/rt/rtparser.rb, line 91
    def blocks
      [@config_line, @header_line, @body_line]
    end

calc_span(tbl) click to toggle source

    # File lib/rt/rtparser.rb, line 185
    def calc_span(tbl)
      return if tbl.empty?
      cols = tbl[0].length
      tbl.each do |row|
        row.each_with_index do |elm, j|
          case elm
          when String
          when RTCell
            nspan = 1
            1.upto(cols-j-1) do |k|
              break unless row[j+k] == config['colspan']
              nspan += 1
            end
            row[j].colspan = nspan
          else
            raise "[BUG] invalid cell"
          end
        end
      end

      rows = tbl.length
      0.upto(cols-1) do |j|
        0.upto(rows-1) do |i|
          case tbl[i][j]
          when String
          when RTCell
            nspan = 1
            1.upto(rows-i-1) do |k|
              break unless tbl[i+k][j] == config['rowspan']
              nspan += 1
            end
            tbl[i][j].rowspan = nspan
          else
            raise "[BUG] invalid cell"
          end
        end
      end
    end

make_blocks(str = @str) click to toggle source

    # File lib/rt/rtparser.rb, line 95
    def make_blocks(str = @str)
      part = str.split(/\n\n/).collect{|x| x.split(/\n/)}
      case part.length
      when 0
      when 1
        @body_line, = part
      when 2
        @config_line, @body_line = part
      when 3
        @config_line, @header_line, @body_line = part
      else
        raise "RT: blocks are too many."
      end
      self
    end

normalize_linefeed!(str) click to toggle source

    # File lib/rt/rtparser.rb, line 75
    def normalize_linefeed!(str)
      str.gsub!("\r\n", "\n")
      str.gsub!("\r", "\n")
    end

parse_body(lines = @body_line) click to toggle source

    # File lib/rt/rtparser.rb, line 178
    def parse_body(lines = @body_line)
      @body = parse_table_data(lines) {|x|
        _make_cell x, nil
      }
      self
    end

parse_config(lines = @config_line) click to toggle source

    # File lib/rt/rtparser.rb, line 111
    def parse_config(lines = @config_line)
      lines.each do |line|
        case line
        when /^#/               # comment
        when /^\s*(\S+)\s*=\s*(.+)$/
          @config[$1] = $2
        else
          raise "RT: syntax error in config block"
        end
      end
      self
    end

parse_header(lines = @header_line) click to toggle source

    # File lib/rt/rtparser.rb, line 171
    def parse_header(lines = @header_line)
      @header = parse_table_data(lines) {|x|
        _make_cell x, :center
      }
      self
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.