Module: RDoc::TokenStream
- Included in:
- AnyMethod
- Defined in:
- lib/rdoc/token_stream.rb
Overview
A TokenStream is a list of tokens, gathered during the parse of some entity (say a method). Entities populate these streams by being registered with the lexer. Any class can collect tokens by including TokenStream. From the outside, you use such an object by calling the start_collecting_tokens method, followed by calls to add_token and pop_token.
Class Method Summary collapse
-
.to_html(token_stream) ⇒ Object
Converts
token_streamto HTML wrapping various tokens with elements.
Instance Method Summary collapse
-
#add_token(token) ⇒ Object
Adds one
tokento the collected tokens. -
#add_tokens(tokens) ⇒ Object
Adds
tokensto the collected tokens. -
#collect_tokens(language, loader: nil) ⇒ Object
(also: #start_collecting_tokens)
Starts collecting tokens.
-
#pop_token ⇒ Object
Remove the last token from the collected tokens.
-
#source_language ⇒ Object
Returns the source language of the token stream as a string.
-
#token_stream ⇒ Object
Current token stream.
-
#tokens_to_s ⇒ Object
Returns a string representation of the token stream.
Class Method Details
.to_html(token_stream) ⇒ Object
Converts token_stream to HTML wrapping various tokens with
elements. Some tokens types are wrapped in spans
with the given class names. Other token types are not wrapped in spans.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/rdoc/token_stream.rb', line 18 def self.to_html(token_stream) token_stream.map do |t| next unless t style = case t[:kind] when :operator then 'ruby-operator' when :keyword then 'ruby-keyword' when :constant then 'ruby-constant' when :ivar then 'ruby-ivar' when :comment then 'ruby-comment' when :value then 'ruby-value' when :string then 'ruby-string' when :symbol then 'ruby-value' when :x_string then 'ruby-string' when :regexp then 'ruby-regexp' when :identifier then 'ruby-identifier' end text = t[:text] text = CGI.escapeHTML text if style end_with_newline = text.end_with?("\n") text = text.chomp if end_with_newline "<span class=\"#{style}\">#{text}</span>#{"\n" if end_with_newline}" else text end end.join end |
Instance Method Details
#add_token(token) ⇒ Object
Adds one token to the collected tokens
60 61 62 |
# File 'lib/rdoc/token_stream.rb', line 60 def add_token(token) token_stream.push(token) end |
#add_tokens(tokens) ⇒ Object
Adds tokens to the collected tokens
53 54 55 |
# File 'lib/rdoc/token_stream.rb', line 53 def add_tokens(tokens) token_stream.concat(tokens) end |
#collect_tokens(language, loader: nil) ⇒ Object Also known as: start_collecting_tokens
Starts collecting tokens
The optional loader is called once on first access and its result is reused.
69 70 71 72 73 |
# File 'lib/rdoc/token_stream.rb', line 69 def collect_tokens(language, loader: nil) @token_stream = [] @token_stream_loader = loader @token_stream_language = language end |
#pop_token ⇒ Object
Remove the last token from the collected tokens
80 81 82 |
# File 'lib/rdoc/token_stream.rb', line 80 def pop_token token_stream.pop end |
#source_language ⇒ Object
Returns the source language of the token stream as a string
Returns 'c' or 'ruby'
107 108 109 |
# File 'lib/rdoc/token_stream.rb', line 107 def source_language @token_stream_language == :c ? 'c' : 'ruby' end |
#token_stream ⇒ Object
Current token stream
87 88 89 90 91 92 93 |
# File 'lib/rdoc/token_stream.rb', line 87 def token_stream if @token_stream_loader @token_stream = @token_stream_loader.call @token_stream_loader = nil end @token_stream end |
#tokens_to_s ⇒ Object
Returns a string representation of the token stream
98 99 100 |
# File 'lib/rdoc/token_stream.rb', line 98 def tokens_to_s (token_stream or return '').compact.map { |token| token[:text] }.join '' end |