annotate vendor/gems/coderay-0.9.7/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base @ 210:0579821a129a
Update to Redmine trunk rev 4802
author |
Chris Cannam |
date |
Tue, 08 Feb 2011 13:51:46 +0000 |
parents |
vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb@513646585e45 |
children |
|
rev |
line source |
Chris@0
|
1 module CodeRay
|
Chris@0
|
2 module Encoders
|
Chris@0
|
3
|
Chris@0
|
4 # = XML Encoder
|
Chris@0
|
5 #
|
Chris@0
|
6 # Uses REXML. Very slow.
|
Chris@0
|
7 class XML < Encoder
|
Chris@0
|
8
|
Chris@0
|
9 include Streamable
|
Chris@0
|
10 register_for :xml
|
Chris@0
|
11
|
Chris@0
|
12 FILE_EXTENSION = 'xml'
|
Chris@0
|
13
|
Chris@0
|
14 require 'rexml/document'
|
Chris@0
|
15
|
Chris@0
|
16 DEFAULT_OPTIONS = {
|
Chris@0
|
17 :tab_width => 8,
|
Chris@0
|
18 :pretty => -1,
|
Chris@0
|
19 :transitive => false,
|
Chris@0
|
20 }
|
Chris@0
|
21
|
Chris@0
|
22 protected
|
Chris@0
|
23
|
Chris@0
|
24 def setup options
|
Chris@0
|
25 @doc = REXML::Document.new
|
Chris@0
|
26 @doc << REXML::XMLDecl.new
|
Chris@0
|
27 @tab_width = options[:tab_width]
|
Chris@0
|
28 @root = @node = @doc.add_element('coderay-tokens')
|
Chris@0
|
29 end
|
Chris@0
|
30
|
Chris@0
|
31 def finish options
|
Chris@0
|
32 @out = ''
|
Chris@0
|
33 @doc.write @out, options[:pretty], options[:transitive], true
|
Chris@0
|
34 @out
|
Chris@0
|
35 end
|
Chris@0
|
36
|
Chris@0
|
37 def text_token text, kind
|
Chris@0
|
38 if kind == :space
|
Chris@0
|
39 token = @node
|
Chris@0
|
40 else
|
Chris@0
|
41 token = @node.add_element kind.to_s
|
Chris@0
|
42 end
|
Chris@0
|
43 text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl|
|
Chris@0
|
44 case
|
Chris@0
|
45 when space
|
Chris@0
|
46 token << REXML::Text.new(space, true)
|
Chris@0
|
47 when tab
|
Chris@0
|
48 token << REXML::Text.new(tab, true)
|
Chris@0
|
49 when nl
|
Chris@0
|
50 token << REXML::Text.new(nl, true)
|
Chris@0
|
51 else
|
Chris@0
|
52 token << REXML::Text.new($&)
|
Chris@0
|
53 end
|
Chris@0
|
54 end
|
Chris@0
|
55 end
|
Chris@0
|
56
|
Chris@0
|
57 def open_token kind
|
Chris@0
|
58 @node = @node.add_element kind.to_s
|
Chris@0
|
59 end
|
Chris@0
|
60
|
Chris@0
|
61 def close_token kind
|
Chris@0
|
62 if @node == @root
|
Chris@0
|
63 raise 'no token to close!'
|
Chris@0
|
64 end
|
Chris@0
|
65 @node = @node.parent
|
Chris@0
|
66 end
|
Chris@0
|
67
|
Chris@0
|
68 end
|
Chris@0
|
69
|
Chris@0
|
70 end
|
Chris@0
|
71 end
|