Класс тега, который собирает все свое содержимое как DOM-дерево.
Класс предназначен для случая, когда требуется просто собрать содержимое входного потока (например, для последующего преобразования в выходной поток) и при этом не известно, из чего состоит входной поток.
Это может потребоваться, к примеру, если в какую-то теговую структуру нужно заложить возможность расширения в будущем. Пусть есть текущая структура, расчитанная на разбор следующих тегов:
{object {name 'some'} {owner 'owner'} {mode 'mode'} }
и требуется предусмотреть, что в будущем к тегам {name}, {owner} и {mode} может быть добавлен набор новых тегов. Для этого, тег {object} можно оформить следующим образом:
class TagObject < ClsRuby::TagNoValue def initialize @name = ClsRuby::TagScalar.new( :name => 'name' ... ) @owner = ClsRuby::TagScalar.new( :name => 'owner' ... ) @mode = ClsRuby::TagScalar.new( :name => 'mode' ... ) # А вот этот тег будет поглощать все остальное содержимое. @extension = ClsRuby::TagAny.new end end
Разобранный тегом TagAny поток будет доступен с помощью метода TagAny#content. Этот метод возвращает массив элементов TagAny::TAG. В свою очередь, TagAny::TAG#content возвращает содержимое дочернего тега в виде массива элементов (в котором могут быть элементы типов TagAny::TAG, TagAny::SPACE, TagAny::NONSPACE, TagAny::STRING).
Методы TagAny#content и TagAny::TAG#content возвращают элементы в той последовательности, в которой они были извлечены из входного потока.
Всегда возвращает true.
# File lib/cls-ruby/tag_any.rb, line 73 def tag_compare_name( name ); true; end
# File lib/cls-ruby/tag_any.rb, line 64 def tag_name; if 0 != @stack @stack.last.name else '<any>' end end
Завершает очередной дочерний тег.
# File lib/cls-ruby/tag_any.rb, line 87 def tag_on_finish l = @stack.pop if @stack.empty? @content << l else @stack.last.content << l end end
Начинает новый дочерний тег.
# File lib/cls-ruby/tag_any.rb, line 81 def tag_on_start( name ) n = TAG.new( name, [] ) @stack.push( n ) end
# File lib/cls-ruby/tag_any.rb, line 100 def tag_on_tok_nonspace( token ) @stack.last.content << NONSPACE.new( token ) end
Generated with the Darkfish Rdoc Generator 2.