mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
d42d6e690e
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47391 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
140 lines
3.2 KiB
Ruby
140 lines
3.2 KiB
Ruby
##
|
|
# A PO entry in PO
|
|
|
|
class RDoc::Generator::POT::POEntry
|
|
|
|
# The msgid content
|
|
attr_reader :msgid
|
|
|
|
# The msgstr content
|
|
attr_reader :msgstr
|
|
|
|
# The comment content created by translator (PO editor)
|
|
attr_reader :translator_comment
|
|
|
|
# The comment content extracted from source file
|
|
attr_reader :extracted_comment
|
|
|
|
# The locations where the PO entry is extracted
|
|
attr_reader :references
|
|
|
|
# The flags of the PO entry
|
|
attr_reader :flags
|
|
|
|
##
|
|
# Creates a PO entry for +msgid+. Other valus can be specified by
|
|
# +options+.
|
|
|
|
def initialize msgid, options = {}
|
|
@msgid = msgid
|
|
@msgstr = options[:msgstr] || ""
|
|
@translator_comment = options[:translator_comment]
|
|
@extracted_comment = options[:extracted_comment]
|
|
@references = options[:references] || []
|
|
@flags = options[:flags] || []
|
|
end
|
|
|
|
##
|
|
# Returns the PO entry in PO format.
|
|
|
|
def to_s
|
|
entry = ''
|
|
entry << format_translator_comment
|
|
entry << format_extracted_comment
|
|
entry << format_references
|
|
entry << format_flags
|
|
entry << <<-ENTRY
|
|
msgid #{format_message(@msgid)}
|
|
msgstr #{format_message(@msgstr)}
|
|
ENTRY
|
|
end
|
|
|
|
##
|
|
# Merges the PO entry with +other_entry+.
|
|
|
|
def merge other_entry
|
|
options = {
|
|
:extracted_comment => merge_string(@extracted_comment,
|
|
other_entry.extracted_comment),
|
|
:translator_comment => merge_string(@translator_comment,
|
|
other_entry.translator_comment),
|
|
:references => merge_array(@references,
|
|
other_entry.references),
|
|
:flags => merge_array(@flags,
|
|
other_entry.flags),
|
|
}
|
|
self.class.new(@msgid, options)
|
|
end
|
|
|
|
private
|
|
|
|
def format_comment mark, comment
|
|
return '' unless comment
|
|
return '' if comment.empty?
|
|
|
|
formatted_comment = ''
|
|
comment.each_line do |line|
|
|
formatted_comment << "#{mark} #{line}"
|
|
end
|
|
formatted_comment << "\n" unless formatted_comment.end_with?("\n")
|
|
formatted_comment
|
|
end
|
|
|
|
def format_translator_comment
|
|
format_comment('#', @translator_comment)
|
|
end
|
|
|
|
def format_extracted_comment
|
|
format_comment('#.', @extracted_comment)
|
|
end
|
|
|
|
def format_references
|
|
return '' if @references.empty?
|
|
|
|
formatted_references = ''
|
|
@references.sort.each do |file, line|
|
|
formatted_references << "\#: #{file}:#{line}\n"
|
|
end
|
|
formatted_references
|
|
end
|
|
|
|
def format_flags
|
|
return '' if @flags.empty?
|
|
|
|
formatted_flags = flags.join(",")
|
|
"\#, #{formatted_flags}\n"
|
|
end
|
|
|
|
def format_message message
|
|
return "\"#{escape(message)}\"" unless message.include?("\n")
|
|
|
|
formatted_message = '""'
|
|
message.each_line do |line|
|
|
formatted_message << "\n"
|
|
formatted_message << "\"#{escape(line)}\""
|
|
end
|
|
formatted_message
|
|
end
|
|
|
|
def escape string
|
|
string.gsub(/["\\\t\n]/) do |special_character|
|
|
case special_character
|
|
when "\t"
|
|
"\\t"
|
|
when "\n"
|
|
"\\n"
|
|
else
|
|
"\\#{special_character}"
|
|
end
|
|
end
|
|
end
|
|
|
|
def merge_string string1, string2
|
|
[string1, string2].compact.join("\n")
|
|
end
|
|
|
|
def merge_array array1, array2
|
|
(array1 + array2).uniq
|
|
end
|
|
|
|
end
|