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