]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blobdiff - doc/todo/pagespec_relative_to_a_target.mdwn
plan of attack
[git.ikiwiki.info.git] / doc / todo / pagespec_relative_to_a_target.mdwn
index e92988c3e2dadef44e802bf6053fbf7c5535ee6d..4757988e0a27b0b7cdcb8fa23978f151cc1bbad4 100644 (file)
@@ -30,9 +30,9 @@ Note that if you try to inline `*/blah` you will match `foo/blah`,
 themselves rather than any relatives of theirs.
 
 This patch is useful for (among other things) constructing blogging 
 themselves rather than any relatives of theirs.
 
 This patch is useful for (among other things) constructing blogging 
-systems where leaf nodes are organized hierarchically; using has_child,
+systems where leaf nodes are organized hierarchically; using `has_child`,
 you can inline only leaf nodes and ignore "intermediate" nodes.
 you can inline only leaf nodes and ignore "intermediate" nodes.
-match_relative can be used recursively to match properties of arbitrary
+`match_relative` can be used recursively to match properties of arbitrary
 complexity: "show me all the pages who have children called foo that 
 have children called blah". I'm not sure what use it is, though.
 
 complexity: "show me all the pages who have children called foo that 
 have children called blah". I'm not sure what use it is, though.
 
@@ -57,7 +57,7 @@ diff -urNX ignorepats ikiwiki/IkiWiki/Plugin/relative.pm ikidev/IkiWiki/Plugin/r
 +
 +package IkiWiki::PageSpec;
 +
 +
 +package IkiWiki::PageSpec;
 +
-+sub match_relative($$;@) { #{{{
++sub match_relative($$;@) {
 +      my $parent = shift;
 +      my $spec = shift;
 +      my %params = @_;
 +      my $parent = shift;
 +      my $spec = shift;
 +      my %params = @_;
@@ -69,21 +69,29 @@ diff -urNX ignorepats ikiwiki/IkiWiki/Plugin/relative.pm ikidev/IkiWiki/Plugin/r
 +              }
 +      }
 +      return IkiWiki::FailReason->new("$parent can't match $spec against anything");
 +              }
 +      }
 +      return IkiWiki::FailReason->new("$parent can't match $spec against anything");
-+} #}}}
++}
 +
 +
-+sub match_has_child($$;@) { #{{{
++sub match_has_child($$;@) {
 +      my $page = shift;
 +      my $childname = shift;
 +      my $spec;
 +      my $page = shift;
 +      my $childname = shift;
 +      my $spec;
-+      if ($childname) { #{{{
++      if ($childname) {
 +              $spec = "$page/$childname or $page/*/$childname";
 +              $spec = "$page/$childname or $page/*/$childname";
-+      } #}}}
-+      else { #{{{
++      }
++      else {
 +              $spec = "$page/*";
 +              $spec = "$page/*";
-+      } #}}}
++      }
 +
 +      return match_relative($page, $spec, @_);
 +
 +      return match_relative($page, $spec, @_);
-+} #}}}
++}
 +
 +1
 +
 +1
-</pre>
\ No newline at end of file
+</pre>
+
+[[!tag patch]]
+
+> This looks really interesting.  It reminds me of XPath and its conditionals.
+> Those might actually work well adapted to pagespecs.  For instance, to write
+> "match any page with a child blah", you could just write *[blah] , or if you
+> don't want to use relative-by-default in the conditionals, *[./blah].
+> -- [[JoshTriplett]]