]> lifelog.hopto.org Git - PerlCNF.git/commitdiff
Further refined find all selector for nodes.
authorWill Budic <redacted>
Wed, 1 May 2024 07:01:48 +0000 (17:01 +1000)
committerWill Budic <redacted>
Wed, 1 May 2024 07:01:48 +0000 (17:01 +1000)
system/modules/CNFNode.pm
tests/testCNFNode.pl

index 98767ba160363c48df0d72cae0005c98f22c2ee1..66ae63b25dbc40a099232d570a66cdbea59d950f 100644 (file)
@@ -205,31 +205,45 @@ sub find {
            $ref =  ref($ret);
         if($ret && $ref eq 'ARRAY'){
             my $found = 0;
+            my @target = @$ret;
             undef $prev;
-            foreach my $ele(@$ret){
+            foreach my $ele(@target){
                 my $r =  ref($ele);
-                if($r eq 'ARRAY'){#TODO Is this to account here allso for rest of search path?
+                if($r eq 'ARRAY'){#TODO Is this to account here also for rest of search path?
                     $ele = @{$ele}[0]
                 }
                 if($seekArray && exists $ele->{'@$'}){
                     foreach my$node(@{$ele->{'@$'}}){
                         if ($node->{'_'} eq $name){
-                            $arr[@arr] = $ele = $node;
-                        }elsif($node->{'_'} eq $seekPName){
-                            my $seek = $node -> find("$seekPName/$name");
-                               $ref  = ref($seek);
-                            if($ref eq 'ARRAY'){
-                                @arr=();
-                               foreach my$nd(@{$seek}){
+                            if(ref($ele) eq 'ARRAY'){
+                                @arr= @$ele;
+                            }
+                            $arr[@arr] = $node;
+
+                        }
+                        elsif($node->{'_'} eq $seekPName){
+                           my $seek = $node -> find("$seekPName/$name");
+                              $ref  = ref($seek);
+                           if($ref eq 'ARRAY'){
+                              @arr=();
+                              foreach my$nd(@{$seek}){
                                  my $child = $nd -> findChildrenByName($name);
                                  $arr[@arr] = $child if $child
-                               }
-                               return \@arr if(@arr>1);
-                               $ele = $arr[0];
-                               @arr=();
-                            }elsif($ref eq 'CNFNode'){
+                              }
+                              return \@arr if(@arr>1);
+                              $ele = $arr[0];
+                              @arr=();
+                           }elsif($seekPName && $ref eq 'CNFNode'){
                                $ele = $seek;
-                            }
+                           }
+                        }
+                        elsif($seekPName && $node->{'@'}){
+                           my $found = findChildrenByName($node,$name);
+                           if($found){
+                              $ele = $found;
+                              $found++;
+                              next
+                           }
                         }
                     }
                     if(@arr>1){
index 3a0ec54ccf6b6f20ef8992beb7fc4aee0976350b..9ee412628bdabfd78d2be701c9bc81ad8d356eb4 100644 (file)
@@ -156,6 +156,7 @@ use Syntax::Keyword::Try; try {
                 >div>
             >div>
          >div>
+         <text<Shallow>text>
         >parent>
     ));
 
@@ -178,7 +179,10 @@ use Syntax::Keyword::Try; try {
     $test -> evaluate("\$find[/parent/div/*/text]","Deeply Nested!",$find->[0]->val());
     $test -> evaluate("\$find[/parent/div/*/text]","This Too!",$find->[1]->val());
 
-
+    my $find2 = $node->find('/parent/*/text');
+    $test -> subcase("Select all text nodes in parent.")->
+             evaluate("\$find2[/parent/*/text]",3,scalar @$find2);
+    $test -> evaluate("\$find2[/parent/*/text]",'Shallow', $find2->[2]->val());
 
     #
     $test -> nextCase();