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