Parent

Class/Module Index [+]

Quicksearch

ClsRuby::TagAny

Класс тега, который собирает все свое содержимое как 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 возвращают элементы в той последовательности, в которой они были извлечены из входного потока.

Constants

NONSPACE

Объект, который описывает одно значение типа NonSpace,

SPACE

Объект, который описывает одно значение типа Space.

STRING

Объект, который описывает одно значение типа String.

TAG

Объект, который описывает любой дочерний тег.

Attributes

content[R]

Доступ к содержимому тега.

Public Class Methods

new( args = {} ) click to toggle source
# File lib/cls-ruby/tag_any.rb, line 58
def initialize( args = {} )
  super
  @content = []
  @stack = []
end

Public Instance Methods

tag_compare_name( name ) click to toggle source

Всегда возвращает true.

# File lib/cls-ruby/tag_any.rb, line 73
def tag_compare_name( name ); true; end
tag_name() click to toggle source
# File lib/cls-ruby/tag_any.rb, line 64
def tag_name;
  if 0 != @stack
    @stack.last.name
  else
    '<any>'
  end
end
tag_on_finish() click to toggle source

Завершает очередной дочерний тег.

# 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
tag_on_start( name ) click to toggle source

Начинает новый дочерний тег.

# File lib/cls-ruby/tag_any.rb, line 81
def tag_on_start( name )
  n = TAG.new( name, [] )
  @stack.push( n )
end
tag_on_tok_nonspace( token ) click to toggle source
# File lib/cls-ruby/tag_any.rb, line 100
def tag_on_tok_nonspace( token )
  @stack.last.content << NONSPACE.new( token )
end
tag_on_tok_space( token ) click to toggle source
# File lib/cls-ruby/tag_any.rb, line 96
def tag_on_tok_space( token )
  @stack.last.content << SPACE.new( token )
end
tag_on_tok_string( token ) click to toggle source
# File lib/cls-ruby/tag_any.rb, line 104
def tag_on_tok_string( token )
  @stack.last.content << STRING.new( token )
end
tag_tags() click to toggle source

Всегда возвращает самого себя.

# File lib/cls-ruby/tag_any.rb, line 76
def tag_tags
  [ self ]
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.