rdoc 3.9.5 → 3.10.pre.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rdoc might be problematic. Click here for more details.

Files changed (183) hide show
  1. data.tar.gz.sig +0 -0
  2. data/.autotest +6 -3
  3. data/History.txt +63 -13
  4. data/LICENSE.rdoc +57 -0
  5. data/Manifest.txt +60 -6
  6. data/Rakefile +24 -12
  7. data/TODO.rdoc +30 -0
  8. data/bin/rdoc +0 -2
  9. data/lib/rdoc.rb +55 -2
  10. data/lib/rdoc/alias.rb +0 -2
  11. data/lib/rdoc/anon_class.rb +0 -2
  12. data/lib/rdoc/any_method.rb +0 -3
  13. data/lib/rdoc/attr.rb +0 -2
  14. data/lib/rdoc/class_module.rb +40 -7
  15. data/lib/rdoc/code_object.rb +1 -3
  16. data/lib/rdoc/code_objects.rb +3 -21
  17. data/lib/rdoc/comment.rb +225 -0
  18. data/lib/rdoc/constant.rb +0 -2
  19. data/lib/rdoc/context.rb +37 -120
  20. data/lib/rdoc/context/section.rb +114 -0
  21. data/lib/rdoc/cross_reference.rb +16 -7
  22. data/lib/rdoc/encoding.rb +0 -2
  23. data/lib/rdoc/gauntlet.rb +1 -1
  24. data/lib/rdoc/generator.rb +7 -2
  25. data/lib/rdoc/generator/darkfish.rb +126 -20
  26. data/lib/rdoc/generator/json_index.rb +240 -0
  27. data/lib/rdoc/generator/markup.rb +17 -54
  28. data/lib/rdoc/generator/ri.rb +0 -3
  29. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
  30. data/lib/rdoc/generator/template/darkfish/_head.rhtml +16 -0
  31. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +18 -0
  32. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
  33. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +8 -0
  34. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +16 -0
  35. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
  36. data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +7 -0
  37. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
  38. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +10 -0
  39. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +10 -0
  40. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +10 -0
  41. data/lib/rdoc/generator/template/darkfish/class.rhtml +161 -0
  42. data/lib/rdoc/generator/template/darkfish/fileinfo.rhtml +32 -0
  43. data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
  44. data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
  45. data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
  46. data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
  47. data/lib/rdoc/generator/template/darkfish/index.rhtml +16 -61
  48. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +99 -64
  49. data/lib/rdoc/generator/template/darkfish/js/jquery.js +15 -29
  50. data/lib/rdoc/generator/template/darkfish/js/search.js +94 -0
  51. data/lib/rdoc/generator/template/darkfish/page.rhtml +16 -0
  52. data/lib/rdoc/generator/template/darkfish/rdoc.css +126 -286
  53. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +50 -0
  54. data/lib/rdoc/generator/template/json_index/js/navigation.js +142 -0
  55. data/lib/rdoc/generator/template/json_index/js/searcher.js +228 -0
  56. data/lib/rdoc/ghost_method.rb +0 -2
  57. data/lib/rdoc/include.rb +0 -2
  58. data/lib/rdoc/markup.rb +204 -43
  59. data/lib/rdoc/markup/attr_changer.rb +25 -0
  60. data/lib/rdoc/markup/attr_span.rb +29 -0
  61. data/lib/rdoc/markup/attribute.rb +51 -0
  62. data/lib/rdoc/markup/document.rb +22 -1
  63. data/lib/rdoc/markup/formatter.rb +4 -11
  64. data/lib/rdoc/markup/formatter_test_case.rb +1 -2
  65. data/lib/rdoc/markup/heading.rb +44 -0
  66. data/lib/rdoc/markup/include.rb +42 -0
  67. data/lib/rdoc/markup/inline.rb +1 -144
  68. data/lib/rdoc/markup/list.rb +2 -1
  69. data/lib/rdoc/markup/parser.rb +6 -16
  70. data/lib/rdoc/markup/pre_process.rb +64 -10
  71. data/lib/rdoc/markup/raw.rb +1 -1
  72. data/lib/rdoc/markup/special.rb +40 -0
  73. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -2
  74. data/lib/rdoc/markup/to_ansi.rb +0 -2
  75. data/lib/rdoc/markup/to_bs.rb +0 -2
  76. data/lib/rdoc/markup/to_html.rb +102 -34
  77. data/lib/rdoc/markup/to_html_crossref.rb +36 -5
  78. data/lib/rdoc/markup/to_html_snippet.rb +270 -0
  79. data/lib/rdoc/markup/to_label.rb +55 -0
  80. data/lib/rdoc/markup/to_rdoc.rb +0 -3
  81. data/lib/rdoc/markup/to_table_of_contents.rb +62 -0
  82. data/lib/rdoc/markup/to_test.rb +0 -3
  83. data/lib/rdoc/markup/to_tt_only.rb +0 -3
  84. data/lib/rdoc/markup/verbatim.rb +18 -0
  85. data/lib/rdoc/meta_method.rb +0 -2
  86. data/lib/rdoc/method_attr.rb +17 -1
  87. data/lib/rdoc/normal_class.rb +0 -2
  88. data/lib/rdoc/normal_module.rb +0 -2
  89. data/lib/rdoc/options.rb +18 -3
  90. data/lib/rdoc/parser.rb +74 -42
  91. data/lib/rdoc/parser/c.rb +79 -118
  92. data/lib/rdoc/parser/rd.rb +22 -0
  93. data/lib/rdoc/parser/ruby.rb +86 -54
  94. data/lib/rdoc/parser/simple.rb +21 -9
  95. data/lib/rdoc/parser/text.rb +11 -0
  96. data/lib/rdoc/rd.rb +95 -0
  97. data/lib/rdoc/rd/block_parser.ry +638 -0
  98. data/lib/rdoc/rd/inline.rb +71 -0
  99. data/lib/rdoc/rd/inline_parser.ry +575 -0
  100. data/lib/rdoc/rdoc.rb +8 -23
  101. data/lib/rdoc/require.rb +0 -2
  102. data/lib/rdoc/ri.rb +4 -2
  103. data/lib/rdoc/ri/driver.rb +2 -6
  104. data/lib/rdoc/ri/store.rb +0 -1
  105. data/lib/rdoc/ruby_lex.rb +43 -20
  106. data/lib/rdoc/ruby_token.rb +44 -2
  107. data/lib/rdoc/single_class.rb +0 -2
  108. data/lib/rdoc/stats.rb +0 -5
  109. data/lib/rdoc/task.rb +2 -6
  110. data/lib/rdoc/test_case.rb +59 -0
  111. data/lib/rdoc/text.rb +42 -30
  112. data/lib/rdoc/token_stream.rb +45 -0
  113. data/lib/rdoc/tom_doc.rb +232 -0
  114. data/lib/rdoc/top_level.rb +36 -4
  115. data/test/test_attribute_manager.rb +26 -29
  116. data/test/test_rdoc_any_method.rb +2 -26
  117. data/test/test_rdoc_attr.rb +4 -4
  118. data/test/test_rdoc_class_module.rb +95 -12
  119. data/test/test_rdoc_code_object.rb +10 -3
  120. data/test/test_rdoc_comment.rb +504 -0
  121. data/test/test_rdoc_context.rb +60 -11
  122. data/test/test_rdoc_context_section.rb +16 -17
  123. data/test/test_rdoc_cross_reference.rb +17 -2
  124. data/test/test_rdoc_encoding.rb +4 -7
  125. data/test/test_rdoc_generator_darkfish.rb +12 -11
  126. data/test/test_rdoc_generator_json_index.rb +255 -0
  127. data/test/test_rdoc_generator_markup.rb +56 -0
  128. data/test/test_rdoc_generator_ri.rb +8 -11
  129. data/test/test_rdoc_markup.rb +9 -5
  130. data/test/test_rdoc_markup_attribute_manager.rb +5 -8
  131. data/test/test_rdoc_markup_document.rb +34 -6
  132. data/test/test_rdoc_markup_formatter.rb +11 -13
  133. data/test/test_rdoc_markup_heading.rb +20 -0
  134. data/test/test_rdoc_markup_include.rb +19 -0
  135. data/test/test_rdoc_markup_indented_paragraph.rb +4 -5
  136. data/test/test_rdoc_markup_paragraph.rb +2 -5
  137. data/test/test_rdoc_markup_parser.rb +87 -7
  138. data/test/test_rdoc_markup_pre_process.rb +60 -9
  139. data/test/test_rdoc_markup_raw.rb +4 -6
  140. data/test/test_rdoc_markup_to_ansi.rb +1 -4
  141. data/test/test_rdoc_markup_to_bs.rb +1 -4
  142. data/test/test_rdoc_markup_to_html.rb +170 -31
  143. data/test/test_rdoc_markup_to_html_crossref.rb +89 -11
  144. data/test/test_rdoc_markup_to_html_snippet.rb +668 -0
  145. data/test/test_rdoc_markup_to_label.rb +50 -0
  146. data/test/test_rdoc_markup_to_rdoc.rb +1 -4
  147. data/test/test_rdoc_markup_to_table_of_contents.rb +90 -0
  148. data/test/test_rdoc_markup_to_tt_only.rb +1 -4
  149. data/test/test_rdoc_markup_verbatim.rb +16 -0
  150. data/test/test_rdoc_method_attr.rb +16 -1
  151. data/test/test_rdoc_options.rb +17 -7
  152. data/test/test_rdoc_parser.rb +75 -6
  153. data/test/test_rdoc_parser_c.rb +56 -104
  154. data/test/test_rdoc_parser_rd.rb +52 -0
  155. data/test/test_rdoc_parser_ruby.rb +264 -323
  156. data/test/test_rdoc_parser_simple.rb +33 -17
  157. data/test/test_rdoc_rd.rb +30 -0
  158. data/test/test_rdoc_rd_block_parser.rb +527 -0
  159. data/test/test_rdoc_rd_inline.rb +63 -0
  160. data/test/test_rdoc_rd_inline_parser.rb +173 -0
  161. data/test/test_rdoc_rdoc.rb +7 -9
  162. data/test/test_rdoc_ri_driver.rb +10 -15
  163. data/test/test_rdoc_ri_paths.rb +6 -6
  164. data/test/test_rdoc_ri_store.rb +6 -13
  165. data/test/test_rdoc_ruby_lex.rb +53 -5
  166. data/test/test_rdoc_rubygems_hook.rb +2 -1
  167. data/test/test_rdoc_stats.rb +83 -103
  168. data/test/test_rdoc_task.rb +5 -4
  169. data/test/test_rdoc_text.rb +156 -11
  170. data/test/test_rdoc_token_stream.rb +42 -0
  171. data/test/test_rdoc_tom_doc.rb +458 -0
  172. data/test/test_rdoc_top_level.rb +49 -2
  173. data/test/xref_test_case.rb +4 -8
  174. metadata +217 -111
  175. metadata.gz.sig +0 -0
  176. checksums.yaml +0 -7
  177. checksums.yaml.gz.sig +0 -0
  178. data/CVE-2013-0256.rdoc +0 -49
  179. data/LICENSE.txt +0 -57
  180. data/lib/rdoc/generator/template/darkfish/classpage.rhtml +0 -321
  181. data/lib/rdoc/generator/template/darkfish/filepage.rhtml +0 -124
  182. data/lib/rdoc/generator/template/darkfish/js/quicksearch.js +0 -114
  183. data/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js +0 -10
