1
0
Fork 0
This repository has been archived on 2019-12-19. You can view files and clone it, but you cannot make any changes to it's state, such as pushing and creating new issues, pull requests or comments.
neinomaten/vendor/htree/htree/raw_string.rb

127 lines
2.5 KiB
Ruby

require 'htree/modules'
require 'htree/fstr'
module HTree
module Node
# raw_string returns a source string recorded by parsing.
# It returns +nil+ if the node is constructed not via parsing.
def raw_string
catch(:raw_string_tag) {
return raw_string_internal('')
}
nil
end
end
# :stopdoc:
class Doc
def raw_string_internal(result)
@children.each {|n|
n.raw_string_internal(result)
}
end
end
class Elem
def raw_string_internal(result)
@stag.raw_string_internal(result)
@children.each {|n| n.raw_string_internal(result) }
@etag.raw_string_internal(result) if @etag
end
end
module Tag
def init_raw_string() @raw_string = nil end
def raw_string=(arg) @raw_string = HTree.frozen_string(arg) end
def raw_string_internal(result)
throw :raw_string_tag if !@raw_string
result << @raw_string
end
end
module Leaf
def init_raw_string() @raw_string = nil end
def raw_string=(arg) @raw_string = HTree.frozen_string(arg) end
def raw_string_internal(result)
throw :raw_string_tag if !@raw_string
result << @raw_string
end
end
class Text
def raw_string=(arg)
if arg == @rcdata then
@raw_string = @rcdata
else
super
end
end
end
# :startdoc:
module Node
def eliminate_raw_string
raise NotImplementedError
end
end
# :stopdoc:
class Doc
def eliminate_raw_string
Doc.new(@children.map {|c| c.eliminate_raw_string })
end
end
class Elem
def eliminate_raw_string
Elem.new!(
@stag.eliminate_raw_string,
@empty ? nil : @children.map {|c| c.eliminate_raw_string },
@etag && @etag.eliminate_raw_string)
end
end
class Text
def eliminate_raw_string
Text.new_internal(@rcdata)
end
end
class STag
def eliminate_raw_string
STag.new(@qualified_name, @attributes, @inherited_context)
end
end
class ETag
def eliminate_raw_string
self.class.new(@qualified_name)
end
end
class XMLDecl
def eliminate_raw_string
XMLDecl.new(@version, @encoding, @standalone)
end
end
class DocType
def eliminate_raw_string
DocType.new(@root_element_name, @public_identifier, @system_identifier)
end
end
class ProcIns
def eliminate_raw_string
ProcIns.new(@target, @content)
end
end
class Comment
def eliminate_raw_string
Comment.new(@content)
end
end
# :startdoc:
end