Mercurial > pub > Impl
diff Lib/IMPL/DOM/Node.pm @ 148:e6447ad85cb4
DOM objects now have a schema and schemaSource properties
RegExp now can launder data
Improved post to DOM transformation (multiple values a now supported)
Added new axes to navigation queries: ancestor and descendant
minor changes and bug fixes
author | wizard |
---|---|
date | Mon, 16 Aug 2010 08:26:44 +0400 |
parents | e30bdd040fe3 |
children | 1e7f03414b65 |
line wrap: on
line diff
--- a/Lib/IMPL/DOM/Node.pm Mon Aug 09 08:45:36 2010 +0400 +++ b/Lib/IMPL/DOM/Node.pm Mon Aug 16 08:26:44 2010 +0400 @@ -17,7 +17,9 @@ public _direct property isComplex => { get => \&_getIsComplex } ; public _direct property nodeValue => prop_all; public _direct property childNodes => { get => \&_getChildNodes }; # prop_list - public _direct property parentNode => prop_get ; + public _direct property parentNode => prop_get | owner_set; + public _direct property schema => prop_get | owner_set; + public _direct property schemaSource => prop_get | owner_set; private _direct property _propertyMap => prop_all ; __PACKAGE__->class_data(property_bind => {}); @@ -27,7 +29,9 @@ parent => \&selectParent, siblings => \&selectSiblings, child => \&childNodes, - document => \&selectDocument + document => \&selectDocument, + ancestor => \&selectAncestors, + descendant => \&selectDescendant ); sub CTOR { @@ -290,6 +294,24 @@ } } +sub selectDescendant { + wantarray ? + map $_->selectAll(), $_[0]->childNodes : + [map $_->selectAll(), $_[0]->childNodes] +} + +sub selectAll { + map(selectAll($_),@{$_[0]->childNodes}) , $_[0] +} + +sub selectAncestors { + my $parent = $_[0]->parentNode; + + wantarray ? + ($parent ? ($parent->selectAncestors,$parent) : ()) : + [$parent ? ($parent->selectAncestors,$parent) : ()] +} + sub firstChild { @_ >=2 ? $_[0]->replaceNodeAt(0,$_[1]) : $_[0]->childNodes->[0]; } @@ -349,9 +371,11 @@ my $name = shift; if (my $method = $this->can($name)) { - return &$method($this,@_); + unshift @_,$this; + # use goto to preserve calling context + goto &$method; } - + # dynamic property if (@_) { # set return $this->{$_propertyMap}{$name} = shift; @@ -429,6 +453,20 @@ Ссылка на родительский элемент, если таковой имеется. +=item C<[get] schema> + +Ссылка на узел из C<IMPL::DOM::Schema>, представляющий схему данных текущего узла. Может быть C<undef>. + +=item C<[get] schema> + +Ссылка на узел из C<IMPL::DOM::Schema>, представляющий элемент схемы, объявляющий данный узел. Может быть C<undef>. + +Отличается от свойства C<schema> тем, что узел в случае ссылки на тип узла, данной свойство будет содержать +описание ссылки C<IMPL::DOM::Schema::Node>, а свойство C<schema> например будет ссылаться на +C<IMPL::DOM::Schema::ComplexType>. + +=back + =head2 METHODS =cut \ No newline at end of file