1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
##
# Extracts message from RDoc::Store
class RDoc::Generator::POT::MessageExtractor
##
# Creates a message extractor for +store+.
def initialize store
@store = store
@po = RDoc::Generator::POT::PO.new
end
##
# Extracts messages from +store+, stores them into
# RDoc::Generator::POT::PO and returns it.
def extract
@store.all_classes_and_modules.each do |klass|
extract_from_klass(klass)
end
@po
end
private
def extract_from_klass klass
extract_text(klass.comment_location, klass.full_name)
klass.each_section do |section, constants, attributes|
extract_text(section.title ,"#{klass.full_name}: section title")
section.comments.each do |comment|
extract_text(comment, "#{klass.full_name}: #{section.title}")
end
end
klass.each_constant do |constant|
extract_text(constant.comment, constant.full_name)
end
klass.each_attribute do |attribute|
extract_text(attribute.comment, attribute.full_name)
end
klass.each_method do |method|
extract_text(method.comment, method.full_name)
end
end
def extract_text text, comment, location = nil
return if text.nil?
options = {
:extracted_comment => comment,
:references => [location].compact,
}
i18n_text = RDoc::I18n::Text.new(text)
i18n_text.extract_messages do |part|
@po.add(entry(part[:paragraph], options))
end
end
def entry msgid, options
RDoc::Generator::POT::POEntry.new(msgid, options)
end
end
|