comparison vendor/gems/coderay-1.0.0/lib/coderay/encoders/xml.rb @ 909:cbb26bc654de redmine-1.3

Update to Redmine 1.3-stable branch (Redmine SVN rev 8964)
author Chris Cannam
date Fri, 24 Feb 2012 19:09:32 +0000
parents
children
comparison
equal deleted inserted replaced
908:c6c2cbd0afee 909:cbb26bc654de
1 module CodeRay
2 module Encoders
3
4 # = XML Encoder
5 #
6 # Uses REXML. Very slow.
7 class XML < Encoder
8
9 register_for :xml
10
11 FILE_EXTENSION = 'xml'
12
13 autoload :REXML, 'rexml/document'
14
15 DEFAULT_OPTIONS = {
16 :tab_width => 8,
17 :pretty => -1,
18 :transitive => false,
19 }
20
21 protected
22 def setup options
23 super
24
25 @doc = REXML::Document.new
26 @doc << REXML::XMLDecl.new
27 @tab_width = options[:tab_width]
28 @root = @node = @doc.add_element('coderay-tokens')
29 end
30
31 def finish options
32 @doc.write @out, options[:pretty], options[:transitive], true
33
34 super
35 end
36
37 public
38 def text_token text, kind
39 if kind == :space
40 token = @node
41 else
42 token = @node.add_element kind.to_s
43 end
44 text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl|
45 case
46 when space
47 token << REXML::Text.new(space, true)
48 when tab
49 token << REXML::Text.new(tab, true)
50 when nl
51 token << REXML::Text.new(nl, true)
52 else
53 token << REXML::Text.new($&)
54 end
55 end
56 end
57
58 def begin_group kind
59 @node = @node.add_element kind.to_s
60 end
61
62 def end_group kind
63 if @node == @root
64 raise 'no token to close!'
65 end
66 @node = @node.parent
67 end
68
69 end
70
71 end
72 end