gitlab-rdoc 6.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (196) hide show
  1. checksums.yaml +7 -0
  2. data/CONTRIBUTING.rdoc +220 -0
  3. data/CVE-2013-0256.rdoc +49 -0
  4. data/ExampleMarkdown.md +37 -0
  5. data/ExampleRDoc.rdoc +208 -0
  6. data/Gemfile +12 -0
  7. data/History.rdoc +1666 -0
  8. data/LEGAL.rdoc +50 -0
  9. data/LICENSE.rdoc +57 -0
  10. data/README.rdoc +133 -0
  11. data/RI.rdoc +57 -0
  12. data/Rakefile +101 -0
  13. data/TODO.rdoc +59 -0
  14. data/bin/console +7 -0
  15. data/bin/setup +6 -0
  16. data/exe/rdoc +44 -0
  17. data/exe/ri +12 -0
  18. data/lib/rdoc/alias.rb +112 -0
  19. data/lib/rdoc/anon_class.rb +11 -0
  20. data/lib/rdoc/any_method.rb +361 -0
  21. data/lib/rdoc/attr.rb +176 -0
  22. data/lib/rdoc/class_module.rb +802 -0
  23. data/lib/rdoc/code_object.rb +421 -0
  24. data/lib/rdoc/code_objects.rb +6 -0
  25. data/lib/rdoc/comment.rb +250 -0
  26. data/lib/rdoc/constant.rb +187 -0
  27. data/lib/rdoc/context/section.rb +232 -0
  28. data/lib/rdoc/context.rb +1266 -0
  29. data/lib/rdoc/cross_reference.rb +202 -0
  30. data/lib/rdoc/encoding.rb +136 -0
  31. data/lib/rdoc/erb_partial.rb +19 -0
  32. data/lib/rdoc/erbio.rb +42 -0
  33. data/lib/rdoc/extend.rb +10 -0
  34. data/lib/rdoc/generator/darkfish.rb +790 -0
  35. data/lib/rdoc/generator/json_index.rb +300 -0
  36. data/lib/rdoc/generator/markup.rb +160 -0
  37. data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
  38. data/lib/rdoc/generator/pot/po.rb +84 -0
  39. data/lib/rdoc/generator/pot/po_entry.rb +141 -0
  40. data/lib/rdoc/generator/pot.rb +98 -0
  41. data/lib/rdoc/generator/ri.rb +31 -0
  42. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  43. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  44. data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
  45. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
  46. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
  47. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
  57. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
  58. data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
  59. data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
  60. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
  61. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
  64. data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
  65. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  66. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  67. data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  68. data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
  69. data/lib/rdoc/generator/template/darkfish/images/brick.png +0 -0
  70. data/lib/rdoc/generator/template/darkfish/images/brick_link.png +0 -0
  71. data/lib/rdoc/generator/template/darkfish/images/bug.png +0 -0
  72. data/lib/rdoc/generator/template/darkfish/images/bullet_black.png +0 -0
  73. data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_minus.png +0 -0
  74. data/lib/rdoc/generator/template/darkfish/images/bullet_toggle_plus.png +0 -0
  75. data/lib/rdoc/generator/template/darkfish/images/date.png +0 -0
  76. data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  77. data/lib/rdoc/generator/template/darkfish/images/find.png +0 -0
  78. data/lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif +0 -0
  79. data/lib/rdoc/generator/template/darkfish/images/macFFBgHack.png +0 -0
  80. data/lib/rdoc/generator/template/darkfish/images/package.png +0 -0
  81. data/lib/rdoc/generator/template/darkfish/images/page_green.png +0 -0
  82. data/lib/rdoc/generator/template/darkfish/images/page_white_text.png +0 -0
  83. data/lib/rdoc/generator/template/darkfish/images/page_white_width.png +0 -0
  84. data/lib/rdoc/generator/template/darkfish/images/plugin.png +0 -0
  85. data/lib/rdoc/generator/template/darkfish/images/ruby.png +0 -0
  86. data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  87. data/lib/rdoc/generator/template/darkfish/images/tag_green.png +0 -0
  88. data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  89. data/lib/rdoc/generator/template/darkfish/images/wrench.png +0 -0
  90. data/lib/rdoc/generator/template/darkfish/images/wrench_orange.png +0 -0
  91. data/lib/rdoc/generator/template/darkfish/images/zoom.png +0 -0
  92. data/lib/rdoc/generator/template/darkfish/index.rhtml +22 -0
  93. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +84 -0
  94. data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
  95. data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
  96. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
  97. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
  98. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
  99. data/lib/rdoc/generator/template/json_index/.document +1 -0
  100. data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
  101. data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
  102. data/lib/rdoc/generator.rb +51 -0
  103. data/lib/rdoc/ghost_method.rb +7 -0
  104. data/lib/rdoc/i18n/locale.rb +102 -0
  105. data/lib/rdoc/i18n/text.rb +126 -0
  106. data/lib/rdoc/i18n.rb +10 -0
  107. data/lib/rdoc/include.rb +10 -0
  108. data/lib/rdoc/known_classes.rb +73 -0
  109. data/lib/rdoc/markdown/entities.rb +2132 -0
  110. data/lib/rdoc/markdown/literals.kpeg +23 -0
  111. data/lib/rdoc/markdown/literals.rb +417 -0
  112. data/lib/rdoc/markdown.kpeg +1237 -0
  113. data/lib/rdoc/markdown.rb +16685 -0
  114. data/lib/rdoc/markup/attr_changer.rb +23 -0
  115. data/lib/rdoc/markup/attr_span.rb +36 -0
  116. data/lib/rdoc/markup/attribute_manager.rb +409 -0
  117. data/lib/rdoc/markup/attributes.rb +71 -0
  118. data/lib/rdoc/markup/blank_line.rb +28 -0
  119. data/lib/rdoc/markup/block_quote.rb +15 -0
  120. data/lib/rdoc/markup/document.rb +165 -0
  121. data/lib/rdoc/markup/formatter.rb +266 -0
  122. data/lib/rdoc/markup/hard_break.rb +32 -0
  123. data/lib/rdoc/markup/heading.rb +79 -0
  124. data/lib/rdoc/markup/include.rb +43 -0
  125. data/lib/rdoc/markup/indented_paragraph.rb +48 -0
  126. data/lib/rdoc/markup/list.rb +102 -0
  127. data/lib/rdoc/markup/list_item.rb +100 -0
  128. data/lib/rdoc/markup/paragraph.rb +29 -0
  129. data/lib/rdoc/markup/parser.rb +575 -0
  130. data/lib/rdoc/markup/pre_process.rb +296 -0
  131. data/lib/rdoc/markup/raw.rb +70 -0
  132. data/lib/rdoc/markup/regexp_handling.rb +41 -0
  133. data/lib/rdoc/markup/rule.rb +21 -0
  134. data/lib/rdoc/markup/table.rb +47 -0
  135. data/lib/rdoc/markup/to_ansi.rb +94 -0
  136. data/lib/rdoc/markup/to_bs.rb +77 -0
  137. data/lib/rdoc/markup/to_html.rb +444 -0
  138. data/lib/rdoc/markup/to_html_crossref.rb +176 -0
  139. data/lib/rdoc/markup/to_html_snippet.rb +285 -0
  140. data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
  141. data/lib/rdoc/markup/to_label.rb +75 -0
  142. data/lib/rdoc/markup/to_markdown.rb +192 -0
  143. data/lib/rdoc/markup/to_rdoc.rb +362 -0
  144. data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
  145. data/lib/rdoc/markup/to_test.rb +70 -0
  146. data/lib/rdoc/markup/to_tt_only.rb +121 -0
  147. data/lib/rdoc/markup/verbatim.rb +84 -0
  148. data/lib/rdoc/markup.rb +867 -0
  149. data/lib/rdoc/meta_method.rb +7 -0
  150. data/lib/rdoc/method_attr.rb +419 -0
  151. data/lib/rdoc/mixin.rb +121 -0
  152. data/lib/rdoc/normal_class.rb +93 -0
  153. data/lib/rdoc/normal_module.rb +74 -0
  154. data/lib/rdoc/options.rb +1285 -0
  155. data/lib/rdoc/parser/c.rb +1225 -0
  156. data/lib/rdoc/parser/changelog.rb +335 -0
  157. data/lib/rdoc/parser/markdown.rb +24 -0
  158. data/lib/rdoc/parser/rd.rb +23 -0
  159. data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
  160. data/lib/rdoc/parser/ruby.rb +2327 -0
  161. data/lib/rdoc/parser/ruby_tools.rb +167 -0
  162. data/lib/rdoc/parser/simple.rb +61 -0
  163. data/lib/rdoc/parser/text.rb +12 -0
  164. data/lib/rdoc/parser.rb +277 -0
  165. data/lib/rdoc/rd/block_parser.rb +1056 -0
  166. data/lib/rdoc/rd/block_parser.ry +639 -0
  167. data/lib/rdoc/rd/inline.rb +72 -0
  168. data/lib/rdoc/rd/inline_parser.rb +1208 -0
  169. data/lib/rdoc/rd/inline_parser.ry +593 -0
  170. data/lib/rdoc/rd.rb +100 -0
  171. data/lib/rdoc/rdoc.rb +579 -0
  172. data/lib/rdoc/require.rb +52 -0
  173. data/lib/rdoc/ri/driver.rb +1572 -0
  174. data/lib/rdoc/ri/formatter.rb +6 -0
  175. data/lib/rdoc/ri/paths.rb +171 -0
  176. data/lib/rdoc/ri/store.rb +7 -0
  177. data/lib/rdoc/ri/task.rb +71 -0
  178. data/lib/rdoc/ri.rb +21 -0
  179. data/lib/rdoc/rubygems_hook.rb +246 -0
  180. data/lib/rdoc/servlet.rb +451 -0
  181. data/lib/rdoc/single_class.rb +26 -0
  182. data/lib/rdoc/stats/normal.rb +58 -0
  183. data/lib/rdoc/stats/quiet.rb +60 -0
  184. data/lib/rdoc/stats/verbose.rb +46 -0
  185. data/lib/rdoc/stats.rb +462 -0
  186. data/lib/rdoc/store.rb +979 -0
  187. data/lib/rdoc/task.rb +329 -0
  188. data/lib/rdoc/text.rb +304 -0
  189. data/lib/rdoc/token_stream.rb +119 -0
  190. data/lib/rdoc/tom_doc.rb +263 -0
  191. data/lib/rdoc/top_level.rb +289 -0
  192. data/lib/rdoc/version.rb +8 -0
  193. data/lib/rdoc.rb +201 -0
  194. data/man/ri.1 +247 -0
  195. data/rdoc.gemspec +249 -0
  196. metadata +279 -0
