def first(tag,*arg) nth(tag,1,*arg) do |f| yield f end end
alias_method :next, :first
def each_block(tag,closetag=nil)
t=0
s,d =find_opentag(tag)
raise RuntimeError,"tag(#{tag}) not found" unless s
while s do
if closetag then
e=find_closetag(closetag,s,tag)
else
e=find_closetag(tag,s)
end
e=-1 unless e
yield self.class.new(@text[s..e],tag,parse_attribute(d))
if e>=0 then
t=@text.index('>',e+1)
t=@text.length unless t
s,d = find_opentag(tag,t)
else
s=false
end
end
self.class.new(text[t+1..-1])
end
def collect(*arg)
a=[]
each_block(*arg) do |tt| a.push tt end
a
end
def enumtag(tag)
s,d = find_openenumtag(tag)
while s do
e=find_closeenumtag(tag,s+1)
e=-1 unless e
yield self.class.new(@text[s..e],tag,parse_attribute(d))
s,d = find_openenumtag(tag,s)
end
end
def enumcollect(tag)
a=[]
enumtag(tag) do |t| a.push t end
a
end
def for_this
yield self
end
def get_nth(*arg) r=nil; nth(*arg) do |bl| r=bl end; r; end
def get_first(*arg) r=nil; first(*arg) do |bl| r=bl end; r; end
def tagexist?(tag,st=0)
s=find_element(tag,st)
if s then true else false end
end
def tagnext
s=@text.index("<")
return nil unless s
e=@text.index(">",s)
return nil unless s
@text[s..e].scan(/[^<>\s]+/)[0]
end
def nth_tailer(tag,n)
nth(tag,n) do end
end
end
??