Mercurial > hg > soundsoftware-site
comparison vendor/plugins/coderay-0.9.2/lib/coderay/encoders/.svn/text-base/xml.rb.svn-base @ 0:513646585e45
* Import Redmine trunk SVN rev 3859
author | Chris Cannam |
---|---|
date | Fri, 23 Jul 2010 15:52:44 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:513646585e45 |
---|---|
1 module CodeRay | |
2 module Encoders | |
3 | |
4 # = XML Encoder | |
5 # | |
6 # Uses REXML. Very slow. | |
7 class XML < Encoder | |
8 | |
9 include Streamable | |
10 register_for :xml | |
11 | |
12 FILE_EXTENSION = 'xml' | |
13 | |
14 require 'rexml/document' | |
15 | |
16 DEFAULT_OPTIONS = { | |
17 :tab_width => 8, | |
18 :pretty => -1, | |
19 :transitive => false, | |
20 } | |
21 | |
22 protected | |
23 | |
24 def setup options | |
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 @out = '' | |
33 @doc.write @out, options[:pretty], options[:transitive], true | |
34 @out | |
35 end | |
36 | |
37 def text_token text, kind | |
38 if kind == :space | |
39 token = @node | |
40 else | |
41 token = @node.add_element kind.to_s | |
42 end | |
43 text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl| | |
44 case | |
45 when space | |
46 token << REXML::Text.new(space, true) | |
47 when tab | |
48 token << REXML::Text.new(tab, true) | |
49 when nl | |
50 token << REXML::Text.new(nl, true) | |
51 else | |
52 token << REXML::Text.new($&) | |
53 end | |
54 end | |
55 end | |
56 | |
57 def open_token kind | |
58 @node = @node.add_element kind.to_s | |
59 end | |
60 | |
61 def close_token kind | |
62 if @node == @root | |
63 raise 'no token to close!' | |
64 end | |
65 @node = @node.parent | |
66 end | |
67 | |
68 end | |
69 | |
70 end | |
71 end |