@@ -0,0 +1,639 @@
1
+ class BlockParser
2
+
3
+ preclow
4
+ nonassoc DUMMY
5
+ left ITEMLISTLINE
6
+ ENUMLISTLINE
7
+ DESCLISTLINE
8
+ METHODLISTLINE
9
+ STRINGLINE
10
+ prechigh
11
+
12
+ token STRINGLINE
13
+ ITEMLISTLINE
14
+ ENUMLISTLINE
15
+ DESCLISTLINE
16
+ METHODLISTLINE
17
+ WHITELINE
18
+ SUBTREE
19
+ HEADLINE
20
+ INCLUDE
21
+ INDENT
22
+ DEDENT
23
+ DUMMY
24
+
25
+ rule
26
+ document : blocks { result = RDoc::Markup::Document.new(*val[0]) }
27
+ | { raise ParseError, "file empty" }
28
+ ;
29
+
30
+ blocks : blocks block { result = val[0].concat val[1] }
31
+ | block { result = val[0] }
32
+ ;
33
+
34
+ block : textblock { result = val }
35
+ | verbatim { result = val }
36
+ | lists
37
+ | headline { result = val }
38
+ | include { result = val }
39
+ | WHITELINE { result = [RDoc::Markup::BlankLine.new] }
40
+ | SUBTREE { result = val[0].parts }
41
+ ;
42
+
43
+ headline : HEADLINE {
44
+ # val[0] is like [level, title]
45
+ title = @inline_parser.parse(val[0][1])
46
+ result = RDoc::Markup::Heading.new(val[0][0], title)
47
+ }
48
+ ;
49
+
50
+ include : INCLUDE {
51
+ result = RDoc::Markup::Include.new val[0], @include_path
52
+ }
53
+ ;
54
+
55
+ textblock : textblockcontent = DUMMY {
56
+ # val[0] is Array of String
57
+ result = paragraph val[0]
58
+ }
59
+ ;
60
+
61
+ textblockcontent : textblockcontent STRINGLINE { result << val[1].rstrip }
62
+ | STRINGLINE { result = [val[0].rstrip] }
63
+ ;
64
+
65
+ verbatim : INDENT verbatimcontent DEDENT {
66
+ # val[1] is Array of String
67
+ content = cut_off val[1]
68
+ result = RDoc::Markup::Verbatim.new(*content)
69
+
70
+ # imform to lexer.
71
+ @in_verbatim = false
72
+ }
73
+ ;
74
+
75
+ verbatim_after_lists : verbatimcontent {
76
+ # val[0] is Array of String
77
+ content = cut_off val[0]
78
+ result = RDoc::Markup::Verbatim.new(*content)
79
+
80
+ # imform to lexer.
81
+ @in_verbatim = false
82
+ }
83
+ ;
84
+
85
+ verbatimcontent : verbatimcontent STRINGLINE {
86
+ result << val[1]
87
+ } | verbatimcontent INDENT verbatimcontent DEDENT {
88
+ result.concat val[2]
89
+ } | verbatimcontent WHITELINE {
90
+ result << "\n"
91
+ } | STRINGLINE {
92
+ result = val
93
+ # inform to lexer.
94
+ @in_verbatim = true
95
+ }
96
+ ;
97
+
98
+ list : itemlist
99
+ | enumlist
100
+ | desclist
101
+ | methodlist
102
+ ;
103
+
104
+ lists : lists2 = DUMMY {
105
+ result = val[0]
106
+ } | INDENT lists2 DEDENT {
107
+ result = val[1]
108
+ } | INDENT lists2 verbatim_after_lists DEDENT {
109
+ result = val[1].push(val[2])
110
+ }
111
+ ;
112
+
113
+ lists2 : lists2 list { result = val[0] << val[1] }
114
+ | list { result = [val[0]] }
115
+ ;
116
+
117
+ itemlist : itemlistitems = DUMMY {
118
+ result = RDoc::Markup::List.new :BULLET, *val[0]
119
+ }
120
+ ;
121
+
122
+ itemlistitems : itemlistitems itemlistitem { result.push(val[1]) }
123
+ | itemlistitem { result = val }
124
+ ;
125
+
126
+ itemlistitem : first_textblock_in_itemlist other_blocks_in_list DEDENT {
127
+ result = RDoc::Markup::ListItem.new nil, val[0], *val[1]
128
+ }
129
+ ;
130
+
131
+ enumlist : enumlistitems = DUMMY {
132
+ result = RDoc::Markup::List.new :NUMBER, *val[0]
133
+ }
134
+ ;
135
+
136
+ enumlistitems : enumlistitems enumlistitem { result.push(val[1]) }
137
+ | enumlistitem { result = val }
138
+ ;
139
+
140
+ enumlistitem : first_textblock_in_enumlist other_blocks_in_list DEDENT {
141
+ result = RDoc::Markup::ListItem.new nil, val[0], *val[1]
142
+ }
143
+ ;
144
+
145
+ desclist : desclistitems = DUMMY {
146
+ result = RDoc::Markup::List.new :NOTE, *val[0]
147
+ }
148
+ ;
149
+
150
+ desclistitems : desclistitems desclistitem { result.push(val[1]) }
151
+ | desclistitem { result = val }
152
+ ;
153
+
154
+ desclistitem : DESCLISTLINE description_part DEDENT {
155
+ term = @inline_parser.parse val[0].strip
156
+
157
+ result = RDoc::Markup::ListItem.new term, *val[1]
158
+ }
159
+ ;
160
+
161
+ methodlist : methodlistitems = DUMMY {
162
+ result = RDoc::Markup::List.new :LABEL, *val[0]
163
+ }
164
+ ;
165
+
166
+ methodlistitems : methodlistitems methodlistitem { result.push(val[1]) }
167
+ | methodlistitem { result = val }
168
+ ;
169
+
170
+ methodlistitem : METHODLISTLINE description_part DEDENT {
171
+ result = RDoc::Markup::ListItem.new "<tt>#{val[0].strip}</tt>", *val[1]
172
+ }
173
+ ;
174
+
175
+ description_part : whitelines textblock blocks_in_list {
176
+ result = [val[1]].concat(val[2])
177
+ } | whitelines textblock {
178
+ result = [val[1]]
179
+ } | whitelines INDENT blocks_in_list DEDENT {
180
+ result = val[2]
181
+ } | whitelines {
182
+ result = []
183
+ }
184
+ ;
185
+
186
+ blocks_in_list : blocks_in_list block_in_list { result.concat val[1] }
187
+ | block_in_list
188
+ ;
189
+
190
+ block_in_list : textblock { result = val }
191
+ | verbatim { result = val }
192
+ | lists
193
+ | WHITELINE { result = [] }
194
+ ;
195
+
196
+ whitelines : whitelines2
197
+ |
198
+ ;
199
+
200
+ whitelines2 : WHITELINE whitelines2
201
+ | WHITELINE
202
+ ;
203
+
204
+ first_textblock_in_itemlist : ITEMLISTLINE textblockcontent {
205
+ result = paragraph [val[0]].concat(val[1])
206
+ } | ITEMLISTLINE {
207
+ result = paragraph [val[0]]
208
+ }
209
+ ;
210
+
211
+ first_textblock_in_enumlist : ENUMLISTLINE textblockcontent {
212
+ result = paragraph [val[0]].concat(val[1])
213
+ } | ENUMLISTLINE {
214
+ result = paragraph [val[0]]
215
+ }
216
+ ;
217
+
218
+ other_blocks_in_list : verbatim blocks_in_list {
219
+ result = [val[0]].concat(val[1])
220
+ } | lists blocks_in_list { result.concat val[1] }
221
+ | WHITELINE blocks_in_list { result = val[1] }
222
+ | verbatim { result = val }
223
+ | lists
224
+ | WHITELINE { result = [] }
225
+ | { result = [] }
226
+ ;
227
+ end
228
+
229
+ ---- inner
230
+
231
+ # :stopdoc:
232
+
233
+ TMPFILE = ["rdtmp", $$, 0]
234
+
235
+ MARK_TO_LEVEL = {
236
+ '=' => 1,
237
+ '==' => 2,
238
+ '===' => 3,
239
+ '====' => 4,
240
+ '+' => 5,
241
+ '++' => 6,
242
+ }
243
+
244
+ # :startdoc:
245
+
246
+ ##
247
+ # Footnotes for this document
248
+
249
+ attr_reader :footnotes
250
+
251
+ ##
252
+ # Labels for items in this document
253
+
254
+ attr_reader :labels
255
+
256
+ ##
257
+ # Path to find included files in
258
+
259
+ attr_accessor :include_path
260
+
261
+ ##
262
+ # Creates a new RDoc::RD::BlockParser. Use #parse to parse an rd-format
263
+ # document.
264
+
265
+ def initialize
266
+ @inline_parser = RDoc::RD::InlineParser.new self
267
+ @include_path = []
268
+
269
+ # for testing
270
+ @footnotes = []
271
+ @labels = {}
272
+ end
273
+
274
+ ##
275
+ # Parses +src+ and returns an RDoc::Markup::Document.
276
+
277
+ def parse src
278
+ @src = src
279
+ @src.push false
280
+
281
+ @footnotes = []
282
+ @labels = {}
283
+
284
+ # @i: index(line no.) of src
285
+ @i = 0
286
+
287
+ # stack for current indentation
288
+ @indent_stack = []
289
+
290
+ # how indented.
291
+ @current_indent = @indent_stack.join("")
292
+
293
+ # RDoc::RD::BlockParser for tmp src
294
+ @subparser = nil
295
+
296
+ # which part is in now
297
+ @in_part = nil
298
+ @part_content = []
299
+
300
+ @in_verbatim = false
301
+
302
+ @yydebug = true
303
+
304
+ document = do_parse
305
+
306
+ unless @footnotes.empty? then
307
+ blankline = document.parts.pop
308
+
309
+ document.parts << RDoc::Markup::Rule.new(1)
310
+ document.parts.concat @footnotes
311
+
312
+ document.parts.push blankline
313
+ end
314
+
315
+ document
316
+ end
317
+
318
+ ##
319
+ # Returns the next token from the document
320
+
321
+ def next_token # :nodoc:
322
+ # preprocessing
323
+ # if it is not in RD part
324
+ # => method
325
+ while @in_part != "rd"
326
+ line = @src[@i]
327
+ @i += 1 # next line
328
+
329
+ case line
330
+ # src end
331
+ when false
332
+ return [false, false]
333
+ # RD part begin
334
+ when /^=begin\s*(?:\bRD\b.*)?\s*$/
335
+ if @in_part # if in non-RD part
336
+ @part_content.push(line)
337
+ else
338
+ @in_part = "rd"
339
+ return [:WHITELINE, "=begin\n"] # <= for textblockand
340
+ end
341
+ # non-RD part begin
342
+ when /^=begin\s+(\w+)/
343
+ part = $1
344
+ if @in_part # if in non-RD part
345
+ @part_content.push(line)
346
+ else
347
+ @in_part = part if @tree.filter[part] # if filter exists
348
+ # p "BEGIN_PART: #{@in_part}" # DEBUG
349
+ end
350
+ # non-RD part end
351
+ when /^=end/
352
+ if @in_part # if in non-RD part
353
+ # p "END_PART: #{@in_part}" # DEBUG
354
+ # make Part-in object
355
+ part = RDoc::RD::Part.new(@part_content.join(""), @tree, "r")
356
+ @part_content.clear
357
+ # call filter, part_out is output(Part object)
358
+ part_out = @tree.filter[@in_part].call(part)
359
+
360
+ if @tree.filter[@in_part].mode == :rd # if output is RD formatted
361
+ subtree = parse_subtree(part_out.to_a)
362
+ else # if output is target formatted
363
+ basename = TMPFILE.join('.')
364
+ TMPFILE[-1] += 1
365
+ tmpfile = open(@tree.tmp_dir + "/" + basename + ".#{@in_part}", "w")
366
+ tmpfile.print(part_out)
367
+ tmpfile.close
368
+ subtree = parse_subtree(["=begin\n", "<<< #{basename}\n", "=end\n"])
369
+ end
370
+ @in_part = nil
371
+ return [:SUBTREE, subtree]
372
+ end
373
+ else
374
+ if @in_part # if in non-RD part
375
+ @part_content.push(line)
376
+ end
377
+ end
378
+ end
379
+
380
+ @current_indent = @indent_stack.join("")
381
+ line = @src[@i]
382
+ case line
383
+ when false
384
+ if_current_indent_equal("") do
385
+ [false, false]
386
+ end
387
+ when /^=end/
388
+ if_current_indent_equal("") do
389
+ @in_part = nil
390
+ [:WHITELINE, "=end"] # MUST CHANGE??
391
+ end
392
+ when /^\s*$/
393
+ @i += 1 # next line
394
+ return [:WHITELINE, ':WHITELINE']
395
+ when /^\#/ # comment line
396
+ @i += 1 # next line
397
+ self.next_token()
398
+ when /^(={1,4})(?!=)\s*(?=\S)/, /^(\+{1,2})(?!\+)\s*(?=\S)/
399
+ rest = $' # '
400
+ rest.strip!
401
+ mark = $1
402
+ if_current_indent_equal("") do
403
+ return [:HEADLINE, [MARK_TO_LEVEL[mark], rest]]
404
+ end
405
+ when /^<<<\s*(\S+)/
406
+ file = $1
407
+ if_current_indent_equal("") do
408
+ suffix = file[-3 .. -1]
409
+ if suffix == ".rd" or suffix == ".rb"
410
+ subtree = parse_subtree(get_included(file))
411
+ [:SUBTREE, subtree]
412
+ else
413
+ [:INCLUDE, file]
414
+ end
415
+ end
416
+ when /^(\s*)\*(\s*)/
417
+ rest = $' # '
418
+ newIndent = $2
419
+ if_current_indent_equal($1) do
420
+ if @in_verbatim
421
+ [:STRINGLINE, line]
422
+ else
423
+ @indent_stack.push("\s" + newIndent)
424
+ [:ITEMLISTLINE, rest]
425
+ end
426
+ end
427
+ when /^(\s*)(\(\d+\))(\s*)/
428
+ rest = $' # '
429
+ mark = $2
430
+ newIndent = $3
431
+ if_current_indent_equal($1) do
432
+ if @in_verbatim
433
+ [:STRINGLINE, line]
434
+ else
435
+ @indent_stack.push("\s" * mark.size + newIndent)
436
+ [:ENUMLISTLINE, rest]
437
+ end
438
+ end
439
+ when /^(\s*):(\s*)/
440
+ rest = $' # '
441
+ newIndent = $2
442
+ if_current_indent_equal($1) do
443
+ if @in_verbatim
444
+ [:STRINGLINE, line]
445
+ else
446
+ @indent_stack.push("\s#{$2}")
447
+ [:DESCLISTLINE, rest]
448
+ end
449
+ end
450
+ when /^(\s*)---(?!-|\s*$)/
451
+ indent = $1
452
+ rest = $'
453
+ /\s*/ === rest
454
+ term = $'
455
+ new_indent = $&
456
+ if_current_indent_equal(indent) do
457
+ if @in_verbatim
458
+ [:STRINGLINE, line]
459
+ else
460
+ @indent_stack.push("\s\s\s" + new_indent)
461
+ [:METHODLISTLINE, term]
462
+ end
463
+ end
464
+ when /^(\s*)/
465
+ if_current_indent_equal($1) do
466
+ [:STRINGLINE, line]
467
+ end
468
+ else
469
+ raise "[BUG] parsing error may occurred."
470
+ end
471
+ end
472
+
473
+ ##
474
+ # Yields to the given block if +indent+ matches the current indent, otherwise
475
+ # an indentation token is processed.
476
+
477
+ def if_current_indent_equal(indent)
478
+ indent = indent.sub(/\t/, "\s" * 8)
479
+ if @current_indent == indent
480
+ @i += 1 # next line
481
+ yield
482
+ elsif indent.index(@current_indent) == 0
483
+ @indent_stack.push(indent[@current_indent.size .. -1])
484
+ [:INDENT, ":INDENT"]
485
+ else
486
+ @indent_stack.pop
487
+ [:DEDENT, ":DEDENT"]
488
+ end
489
+ end
490
+ private :if_current_indent_equal
491
+
492
+ ##
493
+ # Cuts off excess whitespace in +src+
494
+
495
+ def cut_off(src)
496
+ ret = []
497
+ whiteline_buf = []
498
+
499
+ line = src.shift
500
+ /^\s*/ =~ line
501
+
502
+ indent = Regexp.quote($&)
503
+ ret.push($')
504
+
505
+ while line = src.shift
506
+ if /^(\s*)$/ =~ line
507
+ whiteline_buf.push(line)
508
+ elsif /^#{indent}/ =~ line
509
+ unless whiteline_buf.empty?
510
+ ret.concat(whiteline_buf)
511
+ whiteline_buf.clear
512
+ end
513
+ ret.push($')
514
+ else
515
+ raise "[BUG]: probably Parser Error while cutting off.\n"
516
+ end
517
+ end
518
+ ret
519
+ end
520
+ private :cut_off
521
+
522
+ def set_term_to_element(parent, term)
523
+ # parent.set_term_under_document_struct(term, @tree.document_struct)
524
+ parent.set_term_without_document_struct(term)
525
+ end
526
+ private :set_term_to_element
527
+
528
+ ##
529
+ # Raises a ParseError when invalid formatting is found
530
+
531
+ def on_error(et, ev, _values)
532
+ prv, cur, nxt = format_line_num(@i, @i+1, @i+2)
533
+
534
+ raise ParseError, <<Msg
535
+
536
+ RD syntax error: line #{@i+1}:
537
+ #{prv} |#{@src[@i-1].chomp}
538
+ #{cur}=>|#{@src[@i].chomp}
539
+ #{nxt} |#{@src[@i+1].chomp}
540
+
541
+ Msg
542
+ end
543
+
544
+ ##
545
+ # Current line number
546
+
547
+ def line_index
548
+ @i
549
+ end
550
+
551
+ ##
552
+ # Parses subtree +src+
553
+
554
+ def parse_subtree src
555
+ @subparser ||= RDoc::RD::BlockParser.new
556
+
557
+ @subparser.parse src
558
+ end
559
+ private :parse_subtree
560
+
561
+ ##
562
+ # Retrieves the content for +file+ from the include_path
563
+
564
+ def get_included(file)
565
+ included = []
566
+
567
+ @include_path.each do |dir|
568
+ file_name = File.join dir, file
569
+
570
+ if File.exist? file_name then
571
+ included = IO.readlines file_name
572
+ break
573
+ end
574
+ end
575
+
576
+ included
577
+ end
578
+ private :get_included
579
+
580
+ ##
581
+ # Formats line numbers +line_numbers+ prettily
582
+
583
+ def format_line_num(*line_numbers)
584
+ width = line_numbers.collect{|i| i.to_s.length }.max
585
+ line_numbers.collect{|i| sprintf("%#{width}d", i) }
586
+ end
587
+ private :format_line_num
588
+
589
+ ##
590
+ # Retrieves the content of +values+ as a single String
591
+
592
+ def content values
593
+ values.map { |value| value.content }.join
594
+ end
595
+
596
+ ##
597
+ # Creates a paragraph for +value+
598
+
599
+ def paragraph value
600
+ content = cut_off(value).join(' ').rstrip
601
+ contents = @inline_parser.parse content
602
+
603
+ RDoc::Markup::Paragraph.new(*contents)
604
+ end
605
+
606
+ ##
607
+ # Adds footnote +content+ to the document
608
+
609
+ def add_footnote content
610
+ index = @footnotes.length / 2 + 1
611
+
612
+ footmark_link = "{^#{index}}[rdoc-label:footmark-#{index}:foottext-#{index}]"
613
+
614
+ @footnotes << RDoc::Markup::Paragraph.new(footmark_link, ' ', *content)
615
+ @footnotes << RDoc::Markup::BlankLine.new
616
+
617
+ index
618
+ end
619
+
620
+ ##
621
+ # Adds label +label+ to the document
622
+
623
+ def add_label label
624
+ @labels[label] = true
625
+
626
+ label
627
+ end
628
+
629
+ # :stopdoc:
630
+
631
+ ---- header
632
+ class RDoc::RD
633
+
634
+ ##
635
+ # RD format parser for headings, paragraphs, lists, verbatim sections that
636
+ # exist as blocks.
637
+
638
+ ---- footer
639
+ end