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.
Files changed (179) hide show
  1. checksums.yaml +5 -5
  2. data/CONTRIBUTING.rdoc +5 -6
  3. data/ExampleMarkdown.md +2 -0
  4. data/ExampleRDoc.rdoc +2 -0
  5. data/History.rdoc +68 -66
  6. data/LEGAL.rdoc +1 -1
  7. data/LICENSE.rdoc +2 -0
  8. data/README.rdoc +18 -6
  9. data/RI.md +842 -0
  10. data/TODO.rdoc +8 -7
  11. data/exe/rdoc +0 -1
  12. data/lib/rdoc/{alias.rb → code_object/alias.rb} +4 -12
  13. data/lib/rdoc/{anon_class.rb → code_object/anon_class.rb} +1 -2
  14. data/lib/rdoc/{any_method.rb → code_object/any_method.rb} +83 -26
  15. data/lib/rdoc/{attr.rb → code_object/attr.rb} +5 -9
  16. data/lib/rdoc/{class_module.rb → code_object/class_module.rb} +112 -24
  17. data/lib/rdoc/{constant.rb → code_object/constant.rb} +4 -5
  18. data/lib/rdoc/{context → code_object/context}/section.rb +13 -83
  19. data/lib/rdoc/{context.rb → code_object/context.rb} +69 -70
  20. data/lib/rdoc/{extend.rb → code_object/extend.rb} +1 -2
  21. data/lib/rdoc/{ghost_method.rb → code_object/ghost_method.rb} +1 -2
  22. data/lib/rdoc/{include.rb → code_object/include.rb} +1 -2
  23. data/lib/rdoc/{meta_method.rb → code_object/meta_method.rb} +1 -2
  24. data/lib/rdoc/{method_attr.rb → code_object/method_attr.rb} +22 -31
  25. data/lib/rdoc/{mixin.rb → code_object/mixin.rb} +1 -2
  26. data/lib/rdoc/{normal_class.rb → code_object/normal_class.rb} +4 -5
  27. data/lib/rdoc/{normal_module.rb → code_object/normal_module.rb} +2 -3
  28. data/lib/rdoc/{require.rb → code_object/require.rb} +2 -3
  29. data/lib/rdoc/{single_class.rb → code_object/single_class.rb} +6 -2
  30. data/lib/rdoc/{top_level.rb → code_object/top_level.rb} +22 -32
  31. data/lib/rdoc/code_object.rb +8 -41
  32. data/lib/rdoc/code_objects.rb +2 -3
  33. data/lib/rdoc/comment.rb +48 -41
  34. data/lib/rdoc/cross_reference.rb +77 -33
  35. data/lib/rdoc/encoding.rb +50 -38
  36. data/lib/rdoc/erb_partial.rb +2 -3
  37. data/lib/rdoc/erbio.rb +4 -5
  38. data/lib/rdoc/generator/darkfish.rb +178 -125
  39. data/lib/rdoc/generator/json_index.rb +9 -22
  40. data/lib/rdoc/generator/markup.rb +6 -17
  41. data/lib/rdoc/generator/pot/message_extractor.rb +4 -4
  42. data/lib/rdoc/generator/pot/po.rb +3 -3
  43. data/lib/rdoc/generator/pot/po_entry.rb +12 -12
  44. data/lib/rdoc/generator/pot.rb +4 -8
  45. data/lib/rdoc/generator/ri.rb +1 -2
  46. data/lib/rdoc/generator/template/darkfish/_footer.rhtml +2 -2
  47. data/lib/rdoc/generator/template/darkfish/_head.rhtml +35 -12
  48. data/lib/rdoc/generator/template/darkfish/_sidebar_classes.rhtml +1 -5
  49. data/lib/rdoc/generator/template/darkfish/_sidebar_extends.rhtml +7 -7
  50. data/lib/rdoc/generator/template/darkfish/_sidebar_includes.rhtml +7 -7
  51. data/lib/rdoc/generator/template/darkfish/_sidebar_installed.rhtml +6 -6
  52. data/lib/rdoc/generator/template/darkfish/_sidebar_methods.rhtml +19 -10
  53. data/lib/rdoc/generator/template/darkfish/_sidebar_pages.rhtml +26 -6
  54. data/lib/rdoc/generator/template/darkfish/_sidebar_parent.rhtml +4 -9
  55. data/lib/rdoc/generator/template/darkfish/_sidebar_search.rhtml +1 -1
  56. data/lib/rdoc/generator/template/darkfish/_sidebar_sections.rhtml +4 -4
  57. data/lib/rdoc/generator/template/darkfish/_sidebar_table_of_contents.rhtml +27 -6
  58. data/lib/rdoc/generator/template/darkfish/_sidebar_toggle.rhtml +3 -0
  59. data/lib/rdoc/generator/template/darkfish/class.rhtml +125 -78
  60. data/lib/rdoc/generator/template/darkfish/css/rdoc.css +430 -339
  61. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Bold.ttf +0 -0
  62. data/lib/rdoc/generator/template/darkfish/fonts/SourceCodePro-Regular.ttf +0 -0
  63. data/lib/rdoc/generator/template/darkfish/index.rhtml +13 -13
  64. data/lib/rdoc/generator/template/darkfish/js/darkfish.js +51 -92
  65. data/lib/rdoc/generator/template/darkfish/js/search.js +35 -34
  66. data/lib/rdoc/generator/template/darkfish/page.rhtml +5 -5
  67. data/lib/rdoc/generator/template/darkfish/servlet_not_found.rhtml +10 -8
  68. data/lib/rdoc/generator/template/darkfish/servlet_root.rhtml +20 -18
  69. data/lib/rdoc/generator/template/darkfish/table_of_contents.rhtml +32 -20
  70. data/lib/rdoc/generator/template/json_index/js/navigation.js +12 -49
  71. data/lib/rdoc/generator/template/json_index/js/searcher.js +6 -6
  72. data/lib/rdoc/generator.rb +6 -6
  73. data/lib/rdoc/i18n/locale.rb +1 -1
  74. data/lib/rdoc/i18n/text.rb +5 -5
  75. data/lib/rdoc/i18n.rb +4 -4
  76. data/lib/rdoc/known_classes.rb +6 -5
  77. data/lib/rdoc/markdown/entities.rb +1 -2
  78. data/lib/rdoc/markdown/literals.kpeg +1 -2
  79. data/lib/rdoc/markdown/literals.rb +99 -50
  80. data/lib/rdoc/markdown.kpeg +115 -58
  81. data/lib/rdoc/markdown.rb +1584 -902
  82. data/lib/rdoc/markup/attr_changer.rb +1 -2
  83. data/lib/rdoc/markup/attr_span.rb +9 -4
  84. data/lib/rdoc/markup/attribute_manager.rb +118 -57
  85. data/lib/rdoc/markup/attributes.rb +7 -8
  86. data/lib/rdoc/markup/blank_line.rb +1 -2
  87. data/lib/rdoc/markup/block_quote.rb +1 -2
  88. data/lib/rdoc/markup/document.rb +1 -2
  89. data/lib/rdoc/markup/formatter.rb +44 -37
  90. data/lib/rdoc/markup/hard_break.rb +1 -2
  91. data/lib/rdoc/markup/heading.rb +11 -6
  92. data/lib/rdoc/markup/include.rb +1 -2
  93. data/lib/rdoc/markup/indented_paragraph.rb +1 -2
  94. data/lib/rdoc/markup/list.rb +1 -2
  95. data/lib/rdoc/markup/list_item.rb +1 -2
  96. data/lib/rdoc/markup/paragraph.rb +1 -2
  97. data/lib/rdoc/markup/parser.rb +90 -48
  98. data/lib/rdoc/markup/pre_process.rb +38 -11
  99. data/lib/rdoc/markup/raw.rb +1 -2
  100. data/lib/rdoc/markup/regexp_handling.rb +40 -0
  101. data/lib/rdoc/markup/rule.rb +1 -2
  102. data/lib/rdoc/markup/table.rb +56 -0
  103. data/lib/rdoc/markup/to_ansi.rb +1 -2
  104. data/lib/rdoc/markup/to_bs.rb +30 -5
  105. data/lib/rdoc/markup/to_html.rb +95 -40
  106. data/lib/rdoc/markup/to_html_crossref.rb +108 -43
  107. data/lib/rdoc/markup/to_html_snippet.rb +13 -11
  108. data/lib/rdoc/markup/to_joined_paragraph.rb +6 -32
  109. data/lib/rdoc/markup/to_label.rb +11 -12
  110. data/lib/rdoc/markup/to_markdown.rb +13 -14
  111. data/lib/rdoc/markup/to_rdoc.rb +49 -31
  112. data/lib/rdoc/markup/to_table_of_contents.rb +2 -2
  113. data/lib/rdoc/markup/to_test.rb +1 -2
  114. data/lib/rdoc/markup/to_tt_only.rb +3 -4
  115. data/lib/rdoc/markup/verbatim.rb +1 -2
  116. data/lib/rdoc/markup.rb +64 -694
  117. data/lib/rdoc/options.rb +226 -44
  118. data/lib/rdoc/parser/c.rb +231 -246
  119. data/lib/rdoc/parser/changelog.rb +169 -23
  120. data/lib/rdoc/parser/markdown.rb +1 -3
  121. data/lib/rdoc/parser/prism_ruby.rb +1092 -0
  122. data/lib/rdoc/parser/rd.rb +1 -2
  123. data/lib/rdoc/parser/ripper_state_lex.rb +302 -0
  124. data/lib/rdoc/parser/ruby.rb +695 -478
  125. data/lib/rdoc/parser/ruby_tools.rb +33 -36
  126. data/lib/rdoc/parser/simple.rb +4 -4
  127. data/lib/rdoc/parser/text.rb +1 -2
  128. data/lib/rdoc/parser.rb +37 -42
  129. data/lib/rdoc/rd/block_parser.rb +708 -57
  130. data/lib/rdoc/rd/block_parser.ry +15 -11
  131. data/lib/rdoc/rd/inline.rb +5 -6
  132. data/lib/rdoc/rd/inline_parser.rb +787 -140
  133. data/lib/rdoc/rd/inline_parser.ry +1 -1
  134. data/lib/rdoc/rd.rb +4 -5
  135. data/lib/rdoc/rdoc.rb +72 -87
  136. data/lib/rdoc/ri/driver.rb +236 -152
  137. data/lib/rdoc/ri/formatter.rb +1 -1
  138. data/lib/rdoc/ri/paths.rb +4 -18
  139. data/lib/rdoc/ri/store.rb +1 -2
  140. data/lib/rdoc/ri/task.rb +2 -2
  141. data/lib/rdoc/ri.rb +5 -6
  142. data/lib/rdoc/rubygems_hook.rb +98 -20
  143. data/lib/rdoc/servlet.rb +30 -20
  144. data/lib/rdoc/stats/normal.rb +24 -18
  145. data/lib/rdoc/stats/quiet.rb +1 -2
  146. data/lib/rdoc/stats/verbose.rb +1 -3
  147. data/lib/rdoc/stats.rb +6 -7
  148. data/lib/rdoc/store.rb +84 -55
  149. data/lib/rdoc/task.rb +35 -10
  150. data/lib/rdoc/text.rb +40 -27
  151. data/lib/rdoc/token_stream.rb +56 -34
  152. data/lib/rdoc/tom_doc.rb +18 -19
  153. data/lib/rdoc/version.rb +10 -0
  154. data/lib/rdoc.rb +80 -56
  155. data/lib/rubygems_plugin.rb +23 -0
  156. data/man/ri.1 +247 -0
  157. metadata +45 -99
  158. data/.document +0 -5
  159. data/.gitignore +0 -13
  160. data/.travis.yml +0 -24
  161. data/Gemfile +0 -3
  162. data/RI.rdoc +0 -57
  163. data/Rakefile +0 -133
  164. data/bin/console +0 -7
  165. data/bin/setup +0 -6
  166. data/lib/gauntlet_rdoc.rb +0 -82
  167. data/lib/rdoc/generator/template/darkfish/.document +0 -0
  168. data/lib/rdoc/generator/template/darkfish/_sidebar_VCS_info.rhtml +0 -19
  169. data/lib/rdoc/generator/template/darkfish/_sidebar_in_files.rhtml +0 -9
  170. data/lib/rdoc/generator/template/darkfish/js/jquery.js +0 -4
  171. data/lib/rdoc/generator/template/json_index/.document +0 -1
  172. data/lib/rdoc/markup/formatter_test_case.rb +0 -764
  173. data/lib/rdoc/markup/inline.rb +0 -2
  174. data/lib/rdoc/markup/special.rb +0 -41
  175. data/lib/rdoc/markup/text_formatter_test_case.rb +0 -115
  176. data/lib/rdoc/ruby_lex.rb +0 -1367
  177. data/lib/rdoc/ruby_token.rb +0 -461
  178. data/lib/rdoc/test_case.rb +0 -204
  179. data/rdoc.gemspec +0 -57
@@ -1,4 +1,4 @@
1
- # frozen_string_literal: false
1
+ # frozen_string_literal: true
2
2
  ##
3
3
  # Parse a RD format file. The parsed RDoc::Markup::Document is attached as a
4
4
  # file comment.
@@ -20,4 +20,3 @@ class RDoc::Parser::RD < RDoc::Parser
20
20
  end
21
21
 
22
22
  end
23
-
@@ -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