123456789_123456789_123456789_123456789_123456789_

Class: RDoc::I18n::Text

Relationships & Source Files
Inherits: Object
Defined in: lib/rdoc/i18n/text.rb

Overview

An i18n supported text.

This object provides the following two features:

* Extracts translation messages from wrapped raw text.
* Translates wrapped raw text in specified locale.

Wrapped raw text is one of String, ::RDoc::Comment or Array of them.

Class Method Summary

Instance Method Summary

Constructor Details

.new(raw) ⇒ Text

Creates a new i18n supported text for raw text.

[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 16

def initialize(raw)
  @raw = raw
end

Instance Method Details

#each_line(raw, &block) (private)

[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 87

def each_line(raw, &block)
  case raw
  when RDoc::Comment
    raw.text.each_line(&block)
  when Array
    raw.each do |comment, location|
      each_line(comment, &block)
    end
  else
    raw.each_line(&block)
  end
end

#emit_empty_line_event(line, line_no) {|part| ... } (private)

Yields:

  • (part)
[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 100

def emit_empty_line_event(line, line_no)
  part = {
    :type => :empty_line,
    :line => line,
    :line_no => line_no,
  }
  yield(part)
end

#emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block) (private)

[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 109

def emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
  paragraph_part = {
    :type => :paragraph,
    :line_no => paragraph_start_line,
  }
  match_data = /(\s*)\z/.match(paragraph)
  if match_data
    paragraph_part[:paragraph] = match_data.pre_match
    yield(paragraph_part)
    emit_empty_line_event(match_data[1], line_no, &block)
  else
    paragraph_part[:paragraph] = paragraph
    yield(paragraph_part)
  end
end

#extract_messages

Extracts translation target messages and yields each message.

Each yielded message is a Hash. It consists of the followings:

:type

:paragraph

:paragraph

String (The translation target message itself.)

:line_no

Integer (The line number of the :paragraph is started.)

The above content may be added in the future.

[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 31

def extract_messages
  parse do |part|
    case part[:type]
    when :empty_line
      # ignore
    when :paragraph
      yield(part)
    end
  end
end

#parse(&block) (private)

[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 59

def parse(&block)
  paragraph = ''
  paragraph_start_line = 0
  line_no = 0

  each_line(@raw) do |line|
    line_no += 1
    case line
    when /\A\s*\z/
      if paragraph.empty?
        emit_empty_line_event(line, line_no, &block)
      else
        paragraph << line
        emit_paragraph_event(paragraph, paragraph_start_line, line_no,
                             &block)
        paragraph = ''
      end
    else
      paragraph_start_line = line_no if paragraph.empty?
      paragraph << line
    end
  end

  unless paragraph.empty?
    emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block)
  end
end

#translate(locale)

Translates raw text into locale.

[ GitHub ]

  
# File 'lib/rdoc/i18n/text.rb', line 43

def translate(locale)
  translated_text = ''
  parse do |part|
    case part[:type]
    when :paragraph
      translated_text << locale.translate(part[:paragraph])
    when :empty_line
      translated_text << part[:line]
    else
      raise "should not reach here: unexpected type: #{type}"
    end
  end
  translated_text
end