summaryrefslogtreecommitdiff
path: root/lib/coderay/encoders/debug.rb
blob: d6aac8b81ab131f1e2930a4a3ccf0defeddae833 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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
module CodeRay
module Encoders

	# = Debug Encoder
	#
	# Fast encoder producing simple debug output.
	#
	# It is readable and diff-able and is used for testing.
	#
	# You cannot fully restore the tokens information from the
	# output, because consecutive :space tokens are merged.
	# Use Tokens#dump for caching purposes.
	class Debug < Encoder

		include Streamable
		register_for :debug

		FILE_EXTENSION = 'raydebug'

	protected
		def text_token text, kind
			@out <<
				if kind == :space
					text
				else
					text = text.gsub(/[)\\]/, '\\\\\0')
					"#{kind}(#{text})"
				end					
		end

		def block_token action, kind
			@out << super
		end

		def open_token kind
			"#{kind}<"
		end

		def close_token kind
			">"
		end

	end

end
end