@@ -0,0 +1,71 @@
1
+ ##
2
+ # Inline keeps track of markup and labels to create proper links.
3
+
4
+ class RDoc::RD::Inline
5
+
6
+ ##
7
+ # The text of the reference
8
+
9
+ attr_reader :reference
10
+
11
+ ##
12
+ # The markup of this reference in RDoc format
13
+
14
+ attr_reader :rdoc
15
+
16
+ ##
17
+ # Creates a new Inline for +rdoc+ and +reference+.
18
+ #
19
+ # +rdoc+ may be another Inline or a String. If +reference+ is not given it
20
+ # will use the text from +rdoc+.
21
+
22
+ def self.new rdoc, reference = rdoc
23
+ if self === rdoc and reference.equal? rdoc then
24
+ rdoc
25
+ else
26
+ super
27
+ end
28
+ end
29
+
30
+ ##
31
+ # Initializes the Inline with +rdoc+ and +inline+
32
+
33
+ def initialize rdoc, reference # :not-new:
34
+ @reference = reference.equal?(rdoc) ? reference.dup : reference
35
+
36
+ # unpack
37
+ @reference = @reference.reference if self.class === @reference
38
+ @rdoc = rdoc
39
+ end
40
+
41
+ def == other # :nodoc:
42
+ self.class === other and
43
+ @reference == other.reference and @rdoc == other.rdoc
44
+ end
45
+
46
+ ##
47
+ # Appends +more+ to this inline. +more+ may be a String or another Inline.
48
+
49
+ def append more
50
+ case more
51
+ when String then
52
+ @reference << more
53
+ @rdoc << more
54
+ when RDoc::RD::Inline then
55
+ @reference << more.reference
56
+ @rdoc << more.rdoc
57
+ else
58
+ raise "unknown thingy #{more}"
59
+ end
60
+
61
+ self
62
+ end
63
+
64
+ def inspect # :nodoc:
65
+ "(inline: #{self})"
66
+ end
67
+
68
+ alias to_s rdoc # :nodoc:
69
+
70
+ end
71
+
@@ -0,0 +1,575 @@
1
+ class InlineParser
2
+
3
+ preclow
4
+ nonassoc EX_LOW
5
+ left QUOTE
6
+ BAR
7
+ SLASH
8
+ BACK_SLASH
9
+ URL
10
+ OTHER
11
+ REF_OPEN
12
+ FOOTNOTE_OPEN
13
+ FOOTNOTE_CLOSE
14
+ nonassoc EX_HIGH
15
+ prechigh
16
+
17
+ token EM_OPEN
18
+ EM_CLOSE
19
+ CODE_OPEN
20
+ CODE_CLOSE
21
+ VAR_OPEN
22
+ VAR_CLOSE
23
+ KBD_OPEN
24
+ KBD_CLOSE
25
+ INDEX_OPEN
26
+ INDEX_CLOSE
27
+ REF_OPEN
28
+ REF_CLOSE
29
+ FOOTNOTE_OPEN
30
+ FOOTNOTE_CLOSE
31
+ VERB_OPEN
32
+ VERB_CLOSE
33
+ BAR
34
+ QUOTE
35
+ SLASH
36
+ BACK_SLASH
37
+ URL
38
+ OTHER
39
+ EX_LOW
40
+ EX_HIGH
41
+
42
+ rule
43
+ content : elements
44
+ ;
45
+
46
+ elements : elements element { result.append val[1] }
47
+ | element { result = val[0] }
48
+ ;
49
+
50
+ element : emphasis
51
+ | code
52
+ | var
53
+ | keyboard
54
+ | index
55
+ | reference
56
+ | footnote
57
+ | verb
58
+ | normal_str_ele
59
+ ;
60
+
61
+ emphasis : EM_OPEN content EM_CLOSE {
62
+ content = val[1]
63
+ result = inline "<em>#{content}</em>", content
64
+ }
65
+ ;
66
+
67
+ code : CODE_OPEN content CODE_CLOSE {
68
+ content = val[1]
69
+ result = inline "<code>#{content}</code>", content
70
+ }
71
+ ;
72
+
73
+ var : VAR_OPEN content VAR_CLOSE {
74
+ content = val[1]
75
+ result = inline "+#{content}+", content
76
+ }
77
+ ;
78
+
79
+ keyboard : KBD_OPEN content KBD_CLOSE {
80
+ content = val[1]
81
+ result = inline "<tt>#{content}</tt>", content
82
+ }
83
+ ;
84
+
85
+ index : INDEX_OPEN content INDEX_CLOSE {
86
+ label = val[1]
87
+ @block_parser.add_label label.reference
88
+ result = "<span id=\"label-#{label}\">#{label}</span>"
89
+ }
90
+ ;
91
+
92
+ # Reference
93
+ # ((<subst|filename/element_label>))
94
+
95
+ reference : REF_OPEN substitute ref_label REF_CLOSE {
96
+ result = "{#{val[1]}}[#{val[2].join}]"
97
+ } | REF_OPEN ref_label2 REF_CLOSE {
98
+ scheme, inline = val[1]
99
+
100
+ result = "{#{inline}}[#{scheme}#{inline.reference}]"
101
+ }
102
+ ;
103
+
104
+ # result is scheme and reference
105
+ ref_label : URL ref_url_strings {
106
+ result = [nil, inline(val[1])]
107
+ } | filename element_label {
108
+ result = [
109
+ 'rdoc-label:',
110
+ inline("#{val[0].reference}/#{val[1].reference}")
111
+ ]
112
+ } | element_label {
113
+ result = ['rdoc-label:', val[0].reference]
114
+ } | filename {
115
+ result = ['rdoc-label:', "#{val[0].reference}/"]
116
+ }
117
+ ;
118
+
119
+ # result is reference type and value
120
+ ref_label2 : URL ref_url_strings {
121
+ result = [nil, inline(val[1])]
122
+ } | filename element_label2 {
123
+ result = [
124
+ 'rdoc-label:',
125
+ inline("#{val[0].reference}/#{val[1].reference}")
126
+ ]
127
+ } | element_label2 {
128
+ result = ['rdoc-label:', val[0]]
129
+ } | filename {
130
+ ref = val[0].reference
131
+ result = ['rdoc-label:', inline(ref, "#{ref}/")]
132
+ }
133
+ ;
134
+
135
+ substitute : ref_subst_content BAR
136
+ | QUOTE ref_subst_content_q QUOTE BAR { result = val[1] }
137
+ | QUOTE ref_subst_strings_q QUOTE BAR { result = val[1] }
138
+ ;
139
+
140
+ filename : ref_subst_strings_first SLASH {
141
+ result = inline val[0]
142
+ } | QUOTE ref_subst_strings_q QUOTE SLASH {
143
+ result = inline "\"#{val[1]}\""
144
+ }
145
+ ;
146
+
147
+ # when substitute part exists
148
+ element_label : ref_subst_strings_first {
149
+ result = inline val[0]
150
+ } | QUOTE ref_subst_strings_q QUOTE {
151
+ result = inline "\"#{val[1]}\""
152
+ }
153
+ ;
154
+
155
+ # when substitute part doesn't exist
156
+ # in this case, element label can contain Inlines
157
+ element_label2 : ref_subst_content
158
+ | QUOTE ref_subst_content_q QUOTE { result = val[1] }
159
+ | QUOTE ref_subst_strings_q QUOTE { result = inline val[1] }
160
+ ;
161
+
162
+ ref_subst_content : ref_subst_ele2 ref_subst_eles {
163
+ result = val[0].append val[1]
164
+ } | ref_subst_str_ele_first ref_subst_eles {
165
+ result = val[0].append val[1]
166
+ } | ref_subst_str_ele_first {
167
+ result = val[0]
168
+ } | ref_subst_ele2 {
169
+ result = inline val[0]
170
+ }
171
+ ;
172
+
173
+ ref_subst_content_q : ref_subst_eles_q
174
+ ;
175
+
176
+ ref_subst_eles : ref_subst_eles ref_subst_ele {
177
+ result = val[0].append val[1]
178
+ } | ref_subst_ele {
179
+ result = inline val[0]
180
+ }
181
+ ;
182
+
183
+ ref_subst_eles_q : ref_subst_eles_q ref_subst_ele_q {
184
+ result = val[0].append val[1]
185
+ } | ref_subst_ele_q {
186
+ result = val[0]
187
+ }
188
+ ;
189
+
190
+ ref_subst_ele2 : emphasis
191
+ | code
192
+ | var
193
+ | keyboard
194
+ | index
195
+ | verb
196
+ ;
197
+
198
+ ref_subst_ele : ref_subst_ele2
199
+ | ref_subst_str_ele
200
+ ;
201
+
202
+ ref_subst_ele_q : ref_subst_ele2
203
+ | ref_subst_str_ele_q
204
+ ;
205
+
206
+ ref_subst_str_ele : ref_subst_strings = EX_LOW {
207
+ result = val[0]
208
+ }
209
+ ;
210
+
211
+ ref_subst_str_ele_first : ref_subst_strings_first {
212
+ result = inline val[0]
213
+ }
214
+ ;
215
+
216
+ ref_subst_str_ele_q : ref_subst_strings_q = EX_LOW {
217
+ result = inline val[0]
218
+ }
219
+ ;
220
+
221
+ ref_subst_strings : ref_subst_strings ref_subst_string3 { result << val[1] }
222
+ | ref_subst_string3
223
+ ;
224
+
225
+ # if it is first element of substitute, it can't contain URL on head.
226
+ ref_subst_strings_first : ref_subst_string ref_subst_strings = EX_HIGH {
227
+ result << val[1]
228
+ } | ref_subst_string = EX_LOW
229
+ ;
230
+
231
+ ref_subst_strings_q : ref_subst_strings_q ref_subst_string_q {
232
+ result << val[1]
233
+ } | ref_subst_string_q
234
+ ;
235
+
236
+ ref_subst_string : OTHER
237
+ | BACK_SLASH
238
+ | REF_OPEN
239
+ | FOOTNOTE_OPEN
240
+ | FOOTNOTE_CLOSE
241
+ ;
242
+
243
+ ref_subst_string2 : ref_subst_string
244
+ | URL
245
+ ;
246
+
247
+ ref_subst_string3 : ref_subst_string2
248
+ | QUOTE
249
+ ;
250
+
251
+ ref_subst_string_q : ref_subst_string2
252
+ | BAR
253
+ | SLASH
254
+ ;
255
+
256
+ # end subst
257
+
258
+ # string in url
259
+ ref_url_strings : ref_url_strings ref_url_string { result << val[1] }
260
+ | ref_url_string
261
+ ;
262
+
263
+ ref_url_string : OTHER
264
+ | BACK_SLASH BACK_SLASH
265
+ | URL
266
+ | SLASH
267
+ | BAR
268
+ | QUOTE
269
+ | EM_OPEN
270
+ | EM_CLOSE
271
+ | CODE_OPEN
272
+ | CODE_CLOSE
273
+ | VAR_OPEN
274
+ | VAR_CLOSE
275
+ | KBD_OPEN
276
+ | KBD_CLOSE
277
+ | INDEX_OPEN
278
+ | INDEX_CLOSE
279
+ | REF_OPEN
280
+ | FOOTNOTE_OPEN
281
+ | FOOTNOTE_CLOSE
282
+ | VERB_OPEN
283
+ | VERB_CLOSE
284
+ ;
285
+
286
+ # end url
287
+ # end Reference
288
+
289
+ footnote : FOOTNOTE_OPEN content FOOTNOTE_CLOSE {
290
+ index = @block_parser.add_footnote val[1].rdoc
291
+ result = "{*#{index}}[rdoc-label:foottext-#{index}:footmark-#{index}]"
292
+ }
293
+ ;
294
+
295
+ verb : VERB_OPEN verb_strings VERB_CLOSE {
296
+ result = "<tt>#{val[1]}</tt>"
297
+ }
298
+ ;
299
+
300
+ # normal string
301
+ # OTHER, QUOTE, BAR, SLASH, BACK_SLASH, URL
302
+ normal_string : OTHER
303
+ | QUOTE
304
+ | BAR
305
+ | SLASH
306
+ | BACK_SLASH
307
+ | URL
308
+ ;
309
+
310
+ normal_strings : normal_strings normal_string { result << val[1] }
311
+ | normal_string
312
+ ;
313
+
314
+ normal_str_ele : normal_strings = EX_LOW {
315
+ result = inline val[0]
316
+ }
317
+ ;
318
+
319
+ # in verb
320
+ verb_string : verb_normal_string
321
+ | BACK_SLASH verb_normal_string { result = val[1] }
322
+ | BACK_SLASH VERB_CLOSE { result = val[1] }
323
+ | BACK_SLASH BACK_SLASH { result = val[1] }
324
+ ;
325
+
326
+ verb_normal_string : OTHER
327
+ | QUOTE
328
+ | BAR
329
+ | SLASH
330
+ | EM_OPEN
331
+ | EM_CLOSE
332
+ | CODE_OPEN
333
+ | CODE_CLOSE
334
+ | VAR_OPEN
335
+ | VAR_CLOSE
336
+ | KBD_OPEN
337
+ | KBD_CLOSE
338
+ | INDEX_OPEN
339
+ | INDEX_CLOSE
340
+ | REF_OPEN
341
+ | REF_CLOSE
342
+ | FOOTNOTE_OPEN
343
+ | FOOTNOTE_CLOSE
344
+ | VERB_OPEN
345
+ | URL
346
+ ;
347
+
348
+ verb_strings : verb_strings verb_string { result << val[1] }
349
+ | verb_string
350
+ ;
351
+
352
+ /* verb_str_ele : verb_strings
353
+ * ;
354
+ */
355
+ end
356
+
357
+ ---- inner
358
+
359
+ # :stopdoc:
360
+
361
+ EM_OPEN = '((*'
362
+ EM_OPEN_RE = /\A#{Regexp.quote(EM_OPEN)}/
363
+ EM_CLOSE = '*))'
364
+ EM_CLOSE_RE = /\A#{Regexp.quote(EM_CLOSE)}/
365
+ CODE_OPEN = '(({'
366
+ CODE_OPEN_RE = /\A#{Regexp.quote(CODE_OPEN)}/
367
+ CODE_CLOSE = '}))'
368
+ CODE_CLOSE_RE = /\A#{Regexp.quote(CODE_CLOSE)}/
369
+ VAR_OPEN = '((|'
370
+ VAR_OPEN_RE = /\A#{Regexp.quote(VAR_OPEN)}/
371
+ VAR_CLOSE = '|))'
372
+ VAR_CLOSE_RE = /\A#{Regexp.quote(VAR_CLOSE)}/
373
+ KBD_OPEN = '((%'
374
+ KBD_OPEN_RE = /\A#{Regexp.quote(KBD_OPEN)}/
375
+ KBD_CLOSE = '%))'
376
+ KBD_CLOSE_RE = /\A#{Regexp.quote(KBD_CLOSE)}/
377
+ INDEX_OPEN = '((:'
378
+ INDEX_OPEN_RE = /\A#{Regexp.quote(INDEX_OPEN)}/
379
+ INDEX_CLOSE = ':))'
380
+ INDEX_CLOSE_RE = /\A#{Regexp.quote(INDEX_CLOSE)}/
381
+ REF_OPEN = '((<'
382
+ REF_OPEN_RE = /\A#{Regexp.quote(REF_OPEN)}/
383
+ REF_CLOSE = '>))'
384
+ REF_CLOSE_RE = /\A#{Regexp.quote(REF_CLOSE)}/
385
+ FOOTNOTE_OPEN = '((-'
386
+ FOOTNOTE_OPEN_RE = /\A#{Regexp.quote(FOOTNOTE_OPEN)}/
387
+ FOOTNOTE_CLOSE = '-))'
388
+ FOOTNOTE_CLOSE_RE = /\A#{Regexp.quote(FOOTNOTE_CLOSE)}/
389
+ VERB_OPEN = "(('"
390
+ VERB_OPEN_RE = /\A#{Regexp.quote(VERB_OPEN)}/
391
+ VERB_CLOSE = "'))"
392
+ VERB_CLOSE_RE = /\A#{Regexp.quote(VERB_CLOSE)}/
393
+
394
+ BAR = "|"
395
+ BAR_RE = /\A#{Regexp.quote(BAR)}/
396
+ QUOTE = '"'
397
+ QUOTE_RE = /\A#{Regexp.quote(QUOTE)}/
398
+ SLASH = "/"
399
+ SLASH_RE = /\A#{Regexp.quote(SLASH)}/
400
+ BACK_SLASH = "\\"
401
+ BACK_SLASH_RE = /\A#{Regexp.quote(BACK_SLASH)}/
402
+ URL = "URL:"
403
+ URL_RE = /\A#{Regexp.quote(URL)}/
404
+
405
+ other_re_mode = Regexp::EXTENDED
406
+ other_re_mode |= Regexp::MULTILINE
407
+
408
+ OTHER_RE = Regexp.new(
409
+ "\\A.+?(?=#{Regexp.quote(EM_OPEN)}|#{Regexp.quote(EM_CLOSE)}|
410
+ #{Regexp.quote(CODE_OPEN)}|#{Regexp.quote(CODE_CLOSE)}|
411
+ #{Regexp.quote(VAR_OPEN)}|#{Regexp.quote(VAR_CLOSE)}|
412
+ #{Regexp.quote(KBD_OPEN)}|#{Regexp.quote(KBD_CLOSE)}|
413
+ #{Regexp.quote(INDEX_OPEN)}|#{Regexp.quote(INDEX_CLOSE)}|
414
+ #{Regexp.quote(REF_OPEN)}|#{Regexp.quote(REF_CLOSE)}|
415
+ #{Regexp.quote(FOOTNOTE_OPEN)}|#{Regexp.quote(FOOTNOTE_CLOSE)}|
416
+ #{Regexp.quote(VERB_OPEN)}|#{Regexp.quote(VERB_CLOSE)}|
417
+ #{Regexp.quote(BAR)}|
418
+ #{Regexp.quote(QUOTE)}|
419
+ #{Regexp.quote(SLASH)}|
420
+ #{Regexp.quote(BACK_SLASH)}|
421
+ #{Regexp.quote(URL)})", other_re_mode)
422
+
423
+ # :startdoc:
424
+
425
+ def initialize block_parser
426
+ @block_parser = block_parser
427
+ end
428
+
429
+ def parse inline
430
+ @inline = inline
431
+ @src = StringScanner.new inline
432
+ @pre = ""
433
+ @yydebug = true
434
+ do_parse.to_s
435
+ rescue
436
+ puts $!
437
+ puts
438
+ puts @inline[0, @src.pos].inspect
439
+ puts @src.rest[0..40]
440
+ puts
441
+ raise
442
+ end
443
+
444
+ def next_token
445
+ return [false, false] if @src.eos?
446
+ # p @src.rest if @yydebug
447
+ if ret = @src.scan(EM_OPEN_RE)
448
+ @pre << ret
449
+ [:EM_OPEN, ret]
450
+ elsif ret = @src.scan(EM_CLOSE_RE)
451
+ @pre << ret
452
+ [:EM_CLOSE, ret]
453
+ elsif ret = @src.scan(CODE_OPEN_RE)
454
+ @pre << ret
455
+ [:CODE_OPEN, ret]
456
+ elsif ret = @src.scan(CODE_CLOSE_RE)
457
+ @pre << ret
458
+ [:CODE_CLOSE, ret]
459
+ elsif ret = @src.scan(VAR_OPEN_RE)
460
+ @pre << ret
461
+ [:VAR_OPEN, ret]
462
+ elsif ret = @src.scan(VAR_CLOSE_RE)
463
+ @pre << ret
464
+ [:VAR_CLOSE, ret]
465
+ elsif ret = @src.scan(KBD_OPEN_RE)
466
+ @pre << ret
467
+ [:KBD_OPEN, ret]
468
+ elsif ret = @src.scan(KBD_CLOSE_RE)
469
+ @pre << ret
470
+ [:KBD_CLOSE, ret]
471
+ elsif ret = @src.scan(INDEX_OPEN_RE)
472
+ @pre << ret
473
+ [:INDEX_OPEN, ret]
474
+ elsif ret = @src.scan(INDEX_CLOSE_RE)
475
+ @pre << ret
476
+ [:INDEX_CLOSE, ret]
477
+ elsif ret = @src.scan(REF_OPEN_RE)
478
+ @pre << ret
479
+ [:REF_OPEN, ret]
480
+ elsif ret = @src.scan(REF_CLOSE_RE)
481
+ @pre << ret
482
+ [:REF_CLOSE, ret]
483
+ elsif ret = @src.scan(FOOTNOTE_OPEN_RE)
484
+ @pre << ret
485
+ [:FOOTNOTE_OPEN, ret]
486
+ elsif ret = @src.scan(FOOTNOTE_CLOSE_RE)
487
+ @pre << ret
488
+ [:FOOTNOTE_CLOSE, ret]
489
+ elsif ret = @src.scan(VERB_OPEN_RE)
490
+ @pre << ret
491
+ [:VERB_OPEN, ret]
492
+ elsif ret = @src.scan(VERB_CLOSE_RE)
493
+ @pre << ret
494
+ [:VERB_CLOSE, ret]
495
+ elsif ret = @src.scan(BAR_RE)
496
+ @pre << ret
497
+ [:BAR, ret]
498
+ elsif ret = @src.scan(QUOTE_RE)
499
+ @pre << ret
500
+ [:QUOTE, ret]
501
+ elsif ret = @src.scan(SLASH_RE)
502
+ @pre << ret
503
+ [:SLASH, ret]
504
+ elsif ret = @src.scan(BACK_SLASH_RE)
505
+ @pre << ret
506
+ [:BACK_SLASH, ret]
507
+ elsif ret = @src.scan(URL_RE)
508
+ @pre << ret
509
+ [:URL, ret]
510
+ elsif ret = @src.scan(OTHER_RE)
511
+ @pre << ret
512
+ [:OTHER, ret]
513
+ else
514
+ ret = @src.rest
515
+ @pre << ret
516
+ @src.terminate
517
+ [:OTHER, ret]
518
+ end
519
+ end
520
+
521
+ def on_error(et, ev, values)
522
+ lines_of_rest = @src.rest.lines.to_a.length
523
+ prev_words = prev_words_on_error(ev)
524
+ at = 4 + prev_words.length
525
+
526
+ message = <<-MSG
527
+ RD syntax error: line #{@block_parser.line_index - lines_of_rest}:
528
+ ...#{prev_words} #{(ev||'')} #{next_words_on_error()} ...
529
+ MSG
530
+
531
+ message << " " * at + "^" * (ev ? ev.length : 0) + "\n"
532
+ raise ParseError, message
533
+ end
534
+
535
+ def prev_words_on_error(ev)
536
+ pre = @pre
537
+ if ev and /#{Regexp.quote(ev)}$/ =~ pre
538
+ pre = $`
539
+ end
540
+ last_line(pre)
541
+ end
542
+
543
+ def last_line(src)
544
+ if n = src.rindex("\n")
545
+ src[(n+1) .. -1]
546
+ else
547
+ src
548
+ end
549
+ end
550
+ private :last_line
551
+
552
+ def next_words_on_error
553
+ if n = @src.rest.index("\n")
554
+ @src.rest[0 .. (n-1)]
555
+ else
556
+ @src.rest
557
+ end
558
+ end
559
+
560
+ def inline rdoc, reference = rdoc
561
+ RDoc::RD::Inline.new rdoc, reference
562
+ end
563
+
564
+ # :stopdoc:
565
+ ---- header
566
+ require 'strscan'
567
+
568
+ class RDoc::RD
569
+
570
+ ##
571
+ # RD format parser for inline markup such as emphasis, links, footnotes, etc.
572
+
573
+ ---- footer
574
+ end
575
+