module RDoc::Parser::RubyColorizer
Ruby code syntax highlighter. Colorize result is an array of RDoc::Parser::RubyColorizer::ColoredToken Actual color for each token kind is determined elsewhere (e.g., HTML generator)
Constants
- ColoredToken
- OP_TOKENS
-
Prism operator token types except assignment ‘=’
- TOKEN_TYPE_MAP
-
Prism token type to
ColoredTokenkind map
Public Class Methods
Source
# File lib/rdoc/parser/ruby_colorizer.rb, line 49 def colorize(code) result = Prism.parse_lex(code) program_node, unordered_tokens = result.value prism_tokens = unordered_tokens.map(&:first).sort_by! { |token| token.location.start_offset } partial_colorize(code, program_node, prism_tokens, 0, code.bytesize) end
Colorize the entire code and returns colored token stream.
Source
# File lib/rdoc/parser/ruby_colorizer.rb, line 57 def partial_colorize(whole_code, node, prism_tokens, start_offset = nil, end_offset = nil) start_offset ||= node.location.start_offset end_offset ||= node.location.end_offset visitor = NodeColorizeVisitor.new node.accept(visitor) prior_tokens = visitor.tokens.sort_by {|_, start_offset, _| start_offset } normal_tokens = normal_tokens(slice_by_location(prism_tokens, start_offset, end_offset)) colored_tokens = unify_tokens(whole_code, prior_tokens, normal_tokens, start_offset, end_offset) colored_tokens.unshift(ColoredToken.new(:plain, ' ' * node.location.start_column)) if node.location.start_column > 0 colored_tokens end
Colorize partial node in whole_code and returns colored token stream.