rdoc 8.0.0 → 8.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -3
- data/RI.md +75 -75
- data/exe/rdoc +2 -2
- data/lib/rdoc/code_object/alias.rb +71 -69
- data/lib/rdoc/code_object/any_method.rb +305 -303
- data/lib/rdoc/code_object/attr.rb +150 -148
- data/lib/rdoc/code_object/class_module.rb +798 -792
- data/lib/rdoc/code_object/constant.rb +175 -173
- data/lib/rdoc/code_object/context/section.rb +142 -138
- data/lib/rdoc/code_object/context.rb +926 -958
- data/lib/rdoc/code_object/extend.rb +7 -5
- data/lib/rdoc/code_object/include.rb +7 -5
- data/lib/rdoc/code_object/method_attr.rb +326 -319
- data/lib/rdoc/code_object/mixin.rb +97 -95
- data/lib/rdoc/code_object/normal_class.rb +77 -78
- data/lib/rdoc/code_object/normal_module.rb +61 -59
- data/lib/rdoc/code_object/require.rb +23 -39
- data/lib/rdoc/code_object/single_class.rb +21 -19
- data/lib/rdoc/code_object/top_level.rb +212 -219
- data/lib/rdoc/code_object.rb +305 -303
- data/lib/rdoc/comment.rb +275 -273
- data/lib/rdoc/cross_reference.rb +192 -190
- data/lib/rdoc/encoding.rb +105 -103
- data/lib/rdoc/erb_partial.rb +13 -11
- data/lib/rdoc/erbio.rb +29 -27
- data/lib/rdoc/generator/aliki.rb +161 -153
- data/lib/rdoc/generator/darkfish.rb +645 -635
- data/lib/rdoc/generator/json_index.rb +233 -229
- data/lib/rdoc/generator/markup.rb +164 -146
- data/lib/rdoc/generator/pot/message_extractor.rb +57 -51
- data/lib/rdoc/generator/pot/po.rb +52 -51
- data/lib/rdoc/generator/pot/po_entry.rb +138 -132
- data/lib/rdoc/generator/pot.rb +85 -81
- data/lib/rdoc/generator/ri.rb +23 -19
- data/lib/rdoc/generator/template/aliki/DESIGN.md +6 -4
- data/lib/rdoc/generator/template/aliki/_footer.rhtml +1 -1
- data/lib/rdoc/generator/template/aliki/_head.rhtml +10 -10
- data/lib/rdoc/generator/template/aliki/_header.rhtml +29 -44
- data/lib/rdoc/generator/template/aliki/_sidebar_search.rhtml +4 -4
- data/lib/rdoc/generator/template/aliki/css/rdoc.css +207 -178
- data/lib/rdoc/generator/template/aliki/js/aliki.js +60 -84
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +1 -1
- data/lib/rdoc/generator.rb +48 -46
- data/lib/rdoc/i18n/locale.rb +99 -95
- data/lib/rdoc/i18n/text.rb +109 -105
- data/lib/rdoc/i18n.rb +7 -5
- data/lib/rdoc/markdown/byte_runtime.rb +80 -0
- data/lib/rdoc/markdown.kpeg +15 -11
- data/lib/rdoc/markdown.rb +40 -47
- data/lib/rdoc/markup/block_quote.rb +12 -8
- data/lib/rdoc/markup/document.rb +127 -123
- data/lib/rdoc/markup/formatter.rb +219 -215
- data/lib/rdoc/markup/include.rb +33 -29
- data/lib/rdoc/markup/indented_paragraph.rb +37 -33
- data/lib/rdoc/markup/inline_parser.rb +281 -277
- data/lib/rdoc/markup/list.rb +80 -88
- data/lib/rdoc/markup/list_item.rb +73 -85
- data/lib/rdoc/markup/paragraph.rb +23 -19
- data/lib/rdoc/markup/parser.rb +501 -497
- data/lib/rdoc/markup/pre_process.rb +283 -279
- data/lib/rdoc/markup/raw.rb +2 -2
- data/lib/rdoc/markup/rule.rb +16 -12
- data/lib/rdoc/markup/to_ansi.rb +143 -139
- data/lib/rdoc/markup/to_bs.rb +72 -68
- data/lib/rdoc/markup/to_html.rb +594 -565
- data/lib/rdoc/markup/to_html_crossref.rb +234 -230
- data/lib/rdoc/markup/to_html_snippet.rb +232 -227
- data/lib/rdoc/markup/to_joined_paragraph.rb +36 -32
- data/lib/rdoc/markup/to_label.rb +63 -59
- data/lib/rdoc/markup/to_markdown.rb +212 -208
- data/lib/rdoc/markup/to_rdoc.rb +336 -332
- data/lib/rdoc/markup/to_table_of_contents.rb +66 -62
- data/lib/rdoc/markup/to_test.rb +60 -56
- data/lib/rdoc/markup/to_tt_only.rb +84 -80
- data/lib/rdoc/markup/verbatim.rb +62 -58
- data/lib/rdoc/markup.rb +198 -196
- data/lib/rdoc/options.rb +1063 -1061
- data/lib/rdoc/parser/c.rb +1039 -1037
- data/lib/rdoc/parser/changelog.rb +319 -315
- data/lib/rdoc/parser/markdown.rb +17 -13
- data/lib/rdoc/parser/rbs.rb +239 -235
- data/lib/rdoc/parser/rd.rb +17 -13
- data/lib/rdoc/parser/ruby.rb +1245 -1124
- data/lib/rdoc/parser/ruby_colorizer.rb +263 -213
- data/lib/rdoc/parser/simple.rb +31 -27
- data/lib/rdoc/parser/text.rb +12 -8
- data/lib/rdoc/parser.rb +228 -220
- data/lib/rdoc/rbs_helper.rb +1 -1
- data/lib/rdoc/rd/inline.rb +57 -53
- data/lib/rdoc/rd.rb +90 -88
- data/lib/rdoc/rdoc.rb +500 -491
- data/lib/rdoc/ri/driver.rb +1140 -1135
- data/lib/rdoc/ri/formatter.rb +7 -3
- data/lib/rdoc/ri/paths.rb +140 -136
- data/lib/rdoc/ri/servlet.rb +354 -350
- data/lib/rdoc/ri/store.rb +4 -2
- data/lib/rdoc/ri/task.rb +55 -51
- data/lib/rdoc/ri.rb +14 -12
- data/lib/rdoc/rubygems_hook.rb +183 -181
- data/lib/rdoc/server.rb +349 -347
- data/lib/rdoc/stats/normal.rb +46 -42
- data/lib/rdoc/stats/quiet.rb +39 -35
- data/lib/rdoc/stats/verbose.rb +35 -31
- data/lib/rdoc/stats.rb +365 -363
- data/lib/rdoc/store.rb +888 -902
- data/lib/rdoc/task.rb +260 -256
- data/lib/rdoc/text.rb +135 -133
- data/lib/rdoc/token_stream.rb +101 -93
- data/lib/rdoc/tom_doc.rb +203 -201
- data/lib/rdoc/version.rb +1 -1
- metadata +4 -5
- data/lib/rdoc/markdown/literals.kpeg +0 -21
- data/lib/rdoc/markdown/literals.rb +0 -454
|
@@ -1,196 +1,214 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
#
|
|
6
|
-
#
|
|
2
|
+
module RDoc
|
|
3
|
+
module Generator
|
|
4
|
+
##
|
|
5
|
+
# Handle common RDoc::Markup tasks for various CodeObjects
|
|
6
|
+
#
|
|
7
|
+
# This module is loaded by generators. It allows RDoc's CodeObject tree to
|
|
8
|
+
# avoid loading generator code to improve startup time for +ri+.
|
|
9
|
+
|
|
10
|
+
module Markup
|
|
11
|
+
|
|
12
|
+
##
|
|
13
|
+
# Generates a relative URL from this object's path to +target_path+
|
|
14
|
+
|
|
15
|
+
def aref_to(target_path)
|
|
16
|
+
::RDoc::Markup::ToHtml.gen_relative_url path, target_path
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
##
|
|
20
|
+
# Generates a relative URL from +from_path+ to this object's path
|
|
21
|
+
|
|
22
|
+
def as_href(from_path)
|
|
23
|
+
::RDoc::Markup::ToHtml.gen_relative_url from_path, path
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
##
|
|
27
|
+
# Handy wrapper for marking up this object's comment
|
|
28
|
+
|
|
29
|
+
def description
|
|
30
|
+
markup @comment
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
##
|
|
34
|
+
# Creates an RDoc::Markup::ToHtmlCrossref formatter
|
|
35
|
+
|
|
36
|
+
def formatter
|
|
37
|
+
return @formatter if defined? @formatter
|
|
38
|
+
|
|
39
|
+
options = @store.options
|
|
40
|
+
this = Context === self ? self : @parent
|
|
41
|
+
|
|
42
|
+
@formatter = ::RDoc::Markup::ToHtmlCrossref.new(
|
|
43
|
+
this.path, this,
|
|
44
|
+
pipe: options.pipe,
|
|
45
|
+
output_decoration: options.output_decoration,
|
|
46
|
+
hyperlink_all: options.hyperlink_all,
|
|
47
|
+
show_hash: options.show_hash,
|
|
48
|
+
autolink_excluded_words: options.autolink_excluded_words || [],
|
|
49
|
+
warn_missing_rdoc_ref: options.warn_missing_rdoc_ref
|
|
50
|
+
)
|
|
51
|
+
@formatter.code_object = self
|
|
52
|
+
@formatter
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
##
|
|
56
|
+
# Build a webcvs URL starting for the given +url+ with +full_path+ appended
|
|
57
|
+
# as the destination path. If +url+ contains '%s' +full_path+ will be
|
|
58
|
+
# will replace the %s using sprintf on the +url+.
|
|
59
|
+
|
|
60
|
+
def cvs_url(url, full_path)
|
|
61
|
+
if /%s/ =~ url
|
|
62
|
+
sprintf url, full_path
|
|
63
|
+
else
|
|
64
|
+
url + full_path
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
##
|
|
69
|
+
# The preferred URL for this object.
|
|
70
|
+
|
|
71
|
+
def canonical_url
|
|
72
|
+
options = @store.options
|
|
73
|
+
if path
|
|
74
|
+
File.join(options.canonical_root, path.to_s)
|
|
75
|
+
else
|
|
76
|
+
options.canonical_root
|
|
77
|
+
end
|
|
78
|
+
end
|
|
7
79
|
|
|
8
|
-
module RDoc::Generator::Markup
|
|
9
|
-
|
|
10
|
-
##
|
|
11
|
-
# Generates a relative URL from this object's path to +target_path+
|
|
12
|
-
|
|
13
|
-
def aref_to(target_path)
|
|
14
|
-
RDoc::Markup::ToHtml.gen_relative_url path, target_path
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
# Generates a relative URL from +from_path+ to this object's path
|
|
19
|
-
|
|
20
|
-
def as_href(from_path)
|
|
21
|
-
RDoc::Markup::ToHtml.gen_relative_url from_path, path
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
##
|
|
25
|
-
# Handy wrapper for marking up this object's comment
|
|
26
|
-
|
|
27
|
-
def description
|
|
28
|
-
markup @comment
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
##
|
|
32
|
-
# Creates an RDoc::Markup::ToHtmlCrossref formatter
|
|
33
|
-
|
|
34
|
-
def formatter
|
|
35
|
-
return @formatter if defined? @formatter
|
|
36
|
-
|
|
37
|
-
options = @store.options
|
|
38
|
-
this = RDoc::Context === self ? self : @parent
|
|
39
|
-
|
|
40
|
-
@formatter = RDoc::Markup::ToHtmlCrossref.new(
|
|
41
|
-
this.path, this,
|
|
42
|
-
pipe: options.pipe,
|
|
43
|
-
output_decoration: options.output_decoration,
|
|
44
|
-
hyperlink_all: options.hyperlink_all,
|
|
45
|
-
show_hash: options.show_hash,
|
|
46
|
-
autolink_excluded_words: options.autolink_excluded_words || [],
|
|
47
|
-
warn_missing_rdoc_ref: options.warn_missing_rdoc_ref
|
|
48
|
-
)
|
|
49
|
-
@formatter.code_object = self
|
|
50
|
-
@formatter
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
##
|
|
54
|
-
# Build a webcvs URL starting for the given +url+ with +full_path+ appended
|
|
55
|
-
# as the destination path. If +url+ contains '%s' +full_path+ will be
|
|
56
|
-
# will replace the %s using sprintf on the +url+.
|
|
57
|
-
|
|
58
|
-
def cvs_url(url, full_path)
|
|
59
|
-
if /%s/ =~ url then
|
|
60
|
-
sprintf url, full_path
|
|
61
|
-
else
|
|
62
|
-
url + full_path
|
|
63
|
-
end
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
##
|
|
67
|
-
# The preferred URL for this object.
|
|
68
|
-
|
|
69
|
-
def canonical_url
|
|
70
|
-
options = @store.options
|
|
71
|
-
if path
|
|
72
|
-
File.join(options.canonical_root, path.to_s)
|
|
73
|
-
else
|
|
74
|
-
options.canonical_root
|
|
75
80
|
end
|
|
76
81
|
end
|
|
77
|
-
|
|
78
82
|
end
|
|
79
83
|
|
|
80
|
-
|
|
84
|
+
module RDoc
|
|
85
|
+
class CodeObject
|
|
81
86
|
|
|
82
|
-
|
|
87
|
+
include Generator::Markup
|
|
83
88
|
|
|
89
|
+
end
|
|
84
90
|
end
|
|
85
91
|
|
|
86
|
-
|
|
92
|
+
module RDoc
|
|
93
|
+
class AnyMethod
|
|
87
94
|
|
|
88
|
-
|
|
89
|
-
|
|
95
|
+
##
|
|
96
|
+
# Creates an HTML link to the superclass method called by this method.
|
|
90
97
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
98
|
+
def superclass_method_link
|
|
99
|
+
target = superclass_method
|
|
100
|
+
return unless target
|
|
94
101
|
|
|
95
|
-
|
|
96
|
-
|
|
102
|
+
html_formatter = formatter
|
|
103
|
+
name = target.full_name
|
|
97
104
|
|
|
98
|
-
|
|
99
|
-
|
|
105
|
+
html_formatter.link name, html_formatter.convert_string(name)
|
|
106
|
+
end
|
|
100
107
|
|
|
108
|
+
end
|
|
101
109
|
end
|
|
102
110
|
|
|
103
|
-
|
|
111
|
+
module RDoc
|
|
112
|
+
class MethodAttr
|
|
104
113
|
|
|
105
|
-
|
|
106
|
-
|
|
114
|
+
##
|
|
115
|
+
# Prepend +src+ with line numbers.
|
|
107
116
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
117
|
+
def add_line_numbers(src)
|
|
118
|
+
return if src.empty? || !line
|
|
119
|
+
start_line = line
|
|
120
|
+
end_line = start_line + src.count("\n")
|
|
121
|
+
number_digits = end_line.to_s.length
|
|
113
122
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
123
|
+
current_line = start_line
|
|
124
|
+
src.gsub!(/^/) do
|
|
125
|
+
res = "<span class=\"line-num\">#{current_line.to_s.rjust(number_digits)}</span> "
|
|
117
126
|
|
|
118
|
-
|
|
119
|
-
|
|
127
|
+
current_line += 1
|
|
128
|
+
res
|
|
129
|
+
end
|
|
120
130
|
end
|
|
121
|
-
end
|
|
122
131
|
|
|
123
|
-
|
|
124
|
-
|
|
132
|
+
##
|
|
133
|
+
# Prepend +src+ with a comment that declares its location in the source.
|
|
125
134
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
135
|
+
def add_location_comment(src)
|
|
136
|
+
path = CGI.escapeHTML(file.relative_name)
|
|
137
|
+
if options.line_numbers && !src.empty?
|
|
138
|
+
src.prepend("<span class=\"ruby-comment\"># File #{path}</span>\n")
|
|
139
|
+
else
|
|
140
|
+
src.prepend("<span class=\"ruby-comment\"># File #{path}, line #{line}</span>\n")
|
|
141
|
+
end
|
|
132
142
|
end
|
|
133
|
-
end
|
|
134
143
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
144
|
+
##
|
|
145
|
+
# Turns the method's token stream into HTML.
|
|
146
|
+
#
|
|
147
|
+
# Prepends line numbers if +options.line_numbers+ is true.
|
|
139
148
|
|
|
140
|
-
|
|
141
|
-
|
|
149
|
+
def markup_code
|
|
150
|
+
return '' unless token_stream
|
|
142
151
|
|
|
143
|
-
|
|
152
|
+
src = TokenStream.to_html token_stream
|
|
144
153
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
154
|
+
# dedent the source
|
|
155
|
+
common_indent = src.length
|
|
156
|
+
src.scan(/^ *(?=\S)/) do |whitespace|
|
|
157
|
+
common_indent = whitespace.length if whitespace.length < common_indent
|
|
158
|
+
break if common_indent == 0
|
|
159
|
+
end
|
|
160
|
+
src.gsub!(/^#{' ' * common_indent}/, '') if common_indent > 0
|
|
161
|
+
|
|
162
|
+
if source_language == 'ruby'
|
|
163
|
+
add_line_numbers(src) if options.line_numbers
|
|
164
|
+
add_location_comment(src)
|
|
165
|
+
end
|
|
152
166
|
|
|
153
|
-
|
|
154
|
-
add_line_numbers(src) if options.line_numbers
|
|
155
|
-
add_location_comment(src)
|
|
167
|
+
src
|
|
156
168
|
end
|
|
157
169
|
|
|
158
|
-
src
|
|
159
170
|
end
|
|
160
|
-
|
|
161
171
|
end
|
|
162
172
|
|
|
163
|
-
|
|
173
|
+
module RDoc
|
|
174
|
+
class ClassModule
|
|
164
175
|
|
|
165
|
-
|
|
166
|
-
|
|
176
|
+
##
|
|
177
|
+
# Handy wrapper for marking up this class or module's comment
|
|
167
178
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
179
|
+
def description
|
|
180
|
+
markup @comment_location
|
|
181
|
+
end
|
|
171
182
|
|
|
183
|
+
end
|
|
172
184
|
end
|
|
173
185
|
|
|
174
|
-
|
|
186
|
+
module RDoc
|
|
187
|
+
class Context
|
|
188
|
+
class Section
|
|
175
189
|
|
|
176
|
-
|
|
190
|
+
include Generator::Markup
|
|
177
191
|
|
|
192
|
+
end
|
|
193
|
+
end
|
|
178
194
|
end
|
|
179
195
|
|
|
180
|
-
|
|
196
|
+
module RDoc
|
|
197
|
+
class TopLevel
|
|
181
198
|
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
199
|
+
##
|
|
200
|
+
# Returns a URL for this source file on some web repository. Use the -W
|
|
201
|
+
# command line option to set.
|
|
185
202
|
|
|
186
|
-
|
|
187
|
-
|
|
203
|
+
def cvs_url
|
|
204
|
+
url = @store.options.webcvs
|
|
188
205
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
206
|
+
if /%s/ =~ url
|
|
207
|
+
url % @relative_name
|
|
208
|
+
else
|
|
209
|
+
url + @relative_name
|
|
210
|
+
end
|
|
193
211
|
end
|
|
194
|
-
end
|
|
195
212
|
|
|
213
|
+
end
|
|
196
214
|
end
|
|
@@ -1,68 +1,74 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module RDoc
|
|
3
|
+
module Generator
|
|
4
|
+
class POT
|
|
5
|
+
##
|
|
6
|
+
# Extracts message from RDoc::Store
|
|
4
7
|
|
|
5
|
-
class
|
|
8
|
+
class MessageExtractor
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
##
|
|
11
|
+
# Creates a message extractor for +store+.
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
def initialize(store)
|
|
14
|
+
@store = store
|
|
15
|
+
@po = Generator::POT::PO.new
|
|
16
|
+
end
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
##
|
|
19
|
+
# Extracts messages from +store+, stores them into
|
|
20
|
+
# RDoc::Generator::POT::PO and returns it.
|
|
18
21
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
22
|
+
def extract
|
|
23
|
+
@store.all_classes_and_modules.each do |klass|
|
|
24
|
+
extract_from_klass(klass)
|
|
25
|
+
end
|
|
26
|
+
@po
|
|
27
|
+
end
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
private
|
|
27
30
|
|
|
28
|
-
|
|
29
|
-
|
|
31
|
+
def extract_from_klass(klass)
|
|
32
|
+
extract_text(klass.comment_location, klass.full_name)
|
|
30
33
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
klass.each_section do |section, constants, attributes|
|
|
35
|
+
extract_text(section.title, "#{klass.full_name}: section title")
|
|
36
|
+
section.comments.each do |comment|
|
|
37
|
+
extract_text(comment, "#{klass.full_name}: #{section.title}")
|
|
38
|
+
end
|
|
39
|
+
end
|
|
37
40
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
+
klass.constants.each do |constant|
|
|
42
|
+
extract_text(constant.comment, constant.full_name)
|
|
43
|
+
end
|
|
41
44
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
+
klass.attributes.each do |attribute|
|
|
46
|
+
extract_text(attribute.comment, attribute.full_name)
|
|
47
|
+
end
|
|
45
48
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
klass.each_method do |method|
|
|
50
|
+
extract_text(method.comment, method.full_name)
|
|
51
|
+
end
|
|
52
|
+
end
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
|
|
54
|
+
def extract_text(text, comment, location = nil)
|
|
55
|
+
return if text.nil?
|
|
53
56
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
options = {
|
|
58
|
+
:extracted_comment => comment,
|
|
59
|
+
:references => [location].compact,
|
|
60
|
+
}
|
|
61
|
+
i18n_text = I18n::Text.new(text)
|
|
62
|
+
i18n_text.extract_messages do |part|
|
|
63
|
+
@po.add(entry(part[:paragraph], options))
|
|
64
|
+
end
|
|
65
|
+
end
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
+
def entry(msgid, options)
|
|
68
|
+
Generator::POT::POEntry.new(msgid, options)
|
|
69
|
+
end
|
|
67
70
|
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
68
74
|
end
|
|
@@ -1,55 +1,53 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
module RDoc
|
|
3
|
+
module Generator
|
|
4
|
+
class POT
|
|
5
|
+
##
|
|
6
|
+
# Generates a PO format text
|
|
4
7
|
|
|
5
|
-
class
|
|
8
|
+
class PO
|
|
6
9
|
|
|
7
|
-
|
|
8
|
-
|
|
10
|
+
##
|
|
11
|
+
# Creates an object that represents PO format.
|
|
9
12
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
13
|
+
def initialize
|
|
14
|
+
@entries = {}
|
|
15
|
+
add_header
|
|
16
|
+
end
|
|
14
17
|
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
##
|
|
19
|
+
# Adds a PO entry to the PO.
|
|
17
20
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
def add(entry)
|
|
22
|
+
existing_entry = @entries[entry.msgid]
|
|
23
|
+
if existing_entry
|
|
24
|
+
entry = existing_entry.merge(entry)
|
|
25
|
+
end
|
|
26
|
+
@entries[entry.msgid] = entry
|
|
27
|
+
end
|
|
25
28
|
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
##
|
|
30
|
+
# Returns PO format text for the PO.
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
po += "\n" unless po.empty?
|
|
33
|
-
po += entry.to_s
|
|
34
|
-
end
|
|
35
|
-
po
|
|
36
|
-
end
|
|
32
|
+
def to_s
|
|
33
|
+
sort_entries.map(&:to_s).join("\n")
|
|
34
|
+
end
|
|
37
35
|
|
|
38
|
-
|
|
36
|
+
private
|
|
39
37
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
def add_header
|
|
39
|
+
add(header_entry)
|
|
40
|
+
end
|
|
43
41
|
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
def header_entry
|
|
43
|
+
comment = <<-COMMENT
|
|
46
44
|
SOME DESCRIPTIVE TITLE.
|
|
47
45
|
Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
|
48
46
|
This file is distributed under the same license as the PACKAGE package.
|
|
49
47
|
FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
|
50
48
|
COMMENT
|
|
51
49
|
|
|
52
|
-
|
|
50
|
+
content = <<-CONTENT
|
|
53
51
|
Project-Id-Version: PACKAGE VERSEION
|
|
54
52
|
Report-Msgid-Bugs-To:
|
|
55
53
|
PO-Revision-Date: YEAR-MO_DA HO:MI+ZONE
|
|
@@ -62,23 +60,26 @@ Content-Transfer-Encoding: 8bit
|
|
|
62
60
|
Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;
|
|
63
61
|
CONTENT
|
|
64
62
|
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
63
|
+
options = {
|
|
64
|
+
:msgstr => content,
|
|
65
|
+
:translator_comment => comment,
|
|
66
|
+
:flags => ['fuzzy'],
|
|
67
|
+
}
|
|
68
|
+
Generator::POT::POEntry.new('', options)
|
|
69
|
+
end
|
|
72
70
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
71
|
+
def sort_entries
|
|
72
|
+
headers, messages = @entries.values.partition do |entry|
|
|
73
|
+
entry.msgid.empty?
|
|
74
|
+
end
|
|
75
|
+
# TODO: sort by location
|
|
76
|
+
sorted_messages = messages.sort_by do |entry|
|
|
77
|
+
entry.msgid
|
|
78
|
+
end
|
|
79
|
+
headers + sorted_messages
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end
|
|
80
83
|
end
|
|
81
|
-
headers + sorted_messages
|
|
82
84
|
end
|
|
83
|
-
|
|
84
85
|
end
|