Class | CodeRay::Scanners::Raydebug |
In: |
lib/coderay/scanners/raydebug.rb
|
Parent: | Scanner |
Parses the output of the Encoders::Debug encoder.
# File lib/coderay/scanners/raydebug.rb, line 15 15: def scan_tokens encoder, options 16: 17: opened_tokens = [] 18: 19: until eos? 20: 21: if match = scan(/\s+/) 22: encoder.text_token match, :space 23: 24: elsif match = scan(/ (\w+) \( ( [^\)\\]* ( \\. [^\)\\]* )* ) /x) 25: kind = self[1] 26: encoder.text_token kind, :class 27: encoder.text_token '(', :operator 28: match = self[2] 29: encoder.text_token match, kind.to_sym 30: encoder.text_token match, :operator if match = scan(/\)/) 31: 32: elsif match = scan(/ (\w+) ([<\[]) /x) 33: kind = self[1] 34: case self[2] 35: when '<' 36: encoder.text_token kind, :class 37: when '[' 38: encoder.text_token kind, :class 39: else 40: raise 'CodeRay bug: This case should not be reached.' 41: end 42: kind = kind.to_sym 43: opened_tokens << kind 44: encoder.begin_group kind 45: encoder.text_token self[2], :operator 46: 47: elsif !opened_tokens.empty? && match = scan(/ [>\]] /x) 48: encoder.text_token match, :operator 49: encoder.end_group opened_tokens.pop 50: 51: else 52: encoder.text_token getch, :space 53: 54: end 55: 56: end 57: 58: encoder.end_group opened_tokens.pop until opened_tokens.empty? 59: 60: encoder 61: end