Sha256: f866fcbff397e14304e87c32f1f3d9a64713b4a0943452619523009ae3c810de
Contents?: true
Size: 1.33 KB
Versions: 2
Compression:
Stored size: 1.33 KB
Contents
module CodeRay module Encoders # = XML Encoder # # Uses REXML. Very slow. class XML < Encoder register_for :xml FILE_EXTENSION = 'xml' require 'rexml/document' DEFAULT_OPTIONS = { :tab_width => 8, :pretty => -1, :transitive => false, } protected def setup options @doc = REXML::Document.new @doc << REXML::XMLDecl.new @tab_width = options[:tab_width] @root = @node = @doc.add_element('coderay-tokens') end def finish options @out = '' @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 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 end end def begin_group kind @node = @node.add_element kind.to_s end def end_group kind if @node == @root raise 'no token to close!' end @node = @node.parent end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
coderay-1.0.0.738.pre | ./lib/coderay/encoders/xml.rb |
coderay-1.0.0.598.pre | ./lib/coderay/encoders/xml.rb |