Mercurial > hg > soundsoftware-site
annotate vendor/plugins/coderay-0.9.2/lib/coderay/encoders/xml.rb @ 866:2cd212a468b6 bug_152
Close obsolete branch bug_152
author | Chris Cannam |
---|---|
date | Wed, 11 May 2011 10:08:34 +0100 |
parents | 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 |