From 0d4ddc9f66eb3b4dc3f6e7cb191b605b348e8189 Mon Sep 17 00:00:00 2001 From: murphy Date: Sun, 16 Apr 2006 03:20:37 +0000 Subject: Re-indented everything. Sorry to break the blame chain. --- lib/coderay/encoders/xml.rb | 105 ++++++++++++++++++++++---------------------- 1 file changed, 53 insertions(+), 52 deletions(-) (limited to 'lib/coderay/encoders/xml.rb') diff --git a/lib/coderay/encoders/xml.rb b/lib/coderay/encoders/xml.rb index 5596f46..246fe0a 100644 --- a/lib/coderay/encoders/xml.rb +++ b/lib/coderay/encoders/xml.rb @@ -1,70 +1,71 @@ module CodeRay - module Encoders +module Encoders - # = Debug Encoder - class XML < Encoder + # = XML Encoder + # + # Uses REXML. Very slow. + class XML < Encoder - include Streamable - register_for :xml + include Streamable + register_for :xml - FILE_EXTENSION = 'xml' + FILE_EXTENSION = 'xml' - require 'rexml/document' + require 'rexml/document' - DEFAULT_OPTIONS = { - :tab_width => 8, - :pretty => -1, - :transitive => false, - } + DEFAULT_OPTIONS = { + :tab_width => 8, + :pretty => -1, + :transitive => false, + } - protected - - def setup options - @out = '' - @doc = REXML::Document.new - @doc << REXML::XMLDecl.new - @tab_width = options[:tab_width] - @root = @node = @doc.add_element('coderay-tokens') - end - - def finish options - @doc.write @out, options[:pretty], options[:transitive], true - @out + protected + + def setup options + @out = '' + @doc = REXML::Document.new + @doc << REXML::XMLDecl.new + @tab_width = options[:tab_width] + @root = @node = @doc.add_element('coderay-tokens') + end + + def finish options + @doc.write @out, options[:pretty], options[:transitive], true + @out + end + + def text_token text, kind + if kind == :space + token = @node + else + token = @node.add_element kind.to_s end - - def text_token text, kind - if kind == :space - token = @node + text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl| + case + when space + token << REXML::Text.new(space, true) + when tab + token << REXML::Text.new(tab, true) + when nl + token << REXML::Text.new(nl, true) else - token = @node.add_element kind.to_s - end - text.scan(/(\x20+)|(\t+)|(\n)|[^\x20\t\n]+/) do |space, tab, nl| - case - when space - token << REXML::Text.new(space, true) - when tab - token << REXML::Text.new(tab, true) - when nl - token << REXML::Text.new(nl, true) - else - token << REXML::Text.new($&) - end + token << REXML::Text.new($&) end end + end - def open_token kind - @node = @node.add_element kind.to_s - end + def open_token kind + @node = @node.add_element kind.to_s + end - def close_token kind - if @node == @root - raise 'no token to close!' - end - @node = @node.parent + def close_token kind + if @node == @root + raise 'no token to close!' end - + @node = @node.parent end end + +end end - -- cgit v1.2.1