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
-
.new(raw) ⇒ Text
constructor
Creates a new i18n supported text for
raw
text.
Instance Method Summary
-
#extract_messages
Extracts translation target messages and yields each message.
-
#translate(locale)
Translates raw text into
locale
. - #each_line(raw, &block) private
- #emit_empty_line_event(line, line_no) {|part| ... } private
- #emit_paragraph_event(paragraph, paragraph_start_line, line_no, &block) private
- #parse(&block) private
Constructor Details
.new(raw) ⇒ Text
Creates a new i18n supported text for raw
text.
# File 'lib/rdoc/i18n/text.rb', line 16
def initialize(raw) @raw = raw end
Instance Method Details
#each_line(raw, &block) (private)
[ GitHub ]#emit_empty_line_event(line, line_no) {|part| ... } (private)
# 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.
# File 'lib/rdoc/i18n/text.rb', line 31
def 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
.
# 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