rdoc 3.1 → 6.3.3
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.
- checksums.yaml +7 -0
- data/CONTRIBUTING.rdoc +220 -0
- data/CVE-2013-0256.rdoc +49 -0
- data/ExampleMarkdown.md +37 -0
- data/ExampleRDoc.rdoc +208 -0
- data/Gemfile +12 -0
- data/History.rdoc +1666 -0
- data/LEGAL.rdoc +50 -0
- data/LICENSE.rdoc +57 -0
- data/README.rdoc +129 -0
- data/RI.rdoc +57 -0
- data/Rakefile +84 -81
- data/TODO.rdoc +59 -0
- data/bin/console +7 -0
- data/bin/setup +6 -0
- data/{bin → exe}/rdoc +11 -2
- data/exe/ri +12 -0
- data/lib/rdoc/alias.rb +1 -2
- data/lib/rdoc/anon_class.rb +3 -2
- data/lib/rdoc/any_method.rb +234 -40
- data/lib/rdoc/attr.rb +79 -11
- data/lib/rdoc/class_module.rb +443 -71
- data/lib/rdoc/code_object.rb +216 -20
- data/lib/rdoc/code_objects.rb +4 -21
- data/lib/rdoc/comment.rb +250 -0
- data/lib/rdoc/constant.rb +110 -9
- data/lib/rdoc/context/section.rb +232 -0
- data/lib/rdoc/context.rb +392 -172
- data/lib/rdoc/cross_reference.rb +202 -0
- data/lib/rdoc/encoding.rb +83 -28
- data/lib/rdoc/erb_partial.rb +19 -0
- data/lib/rdoc/erbio.rb +8 -3
- data/lib/rdoc/extend.rb +10 -0
- data/lib/rdoc/generator/darkfish.rb +507 -84
- data/lib/rdoc/generator/json_index.rb +300 -0
- data/lib/rdoc/generator/markup.rb +27 -74
- data/lib/rdoc/generator/pot/message_extractor.rb +68 -0
- data/lib/rdoc/generator/pot/po.rb +84 -0
- data/lib/rdoc/generator/pot/po_entry.rb +141 -0
- data/lib/rdoc/generator/pot.rb +98 -0
- data/lib/rdoc/generator/ri.rb +8 -62
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +5 -0
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +22 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +19 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +9 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +15 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +9 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +15 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +15 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +12 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_navigation.rhtml +11 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +12 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +11 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +14 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +11 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +18 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +172 -0
- data/lib/rdoc/generator/template/darkfish/css/fonts.css +167 -0
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +639 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-Light.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-LightItalic.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-Regular.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/Lato-RegularItalic.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
- data/lib/rdoc/generator/template/darkfish/images/add.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/arrow_up.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/delete.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/tag_blue.png +0 -0
- data/lib/rdoc/generator/template/darkfish/images/transparent.png +0 -0
- data/lib/rdoc/generator/template/darkfish/index.rhtml +18 -60
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -83
- data/lib/rdoc/generator/template/darkfish/js/search.js +110 -0
- data/lib/rdoc/generator/template/darkfish/page.rhtml +18 -0
- data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +18 -0
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +62 -0
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +58 -0
- data/lib/rdoc/generator/template/json_index/.document +1 -0
- data/lib/rdoc/generator/template/json_index/js/navigation.js +105 -0
- data/lib/rdoc/generator/template/json_index/js/searcher.js +229 -0
- data/lib/rdoc/generator.rb +24 -13
- data/lib/rdoc/ghost_method.rb +1 -2
- data/lib/rdoc/i18n/locale.rb +102 -0
- data/lib/rdoc/i18n/text.rb +126 -0
- data/lib/rdoc/i18n.rb +10 -0
- data/lib/rdoc/include.rb +5 -95
- data/lib/rdoc/known_classes.rb +5 -2
- data/lib/rdoc/markdown/entities.rb +2132 -0
- data/lib/rdoc/markdown/literals.kpeg +23 -0
- data/lib/rdoc/markdown/literals.rb +416 -0
- data/lib/rdoc/markdown.kpeg +1237 -0
- data/lib/rdoc/markdown.rb +16684 -0
- data/lib/rdoc/markup/attr_changer.rb +23 -0
- data/lib/rdoc/markup/attr_span.rb +36 -0
- data/lib/rdoc/markup/attribute_manager.rb +135 -62
- data/lib/rdoc/markup/attributes.rb +71 -0
- data/lib/rdoc/markup/blank_line.rb +1 -0
- data/lib/rdoc/markup/block_quote.rb +15 -0
- data/lib/rdoc/markup/document.rb +96 -9
- data/lib/rdoc/markup/formatter.rb +138 -25
- data/lib/rdoc/markup/hard_break.rb +32 -0
- data/lib/rdoc/markup/heading.rb +61 -2
- data/lib/rdoc/markup/include.rb +43 -0
- data/lib/rdoc/markup/indented_paragraph.rb +48 -0
- data/lib/rdoc/markup/list.rb +25 -4
- data/lib/rdoc/markup/list_item.rb +18 -4
- data/lib/rdoc/markup/paragraph.rb +15 -0
- data/lib/rdoc/markup/parser.rb +180 -88
- data/lib/rdoc/markup/pre_process.rb +183 -38
- data/lib/rdoc/markup/raw.rb +6 -5
- data/lib/rdoc/markup/regexp_handling.rb +41 -0
- data/lib/rdoc/markup/rule.rb +1 -0
- data/lib/rdoc/markup/table.rb +47 -0
- data/lib/rdoc/markup/to_ansi.rb +17 -7
- data/lib/rdoc/markup/to_bs.rb +5 -8
- data/lib/rdoc/markup/to_html.rb +238 -137
- data/lib/rdoc/markup/to_html_crossref.rb +125 -152
- data/lib/rdoc/markup/to_html_snippet.rb +285 -0
- data/lib/rdoc/markup/to_joined_paragraph.rb +47 -0
- data/lib/rdoc/markup/to_label.rb +75 -0
- data/lib/rdoc/markup/to_markdown.rb +192 -0
- data/lib/rdoc/markup/to_rdoc.rb +85 -15
- data/lib/rdoc/markup/to_table_of_contents.rb +89 -0
- data/lib/rdoc/markup/to_test.rb +2 -4
- data/lib/rdoc/markup/to_tt_only.rb +121 -0
- data/lib/rdoc/markup/verbatim.rb +39 -0
- data/lib/rdoc/markup.rb +388 -110
- data/lib/rdoc/meta_method.rb +1 -2
- data/lib/rdoc/method_attr.rb +87 -21
- data/lib/rdoc/mixin.rb +121 -0
- data/lib/rdoc/normal_class.rb +39 -10
- data/lib/rdoc/normal_module.rb +22 -7
- data/lib/rdoc/options.rb +613 -73
- data/lib/rdoc/parser/c.rb +621 -287
- data/lib/rdoc/parser/changelog.rb +335 -0
- data/lib/rdoc/parser/markdown.rb +24 -0
- data/lib/rdoc/parser/rd.rb +23 -0
- data/lib/rdoc/parser/ripper_state_lex.rb +590 -0
- data/lib/rdoc/parser/ruby.rb +1368 -762
- data/lib/rdoc/parser/ruby_tools.rb +42 -35
- data/lib/rdoc/parser/simple.rb +23 -11
- data/lib/rdoc/parser/text.rb +12 -0
- data/lib/rdoc/parser.rb +162 -89
- data/lib/rdoc/rd/block_parser.rb +1056 -0
- data/lib/rdoc/rd/block_parser.ry +639 -0
- data/lib/rdoc/rd/inline.rb +72 -0
- data/lib/rdoc/rd/inline_parser.rb +1208 -0
- data/lib/rdoc/rd/inline_parser.ry +593 -0
- data/lib/rdoc/rd.rb +100 -0
- data/lib/rdoc/rdoc.rb +208 -115
- data/lib/rdoc/require.rb +1 -2
- data/lib/rdoc/ri/driver.rb +734 -239
- data/lib/rdoc/ri/formatter.rb +1 -0
- data/lib/rdoc/ri/paths.rb +91 -48
- data/lib/rdoc/ri/store.rb +3 -261
- data/lib/rdoc/ri/task.rb +71 -0
- data/lib/rdoc/ri.rb +5 -2
- data/lib/rdoc/rubygems_hook.rb +246 -0
- data/lib/rdoc/servlet.rb +451 -0
- data/lib/rdoc/single_class.rb +14 -2
- data/lib/rdoc/stats/normal.rb +19 -12
- data/lib/rdoc/stats/quiet.rb +1 -0
- data/lib/rdoc/stats/verbose.rb +1 -0
- data/lib/rdoc/stats.rb +262 -104
- data/lib/rdoc/store.rb +979 -0
- data/lib/rdoc/task.rb +84 -44
- data/lib/rdoc/text.rb +117 -72
- data/lib/rdoc/token_stream.rb +73 -4
- data/lib/rdoc/tom_doc.rb +263 -0
- data/lib/rdoc/top_level.rb +111 -261
- data/lib/rdoc/version.rb +8 -0
- data/lib/rdoc.rb +127 -64
- data/man/ri.1 +247 -0
- data/rdoc.gemspec +249 -0
- metadata +171 -291
- data/.autotest +0 -16
- data/.document +0 -5
- data/History.txt +0 -594
- data/LICENSE.txt +0 -57
- data/Manifest.txt +0 -158
- data/README.txt +0 -45
- data/RI.txt +0 -58
- data/bin/ri +0 -5
- data/lib/rdoc/gauntlet.rb +0 -52
- data/lib/rdoc/generator/template/darkfish/classpage.rhtml +0 -296
- data/lib/rdoc/generator/template/darkfish/filepage.rhtml +0 -124
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -32
- data/lib/rdoc/generator/template/darkfish/js/quicksearch.js +0 -114
- data/lib/rdoc/generator/template/darkfish/js/thickbox-compressed.js +0 -10
- data/lib/rdoc/generator/template/darkfish/rdoc.css +0 -706
- data/lib/rdoc/markup/formatter_test_case.rb +0 -689
- data/lib/rdoc/markup/inline.rb +0 -137
- data/lib/rdoc/markup/text_formatter_test_case.rb +0 -116
- data/lib/rdoc/ruby_lex.rb +0 -1291
- data/lib/rdoc/ruby_token.rb +0 -416
- data/test/README +0 -1
- data/test/binary.dat +0 -0
- data/test/hidden.zip.txt +0 -1
- data/test/test.ja.rdoc +0 -10
- data/test/test.ja.txt +0 -8
- data/test/test.txt +0 -1
- data/test/test_attribute_manager.rb +0 -120
- data/test/test_rdoc_alias.rb +0 -13
- data/test/test_rdoc_any_method.rb +0 -126
- data/test/test_rdoc_attr.rb +0 -61
- data/test/test_rdoc_class_module.rb +0 -233
- data/test/test_rdoc_code_object.rb +0 -165
- data/test/test_rdoc_constant.rb +0 -15
- data/test/test_rdoc_context.rb +0 -370
- data/test/test_rdoc_encoding.rb +0 -166
- data/test/test_rdoc_generator_darkfish.rb +0 -119
- data/test/test_rdoc_generator_ri.rb +0 -76
- data/test/test_rdoc_include.rb +0 -96
- data/test/test_rdoc_markup.rb +0 -37
- data/test/test_rdoc_markup_attribute_manager.rb +0 -240
- data/test/test_rdoc_markup_document.rb +0 -51
- data/test/test_rdoc_markup_paragraph.rb +0 -9
- data/test/test_rdoc_markup_parser.rb +0 -1395
- data/test/test_rdoc_markup_pre_process.rb +0 -185
- data/test/test_rdoc_markup_raw.rb +0 -27
- data/test/test_rdoc_markup_to_ansi.rb +0 -328
- data/test/test_rdoc_markup_to_bs.rb +0 -341
- data/test/test_rdoc_markup_to_html.rb +0 -335
- data/test/test_rdoc_markup_to_html_crossref.rb +0 -169
- data/test/test_rdoc_markup_to_rdoc.rb +0 -327
- data/test/test_rdoc_method_attr.rb +0 -122
- data/test/test_rdoc_normal_class.rb +0 -17
- data/test/test_rdoc_normal_module.rb +0 -31
- data/test/test_rdoc_options.rb +0 -342
- data/test/test_rdoc_parser.rb +0 -83
- data/test/test_rdoc_parser_c.rb +0 -912
- data/test/test_rdoc_parser_ruby.rb +0 -1754
- data/test/test_rdoc_parser_simple.rb +0 -99
- data/test/test_rdoc_rdoc.rb +0 -164
- data/test/test_rdoc_require.rb +0 -25
- data/test/test_rdoc_ri_driver.rb +0 -846
- data/test/test_rdoc_ri_paths.rb +0 -43
- data/test/test_rdoc_ri_store.rb +0 -352
- data/test/test_rdoc_ruby_lex.rb +0 -23
- data/test/test_rdoc_stats.rb +0 -38
- data/test/test_rdoc_task.rb +0 -92
- data/test/test_rdoc_text.rb +0 -251
- data/test/test_rdoc_top_level.rb +0 -120
- data/test/xref_data.rb +0 -62
- data/test/xref_test_case.rb +0 -61
- data.tar.gz.sig +0 -3
- metadata.gz.sig +0 -0
data/lib/rdoc/markup/parser.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
require 'strscan'
|
2
|
-
require 'rdoc/text'
|
3
3
|
|
4
4
|
##
|
5
5
|
# A recursive-descent parser for RDoc markup.
|
@@ -9,8 +9,9 @@ require 'rdoc/text'
|
|
9
9
|
# RDoc::Markup::ToHTML.
|
10
10
|
#
|
11
11
|
# The parser only handles the block-level constructs Paragraph, List,
|
12
|
-
# ListItem, Heading, Verbatim, BlankLine and
|
13
|
-
# <tt>\+blah\+</tt> is handled separately by
|
12
|
+
# ListItem, Heading, Verbatim, BlankLine, Rule and BlockQuote.
|
13
|
+
# Inline markup such as <tt>\+blah\+</tt> is handled separately by
|
14
|
+
# RDoc::Markup::AttributeManager.
|
14
15
|
#
|
15
16
|
# To see what markup the Parser implements read RDoc. To see how to use
|
16
17
|
# RDoc markup to format text in your program read RDoc::Markup.
|
@@ -52,7 +53,9 @@ class RDoc::Markup::Parser
|
|
52
53
|
attr_reader :tokens
|
53
54
|
|
54
55
|
##
|
55
|
-
# Parses +str+ into a Document
|
56
|
+
# Parses +str+ into a Document.
|
57
|
+
#
|
58
|
+
# Use RDoc::Markup#parse instead of this method.
|
56
59
|
|
57
60
|
def self.parse str
|
58
61
|
parser = new
|
@@ -74,23 +77,29 @@ class RDoc::Markup::Parser
|
|
74
77
|
# Creates a new Parser. See also ::parse
|
75
78
|
|
76
79
|
def initialize
|
77
|
-
@
|
78
|
-
@current_token
|
79
|
-
@debug
|
80
|
-
|
81
|
-
@
|
82
|
-
@line_pos = 0
|
80
|
+
@binary_input = nil
|
81
|
+
@current_token = nil
|
82
|
+
@debug = false
|
83
|
+
@s = nil
|
84
|
+
@tokens = []
|
83
85
|
end
|
84
86
|
|
85
87
|
##
|
86
88
|
# Builds a Heading of +level+
|
87
89
|
|
88
90
|
def build_heading level
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
91
|
+
type, text, = get
|
92
|
+
|
93
|
+
text = case type
|
94
|
+
when :TEXT then
|
95
|
+
skip :NEWLINE
|
96
|
+
text
|
97
|
+
else
|
98
|
+
unget
|
99
|
+
''
|
100
|
+
end
|
101
|
+
|
102
|
+
RDoc::Markup::Heading.new level, text
|
94
103
|
end
|
95
104
|
|
96
105
|
##
|
@@ -100,13 +109,13 @@ class RDoc::Markup::Parser
|
|
100
109
|
p :list_start => margin if @debug
|
101
110
|
|
102
111
|
list = RDoc::Markup::List.new
|
112
|
+
label = nil
|
103
113
|
|
104
114
|
until @tokens.empty? do
|
105
115
|
type, data, column, = get
|
106
116
|
|
107
117
|
case type
|
108
|
-
when
|
109
|
-
|
118
|
+
when *LIST_TOKENS then
|
110
119
|
if column < margin || (list.type && list.type != type) then
|
111
120
|
unget
|
112
121
|
break
|
@@ -117,6 +126,8 @@ class RDoc::Markup::Parser
|
|
117
126
|
|
118
127
|
case type
|
119
128
|
when :NOTE, :LABEL then
|
129
|
+
label = [] unless label
|
130
|
+
|
120
131
|
if peek_type == :NEWLINE then
|
121
132
|
# description not on the same line as LABEL/NOTE
|
122
133
|
# skip the trailing newline & any blank lines below
|
@@ -139,32 +150,35 @@ class RDoc::Markup::Parser
|
|
139
150
|
# In all cases, we have an empty description.
|
140
151
|
# In the last case only, we continue.
|
141
152
|
if peek_type.nil? || column < margin then
|
142
|
-
empty =
|
153
|
+
empty = true
|
143
154
|
elsif column == margin then
|
144
155
|
case peek_type
|
145
156
|
when type
|
146
|
-
empty =
|
157
|
+
empty = :continue
|
147
158
|
when *LIST_TOKENS
|
148
|
-
empty =
|
159
|
+
empty = true
|
149
160
|
else
|
150
|
-
empty =
|
161
|
+
empty = false
|
151
162
|
end
|
152
163
|
else
|
153
|
-
empty =
|
164
|
+
empty = false
|
154
165
|
end
|
155
166
|
|
156
|
-
if empty
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
break if empty == 1
|
161
|
-
next
|
167
|
+
if empty then
|
168
|
+
label << data
|
169
|
+
next if empty == :continue
|
170
|
+
break
|
162
171
|
end
|
163
172
|
end
|
164
173
|
else
|
165
174
|
data = nil
|
166
175
|
end
|
167
176
|
|
177
|
+
if label then
|
178
|
+
data = label << data
|
179
|
+
label = nil
|
180
|
+
end
|
181
|
+
|
168
182
|
list_item = RDoc::Markup::ListItem.new data
|
169
183
|
parse list_item, column
|
170
184
|
list << list_item
|
@@ -177,7 +191,13 @@ class RDoc::Markup::Parser
|
|
177
191
|
|
178
192
|
p :list_end => margin if @debug
|
179
193
|
|
180
|
-
|
194
|
+
if list.empty? then
|
195
|
+
return nil unless label
|
196
|
+
return nil unless [:LABEL, :NOTE].include? list.type
|
197
|
+
|
198
|
+
list_item = RDoc::Markup::ListItem.new label, RDoc::Markup::BlankLine.new
|
199
|
+
list << list_item
|
200
|
+
end
|
181
201
|
|
182
202
|
list
|
183
203
|
end
|
@@ -193,15 +213,20 @@ class RDoc::Markup::Parser
|
|
193
213
|
until @tokens.empty? do
|
194
214
|
type, data, column, = get
|
195
215
|
|
196
|
-
if type == :TEXT
|
216
|
+
if type == :TEXT and column == margin then
|
197
217
|
paragraph << data
|
198
|
-
|
218
|
+
|
219
|
+
break if peek_token.first == :BREAK
|
220
|
+
|
221
|
+
data << ' ' if skip :NEWLINE
|
199
222
|
else
|
200
223
|
unget
|
201
224
|
break
|
202
225
|
end
|
203
226
|
end
|
204
227
|
|
228
|
+
paragraph.parts.last.sub!(/ \z/, '') # cleanup
|
229
|
+
|
205
230
|
p :paragraph_end => margin if @debug
|
206
231
|
|
207
232
|
paragraph
|
@@ -221,7 +246,7 @@ class RDoc::Markup::Parser
|
|
221
246
|
|
222
247
|
min_indent = nil
|
223
248
|
generate_leading_spaces = true
|
224
|
-
line = ''
|
249
|
+
line = ''.dup
|
225
250
|
|
226
251
|
until @tokens.empty? do
|
227
252
|
type, data, column, = get
|
@@ -229,7 +254,7 @@ class RDoc::Markup::Parser
|
|
229
254
|
if type == :NEWLINE then
|
230
255
|
line << data
|
231
256
|
verbatim << line
|
232
|
-
line = ''
|
257
|
+
line = ''.dup
|
233
258
|
generate_leading_spaces = true
|
234
259
|
next
|
235
260
|
end
|
@@ -260,7 +285,7 @@ class RDoc::Markup::Parser
|
|
260
285
|
peek_column ||= column + width
|
261
286
|
indent = peek_column - column - width
|
262
287
|
line << ' ' * indent
|
263
|
-
when :TEXT then
|
288
|
+
when :BREAK, :TEXT then
|
264
289
|
line << data
|
265
290
|
else # *LIST_TOKENS
|
266
291
|
list_marker = case type
|
@@ -314,14 +339,19 @@ class RDoc::Markup::Parser
|
|
314
339
|
until @tokens.empty? do
|
315
340
|
type, data, column, = get
|
316
341
|
|
317
|
-
|
342
|
+
case type
|
343
|
+
when :BREAK then
|
344
|
+
parent << RDoc::Markup::BlankLine.new
|
345
|
+
skip :NEWLINE, false
|
346
|
+
next
|
347
|
+
when :NEWLINE then
|
318
348
|
# trailing newlines are skipped below, so this is a blank line
|
319
349
|
parent << RDoc::Markup::BlankLine.new
|
320
350
|
skip :NEWLINE, false
|
321
351
|
next
|
322
352
|
end
|
323
353
|
|
324
|
-
# indentation change: break or
|
354
|
+
# indentation change: break or verbatim
|
325
355
|
if column < indent then
|
326
356
|
unget
|
327
357
|
break
|
@@ -340,7 +370,18 @@ class RDoc::Markup::Parser
|
|
340
370
|
skip :NEWLINE
|
341
371
|
when :TEXT then
|
342
372
|
unget
|
343
|
-
parent
|
373
|
+
parse_text parent, indent
|
374
|
+
when :BLOCKQUOTE then
|
375
|
+
type, _, column = get
|
376
|
+
if type == :NEWLINE
|
377
|
+
type, _, column = get
|
378
|
+
end
|
379
|
+
unget if type
|
380
|
+
bq = RDoc::Markup::BlockQuote.new
|
381
|
+
p :blockquote_start => [data, column] if @debug
|
382
|
+
parse bq, column
|
383
|
+
p :blockquote_end => indent if @debug
|
384
|
+
parent << bq
|
344
385
|
when *LIST_TOKENS then
|
345
386
|
unget
|
346
387
|
parent << build_list(indent)
|
@@ -356,6 +397,13 @@ class RDoc::Markup::Parser
|
|
356
397
|
|
357
398
|
end
|
358
399
|
|
400
|
+
##
|
401
|
+
# Small hook that is overridden by RDoc::TomDoc
|
402
|
+
|
403
|
+
def parse_text parent, indent # :nodoc:
|
404
|
+
parent << build_paragraph(indent)
|
405
|
+
end
|
406
|
+
|
359
407
|
##
|
360
408
|
# Returns the next token on the stream without modifying the stream
|
361
409
|
|
@@ -365,6 +413,55 @@ class RDoc::Markup::Parser
|
|
365
413
|
token
|
366
414
|
end
|
367
415
|
|
416
|
+
##
|
417
|
+
# A simple wrapper of StringScanner that is aware of the current column and lineno
|
418
|
+
|
419
|
+
class MyStringScanner
|
420
|
+
def initialize(input)
|
421
|
+
@line = @column = 0
|
422
|
+
@s = StringScanner.new input
|
423
|
+
end
|
424
|
+
|
425
|
+
def scan(re)
|
426
|
+
ret = @s.scan(re)
|
427
|
+
@column += ret.length if ret
|
428
|
+
ret
|
429
|
+
end
|
430
|
+
|
431
|
+
def unscan(s)
|
432
|
+
@s.pos -= s.bytesize
|
433
|
+
@column -= s.length
|
434
|
+
end
|
435
|
+
|
436
|
+
def pos
|
437
|
+
[@column, @line]
|
438
|
+
end
|
439
|
+
|
440
|
+
def newline!
|
441
|
+
@column = 0
|
442
|
+
@line += 1
|
443
|
+
end
|
444
|
+
|
445
|
+
def eos?
|
446
|
+
@s.eos?
|
447
|
+
end
|
448
|
+
|
449
|
+
def matched
|
450
|
+
@s.matched
|
451
|
+
end
|
452
|
+
|
453
|
+
def [](i)
|
454
|
+
@s[i]
|
455
|
+
end
|
456
|
+
end
|
457
|
+
|
458
|
+
##
|
459
|
+
# Creates the StringScanner
|
460
|
+
|
461
|
+
def setup_scanner input
|
462
|
+
@s = MyStringScanner.new input
|
463
|
+
end
|
464
|
+
|
368
465
|
##
|
369
466
|
# Skips the next token if its type is +token_type+.
|
370
467
|
#
|
@@ -382,52 +479,54 @@ class RDoc::Markup::Parser
|
|
382
479
|
# Turns text +input+ into a stream of tokens
|
383
480
|
|
384
481
|
def tokenize input
|
385
|
-
|
386
|
-
|
387
|
-
@line = 0
|
388
|
-
@line_pos = 0
|
482
|
+
setup_scanner input
|
389
483
|
|
390
|
-
until s.eos? do
|
391
|
-
pos = s.pos
|
484
|
+
until @s.eos? do
|
485
|
+
pos = @s.pos
|
392
486
|
|
393
487
|
# leading spaces will be reflected by the column of the next token
|
394
488
|
# the only thing we loose are trailing spaces at the end of the file
|
395
|
-
next if s.scan(/ +/)
|
489
|
+
next if @s.scan(/ +/)
|
396
490
|
|
397
491
|
# note: after BULLET, LABEL, etc.,
|
398
492
|
# indent will be the column of the next non-newline token
|
399
493
|
|
400
494
|
@tokens << case
|
401
495
|
# [CR]LF => :NEWLINE
|
402
|
-
when s.scan(/\r?\n/) then
|
403
|
-
token = [:NEWLINE, s.matched, *
|
404
|
-
@
|
405
|
-
@line += 1
|
496
|
+
when @s.scan(/\r?\n/) then
|
497
|
+
token = [:NEWLINE, @s.matched, *pos]
|
498
|
+
@s.newline!
|
406
499
|
token
|
407
500
|
# === text => :HEADER then :TEXT
|
408
|
-
when s.scan(/(=+)\s
|
409
|
-
level = s[1].length
|
410
|
-
|
411
|
-
|
412
|
-
|
413
|
-
|
414
|
-
|
501
|
+
when @s.scan(/(=+)(\s*)/) then
|
502
|
+
level = @s[1].length
|
503
|
+
header = [:HEADER, level, *pos]
|
504
|
+
|
505
|
+
if @s[2] =~ /^\r?\n/ then
|
506
|
+
@s.unscan(@s[2])
|
507
|
+
header
|
508
|
+
else
|
509
|
+
pos = @s.pos
|
510
|
+
@s.scan(/.*/)
|
511
|
+
@tokens << header
|
512
|
+
[:TEXT, @s.matched.sub(/\r$/, ''), *pos]
|
513
|
+
end
|
415
514
|
# --- (at least 3) and nothing else on the line => :RULE
|
416
|
-
when s.scan(/(-{3,})
|
417
|
-
[:RULE, s[1].length - 2, *
|
515
|
+
when @s.scan(/(-{3,}) *\r?$/) then
|
516
|
+
[:RULE, @s[1].length - 2, *pos]
|
418
517
|
# * or - followed by white space and text => :BULLET
|
419
|
-
when s.scan(/([*-]) +(\S)/) then
|
420
|
-
s.
|
421
|
-
[:BULLET, s[1], *
|
518
|
+
when @s.scan(/([*-]) +(\S)/) then
|
519
|
+
@s.unscan(@s[2])
|
520
|
+
[:BULLET, @s[1], *pos]
|
422
521
|
# A. text, a. text, 12. text => :UALPHA, :LALPHA, :NUMBER
|
423
|
-
when s.scan(/([a-z]|\d+)\. +(\S)/i) then
|
522
|
+
when @s.scan(/([a-z]|\d+)\. +(\S)/i) then
|
424
523
|
# FIXME if tab(s), the column will be wrong
|
425
524
|
# either support tabs everywhere by first expanding them to
|
426
525
|
# spaces, or assume that they will have been replaced
|
427
526
|
# before (and provide a check for that at least in debug
|
428
527
|
# mode)
|
429
|
-
list_label = s[1]
|
430
|
-
s.
|
528
|
+
list_label = @s[1]
|
529
|
+
@s.unscan(@s[2])
|
431
530
|
list_type =
|
432
531
|
case list_label
|
433
532
|
when /[a-z]/ then :LALPHA
|
@@ -436,29 +535,33 @@ class RDoc::Markup::Parser
|
|
436
535
|
else
|
437
536
|
raise ParseError, "BUG token #{list_label}"
|
438
537
|
end
|
439
|
-
[list_type, list_label, *
|
538
|
+
[list_type, list_label, *pos]
|
440
539
|
# [text] followed by spaces or end of line => :LABEL
|
441
|
-
when s.scan(/\[(.*?)\](
|
442
|
-
[:LABEL, s[1], *
|
540
|
+
when @s.scan(/\[(.*?)\]( +|\r?$)/) then
|
541
|
+
[:LABEL, @s[1], *pos]
|
443
542
|
# text:: followed by spaces or end of line => :NOTE
|
444
|
-
when s.scan(/(.*?)::(
|
445
|
-
[:NOTE, s[1], *
|
543
|
+
when @s.scan(/(.*?)::( +|\r?$)/) then
|
544
|
+
[:NOTE, @s[1], *pos]
|
545
|
+
# >>> followed by end of line => :BLOCKQUOTE
|
546
|
+
when @s.scan(/>>> *(\w+)?$/) then
|
547
|
+
[:BLOCKQUOTE, @s[1], *pos]
|
446
548
|
# anything else: :TEXT
|
447
|
-
else
|
448
|
-
|
549
|
+
else
|
550
|
+
@s.scan(/(.*?)( )?\r?$/)
|
551
|
+
token = [:TEXT, @s[1], *pos]
|
552
|
+
|
553
|
+
if @s[2] then
|
554
|
+
@tokens << token
|
555
|
+
[:BREAK, @s[2], pos[0] + @s[1].length, pos[1]]
|
556
|
+
else
|
557
|
+
token
|
558
|
+
end
|
449
559
|
end
|
450
560
|
end
|
451
561
|
|
452
562
|
self
|
453
563
|
end
|
454
564
|
|
455
|
-
##
|
456
|
-
# Calculates the column and line of the current token based on +offset+.
|
457
|
-
|
458
|
-
def token_pos offset
|
459
|
-
[offset - @line_pos, @line]
|
460
|
-
end
|
461
|
-
|
462
565
|
##
|
463
566
|
# Returns the current token to the token stream
|
464
567
|
|
@@ -470,14 +573,3 @@ class RDoc::Markup::Parser
|
|
470
573
|
end
|
471
574
|
|
472
575
|
end
|
473
|
-
|
474
|
-
require 'rdoc/markup/blank_line'
|
475
|
-
require 'rdoc/markup/document'
|
476
|
-
require 'rdoc/markup/heading'
|
477
|
-
require 'rdoc/markup/list'
|
478
|
-
require 'rdoc/markup/list_item'
|
479
|
-
require 'rdoc/markup/raw'
|
480
|
-
require 'rdoc/markup/paragraph'
|
481
|
-
require 'rdoc/markup/rule'
|
482
|
-
require 'rdoc/markup/verbatim'
|
483
|
-
|