rdoc 5.1.0 → 6.13.1
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 +5 -5
- data/CONTRIBUTING.rdoc +5 -6
- data/ExampleMarkdown.md +2 -0
- data/ExampleRDoc.rdoc +2 -0
- data/History.rdoc +68 -66
- data/LEGAL.rdoc +1 -1
- data/LICENSE.rdoc +2 -0
- data/README.rdoc +18 -6
- data/RI.md +842 -0
- data/TODO.rdoc +8 -7
- data/exe/rdoc +0 -1
- data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
- data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
- data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
- data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
- data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
- data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
- data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
- data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
- data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
- data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
- data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
- data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
- data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
- data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
- data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
- data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
- data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
- data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
- data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
- data/lib/rdoc/code_object.rb +8 -41
- data/lib/rdoc/code_objects.rb +2 -3
- data/lib/rdoc/comment.rb +48 -41
- data/lib/rdoc/cross_reference.rb +77 -33
- data/lib/rdoc/encoding.rb +50 -38
- data/lib/rdoc/erb_partial.rb +2 -3
- data/lib/rdoc/erbio.rb +4 -5
- data/lib/rdoc/generator/darkfish.rb +178 -125
- data/lib/rdoc/generator/json_index.rb +9 -22
- data/lib/rdoc/generator/markup.rb +6 -17
- data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
- data/lib/rdoc/generator/pot/po.rb +3 -3
- data/lib/rdoc/generator/pot/po_entry.rb +12 -12
- data/lib/rdoc/generator/pot.rb +4 -8
- data/lib/rdoc/generator/ri.rb +1 -2
- data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
- data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
- data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
- data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
- data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
- data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
- data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
- data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
- data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
- data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
- data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
- data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
- 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/index.rhtml +13 -13
- data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
- data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
- data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
- data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
- data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
- data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
- data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
- data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
- data/lib/rdoc/generator.rb +6 -6
- data/lib/rdoc/i18n/locale.rb +1 -1
- data/lib/rdoc/i18n/text.rb +5 -5
- data/lib/rdoc/i18n.rb +4 -4
- data/lib/rdoc/known_classes.rb +6 -5
- data/lib/rdoc/markdown/entities.rb +1 -2
- data/lib/rdoc/markdown/literals.kpeg +1 -2
- data/lib/rdoc/markdown/literals.rb +99 -50
- data/lib/rdoc/markdown.kpeg +115 -58
- data/lib/rdoc/markdown.rb +1584 -902
- data/lib/rdoc/markup/attr_changer.rb +1 -2
- data/lib/rdoc/markup/attr_span.rb +9 -4
- data/lib/rdoc/markup/attribute_manager.rb +118 -57
- data/lib/rdoc/markup/attributes.rb +7 -8
- data/lib/rdoc/markup/blank_line.rb +1 -2
- data/lib/rdoc/markup/block_quote.rb +1 -2
- data/lib/rdoc/markup/document.rb +1 -2
- data/lib/rdoc/markup/formatter.rb +44 -37
- data/lib/rdoc/markup/hard_break.rb +1 -2
- data/lib/rdoc/markup/heading.rb +11 -6
- data/lib/rdoc/markup/include.rb +1 -2
- data/lib/rdoc/markup/indented_paragraph.rb +1 -2
- data/lib/rdoc/markup/list.rb +1 -2
- data/lib/rdoc/markup/list_item.rb +1 -2
- data/lib/rdoc/markup/paragraph.rb +1 -2
- data/lib/rdoc/markup/parser.rb +90 -48
- data/lib/rdoc/markup/pre_process.rb +38 -11
- data/lib/rdoc/markup/raw.rb +1 -2
- data/lib/rdoc/markup/regexp_handling.rb +40 -0
- data/lib/rdoc/markup/rule.rb +1 -2
- data/lib/rdoc/markup/table.rb +56 -0
- data/lib/rdoc/markup/to_ansi.rb +1 -2
- data/lib/rdoc/markup/to_bs.rb +30 -5
- data/lib/rdoc/markup/to_html.rb +95 -40
- data/lib/rdoc/markup/to_html_crossref.rb +108 -43
- data/lib/rdoc/markup/to_html_snippet.rb +13 -11
- data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
- data/lib/rdoc/markup/to_label.rb +11 -12
- data/lib/rdoc/markup/to_markdown.rb +13 -14
- data/lib/rdoc/markup/to_rdoc.rb +49 -31
- data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
- data/lib/rdoc/markup/to_test.rb +1 -2
- data/lib/rdoc/markup/to_tt_only.rb +3 -4
- data/lib/rdoc/markup/verbatim.rb +1 -2
- data/lib/rdoc/markup.rb +64 -694
- data/lib/rdoc/options.rb +226 -44
- data/lib/rdoc/parser/c.rb +231 -246
- data/lib/rdoc/parser/changelog.rb +169 -23
- data/lib/rdoc/parser/markdown.rb +1 -3
- data/lib/rdoc/parser/prism_ruby.rb +1092 -0
- data/lib/rdoc/parser/rd.rb +1 -2
- data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
- data/lib/rdoc/parser/ruby.rb +695 -478
- data/lib/rdoc/parser/ruby_tools.rb +33 -36
- data/lib/rdoc/parser/simple.rb +4 -4
- data/lib/rdoc/parser/text.rb +1 -2
- data/lib/rdoc/parser.rb +37 -42
- data/lib/rdoc/rd/block_parser.rb +708 -57
- data/lib/rdoc/rd/block_parser.ry +15 -11
- data/lib/rdoc/rd/inline.rb +5 -6
- data/lib/rdoc/rd/inline_parser.rb +787 -140
- data/lib/rdoc/rd/inline_parser.ry +1 -1
- data/lib/rdoc/rd.rb +4 -5
- data/lib/rdoc/rdoc.rb +72 -87
- data/lib/rdoc/ri/driver.rb +236 -152
- data/lib/rdoc/ri/formatter.rb +1 -1
- data/lib/rdoc/ri/paths.rb +4 -18
- data/lib/rdoc/ri/store.rb +1 -2
- data/lib/rdoc/ri/task.rb +2 -2
- data/lib/rdoc/ri.rb +5 -6
- data/lib/rdoc/rubygems_hook.rb +98 -20
- data/lib/rdoc/servlet.rb +30 -20
- data/lib/rdoc/stats/normal.rb +24 -18
- data/lib/rdoc/stats/quiet.rb +1 -2
- data/lib/rdoc/stats/verbose.rb +1 -3
- data/lib/rdoc/stats.rb +6 -7
- data/lib/rdoc/store.rb +84 -55
- data/lib/rdoc/task.rb +35 -10
- data/lib/rdoc/text.rb +40 -27
- data/lib/rdoc/token_stream.rb +56 -34
- data/lib/rdoc/tom_doc.rb +18 -19
- data/lib/rdoc/version.rb +10 -0
- data/lib/rdoc.rb +80 -56
- data/lib/rubygems_plugin.rb +23 -0
- data/man/ri.1 +247 -0
- metadata +45 -99
- data/.document +0 -5
- data/.gitignore +0 -13
- data/.travis.yml +0 -24
- data/Gemfile +0 -3
- data/RI.rdoc +0 -57
- data/Rakefile +0 -133
- data/bin/console +0 -7
- data/bin/setup +0 -6
- data/lib/gauntlet_rdoc.rb +0 -82
- data/lib/rdoc/generator/template/darkfish/.document +0 -0
- data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
- data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
- data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
- data/lib/rdoc/generator/template/json_index/.document +0 -1
- data/lib/rdoc/markup/formatter_test_case.rb +0 -764
- data/lib/rdoc/markup/inline.rb +0 -2
- data/lib/rdoc/markup/special.rb +0 -41
- data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
- data/lib/rdoc/ruby_lex.rb +0 -1367
- data/lib/rdoc/ruby_token.rb +0 -461
- data/lib/rdoc/test_case.rb +0 -204
- data/rdoc.gemspec +0 -57
data/lib/rdoc/parser/rd.rb
CHANGED
@@ -0,0 +1,302 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'ripper'
|
3
|
+
|
4
|
+
##
|
5
|
+
# Wrapper for Ripper lex states
|
6
|
+
|
7
|
+
class RDoc::Parser::RipperStateLex
|
8
|
+
# :stopdoc:
|
9
|
+
|
10
|
+
Token = Struct.new(:line_no, :char_no, :kind, :text, :state)
|
11
|
+
|
12
|
+
EXPR_END = Ripper::EXPR_END
|
13
|
+
EXPR_ENDFN = Ripper::EXPR_ENDFN
|
14
|
+
EXPR_ARG = Ripper::EXPR_ARG
|
15
|
+
EXPR_FNAME = Ripper::EXPR_FNAME
|
16
|
+
|
17
|
+
class InnerStateLex < Ripper::Filter
|
18
|
+
def initialize(code)
|
19
|
+
super(code)
|
20
|
+
end
|
21
|
+
|
22
|
+
def on_default(event, tok, data)
|
23
|
+
data << Token.new(lineno, column, event, tok, state)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def get_squashed_tk
|
28
|
+
if @buf.empty?
|
29
|
+
tk = @tokens.shift
|
30
|
+
else
|
31
|
+
tk = @buf.shift
|
32
|
+
end
|
33
|
+
return nil if tk.nil?
|
34
|
+
case tk[:kind]
|
35
|
+
when :on_symbeg then
|
36
|
+
tk = get_symbol_tk(tk)
|
37
|
+
when :on_tstring_beg then
|
38
|
+
tk = get_string_tk(tk)
|
39
|
+
when :on_backtick then
|
40
|
+
if (tk[:state] & (EXPR_FNAME | EXPR_ENDFN)) != 0
|
41
|
+
tk[:kind] = :on_ident
|
42
|
+
tk[:state] = Ripper::Lexer::State.new(EXPR_ARG)
|
43
|
+
else
|
44
|
+
tk = get_string_tk(tk)
|
45
|
+
end
|
46
|
+
when :on_regexp_beg then
|
47
|
+
tk = get_regexp_tk(tk)
|
48
|
+
when :on_embdoc_beg then
|
49
|
+
tk = get_embdoc_tk(tk)
|
50
|
+
when :on_heredoc_beg then
|
51
|
+
@heredoc_queue << retrieve_heredoc_info(tk)
|
52
|
+
when :on_nl, :on_ignored_nl, :on_comment, :on_heredoc_end then
|
53
|
+
if !@heredoc_queue.empty?
|
54
|
+
get_heredoc_tk(*@heredoc_queue.shift)
|
55
|
+
elsif tk[:text].nil? # :on_ignored_nl sometimes gives nil
|
56
|
+
tk[:text] = ''
|
57
|
+
end
|
58
|
+
when :on_words_beg then
|
59
|
+
tk = get_words_tk(tk)
|
60
|
+
when :on_qwords_beg then
|
61
|
+
tk = get_words_tk(tk)
|
62
|
+
when :on_symbols_beg then
|
63
|
+
tk = get_words_tk(tk)
|
64
|
+
when :on_qsymbols_beg then
|
65
|
+
tk = get_words_tk(tk)
|
66
|
+
when :on_op then
|
67
|
+
if '&.' == tk[:text]
|
68
|
+
tk[:kind] = :on_period
|
69
|
+
else
|
70
|
+
tk = get_op_tk(tk)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
tk
|
74
|
+
end
|
75
|
+
|
76
|
+
private def get_symbol_tk(tk)
|
77
|
+
is_symbol = true
|
78
|
+
symbol_tk = Token.new(tk.line_no, tk.char_no, :on_symbol)
|
79
|
+
if ":'" == tk[:text] or ':"' == tk[:text] or tk[:text].start_with?('%s')
|
80
|
+
tk1 = get_string_tk(tk)
|
81
|
+
symbol_tk[:text] = tk1[:text]
|
82
|
+
symbol_tk[:state] = tk1[:state]
|
83
|
+
else
|
84
|
+
case (tk1 = get_squashed_tk)[:kind]
|
85
|
+
when :on_ident
|
86
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
87
|
+
symbol_tk[:state] = tk1[:state]
|
88
|
+
when :on_tstring_content
|
89
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
90
|
+
symbol_tk[:state] = get_squashed_tk[:state] # skip :on_tstring_end
|
91
|
+
when :on_tstring_end
|
92
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
93
|
+
symbol_tk[:state] = tk1[:state]
|
94
|
+
when :on_op
|
95
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
96
|
+
symbol_tk[:state] = tk1[:state]
|
97
|
+
when :on_ivar
|
98
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
99
|
+
symbol_tk[:state] = tk1[:state]
|
100
|
+
when :on_cvar
|
101
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
102
|
+
symbol_tk[:state] = tk1[:state]
|
103
|
+
when :on_gvar
|
104
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
105
|
+
symbol_tk[:state] = tk1[:state]
|
106
|
+
when :on_const
|
107
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
108
|
+
symbol_tk[:state] = tk1[:state]
|
109
|
+
when :on_kw
|
110
|
+
symbol_tk[:text] = ":#{tk1[:text]}"
|
111
|
+
symbol_tk[:state] = tk1[:state]
|
112
|
+
else
|
113
|
+
is_symbol = false
|
114
|
+
tk = tk1
|
115
|
+
end
|
116
|
+
end
|
117
|
+
if is_symbol
|
118
|
+
tk = symbol_tk
|
119
|
+
end
|
120
|
+
tk
|
121
|
+
end
|
122
|
+
|
123
|
+
private def get_string_tk(tk)
|
124
|
+
string = tk[:text]
|
125
|
+
state = nil
|
126
|
+
kind = :on_tstring
|
127
|
+
loop do
|
128
|
+
inner_str_tk = get_squashed_tk
|
129
|
+
if inner_str_tk.nil?
|
130
|
+
break
|
131
|
+
elsif :on_tstring_end == inner_str_tk[:kind]
|
132
|
+
string = string + inner_str_tk[:text]
|
133
|
+
state = inner_str_tk[:state]
|
134
|
+
break
|
135
|
+
elsif :on_label_end == inner_str_tk[:kind]
|
136
|
+
string = string + inner_str_tk[:text]
|
137
|
+
state = inner_str_tk[:state]
|
138
|
+
kind = :on_symbol
|
139
|
+
break
|
140
|
+
else
|
141
|
+
string = string + inner_str_tk[:text]
|
142
|
+
if :on_embexpr_beg == inner_str_tk[:kind] then
|
143
|
+
kind = :on_dstring if :on_tstring == kind
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
Token.new(tk.line_no, tk.char_no, kind, string, state)
|
148
|
+
end
|
149
|
+
|
150
|
+
private def get_regexp_tk(tk)
|
151
|
+
string = tk[:text]
|
152
|
+
state = nil
|
153
|
+
loop do
|
154
|
+
inner_str_tk = get_squashed_tk
|
155
|
+
if inner_str_tk.nil?
|
156
|
+
break
|
157
|
+
elsif :on_regexp_end == inner_str_tk[:kind]
|
158
|
+
string = string + inner_str_tk[:text]
|
159
|
+
state = inner_str_tk[:state]
|
160
|
+
break
|
161
|
+
else
|
162
|
+
string = string + inner_str_tk[:text]
|
163
|
+
end
|
164
|
+
end
|
165
|
+
Token.new(tk.line_no, tk.char_no, :on_regexp, string, state)
|
166
|
+
end
|
167
|
+
|
168
|
+
private def get_embdoc_tk(tk)
|
169
|
+
string = tk[:text]
|
170
|
+
until :on_embdoc_end == (embdoc_tk = get_squashed_tk)[:kind] do
|
171
|
+
string = string + embdoc_tk[:text]
|
172
|
+
end
|
173
|
+
string = string + embdoc_tk[:text]
|
174
|
+
Token.new(tk.line_no, tk.char_no, :on_embdoc, string, embdoc_tk.state)
|
175
|
+
end
|
176
|
+
|
177
|
+
private def get_heredoc_tk(heredoc_name, indent)
|
178
|
+
string = ''
|
179
|
+
start_tk = nil
|
180
|
+
prev_tk = nil
|
181
|
+
until heredoc_end?(heredoc_name, indent, tk = @tokens.shift) do
|
182
|
+
start_tk = tk unless start_tk
|
183
|
+
if (prev_tk.nil? or "\n" == prev_tk[:text][-1]) and 0 != tk[:char_no]
|
184
|
+
string = string + (' ' * tk[:char_no])
|
185
|
+
end
|
186
|
+
string = string + tk[:text]
|
187
|
+
prev_tk = tk
|
188
|
+
end
|
189
|
+
start_tk = tk unless start_tk
|
190
|
+
prev_tk = tk unless prev_tk
|
191
|
+
@buf.unshift tk # closing heredoc
|
192
|
+
heredoc_tk = Token.new(start_tk.line_no, start_tk.char_no, :on_heredoc, string, prev_tk.state)
|
193
|
+
@buf.unshift heredoc_tk
|
194
|
+
end
|
195
|
+
|
196
|
+
private def retrieve_heredoc_info(tk)
|
197
|
+
name = tk[:text].gsub(/\A<<[-~]?(['"`]?)(.+)\1\z/, '\2')
|
198
|
+
indent = tk[:text] =~ /\A<<[-~]/
|
199
|
+
[name, indent]
|
200
|
+
end
|
201
|
+
|
202
|
+
private def heredoc_end?(name, indent, tk)
|
203
|
+
result = false
|
204
|
+
if :on_heredoc_end == tk[:kind] then
|
205
|
+
tk_name = tk[:text].chomp
|
206
|
+
tk_name.lstrip! if indent
|
207
|
+
if name == tk_name
|
208
|
+
result = true
|
209
|
+
end
|
210
|
+
end
|
211
|
+
result
|
212
|
+
end
|
213
|
+
|
214
|
+
private def get_words_tk(tk)
|
215
|
+
string = ''
|
216
|
+
start_token = tk[:text]
|
217
|
+
start_quote = tk[:text].rstrip[-1]
|
218
|
+
line_no = tk[:line_no]
|
219
|
+
char_no = tk[:char_no]
|
220
|
+
state = tk[:state]
|
221
|
+
end_quote =
|
222
|
+
case start_quote
|
223
|
+
when ?( then ?)
|
224
|
+
when ?[ then ?]
|
225
|
+
when ?{ then ?}
|
226
|
+
when ?< then ?>
|
227
|
+
else start_quote
|
228
|
+
end
|
229
|
+
end_token = nil
|
230
|
+
loop do
|
231
|
+
tk = get_squashed_tk
|
232
|
+
if tk.nil?
|
233
|
+
end_token = end_quote
|
234
|
+
break
|
235
|
+
elsif :on_tstring_content == tk[:kind] then
|
236
|
+
string += tk[:text]
|
237
|
+
elsif :on_words_sep == tk[:kind] or :on_tstring_end == tk[:kind] then
|
238
|
+
if end_quote == tk[:text].strip then
|
239
|
+
end_token = tk[:text]
|
240
|
+
break
|
241
|
+
else
|
242
|
+
string += tk[:text]
|
243
|
+
end
|
244
|
+
else
|
245
|
+
string += tk[:text]
|
246
|
+
end
|
247
|
+
end
|
248
|
+
text = "#{start_token}#{string}#{end_token}"
|
249
|
+
Token.new(line_no, char_no, :on_dstring, text, state)
|
250
|
+
end
|
251
|
+
|
252
|
+
private def get_op_tk(tk)
|
253
|
+
redefinable_operators = %w[! != !~ % & * ** + +@ - -@ / < << <= <=> == === =~ > >= >> [] []= ^ ` | ~]
|
254
|
+
if redefinable_operators.include?(tk[:text]) and tk[:state] == EXPR_ARG then
|
255
|
+
tk[:state] = Ripper::Lexer::State.new(EXPR_ARG)
|
256
|
+
tk[:kind] = :on_ident
|
257
|
+
elsif tk[:text] =~ /^[-+]$/ then
|
258
|
+
tk_ahead = get_squashed_tk
|
259
|
+
case tk_ahead[:kind]
|
260
|
+
when :on_int, :on_float, :on_rational, :on_imaginary then
|
261
|
+
tk[:text] += tk_ahead[:text]
|
262
|
+
tk[:kind] = tk_ahead[:kind]
|
263
|
+
tk[:state] = tk_ahead[:state]
|
264
|
+
when :on_heredoc_beg, :on_tstring, :on_dstring # frozen/non-frozen string literal
|
265
|
+
tk[:text] += tk_ahead[:text]
|
266
|
+
tk[:kind] = tk_ahead[:kind]
|
267
|
+
tk[:state] = tk_ahead[:state]
|
268
|
+
else
|
269
|
+
@buf.unshift tk_ahead
|
270
|
+
end
|
271
|
+
end
|
272
|
+
tk
|
273
|
+
end
|
274
|
+
|
275
|
+
# :startdoc:
|
276
|
+
|
277
|
+
# New lexer for +code+.
|
278
|
+
def initialize(code)
|
279
|
+
@buf = []
|
280
|
+
@heredoc_queue = []
|
281
|
+
@inner_lex = InnerStateLex.new(code)
|
282
|
+
@tokens = @inner_lex.parse([])
|
283
|
+
end
|
284
|
+
|
285
|
+
# Returns tokens parsed from +code+.
|
286
|
+
def self.parse(code)
|
287
|
+
lex = self.new(code)
|
288
|
+
tokens = []
|
289
|
+
begin
|
290
|
+
while tk = lex.get_squashed_tk
|
291
|
+
tokens.push tk
|
292
|
+
end
|
293
|
+
rescue StopIteration
|
294
|
+
end
|
295
|
+
tokens
|
296
|
+
end
|
297
|
+
|
298
|
+
# Returns +true+ if lex state will be +END+ after +token+.
|
299
|
+
def self.end?(token)
|
300
|
+
(token[:state] & EXPR_END)
|
301
|
+
end
|
302
|
+
end
|