NAME
    CGI::Wiki::Plugin::Categoriser - Category management for CGI::Wiki.

DESCRIPTION
    Uses node metadata to build a model of how nodes are related to each
    other in terms of categories.

SYNOPSIS
      use CGI::Wiki;
      use CGI::Wiki::Plugin::Categoriser;

      my $wiki = CGI::Wiki->new( ... );
      $wiki->write_node( "Red Lion", "nice beer", $checksum,
                         { category => [ "Pubs", "Pub Food" ] } );
      $wiki->write_node( "Holborn Station", "busy at peak times", $checksum,
                         { category => "Tube Station" } );

      my $categoriser = CGI::Wiki::Plugin::Categoriser->new;
      $wiki->register_plugin( plugin => $categoriser );

      my $isa_pub = $categoriser->in_category( category => "Pubs",
                                               node     => "Red Lion" );
      my @categories = $categoriser->categories( node => "Holborn Station" );

METHODS
    new
          my $categoriser = CGI::Wiki::Plugin::Categoriser->new;
          $wiki->register_plugin( plugin => $categoriser );

    in_category
          my $isa_pub = $categoriser->in_category( category => "Pubs",
                                                   node     => "Red Lion" );

        Returns true if the node is in the category, and false otherwise.
        Note that this is case-insensitive, so "Pubs" is the same category
        as "pubs". I might do something to make it plural-insensitive at
        some point too.

    subcategories
          $wiki->write_node( "Category Pub Food",
                             "pubs that serve food",
                             $checksum,
                             { category => [ "Pubs", "Food", "Category" ] } );
          my @subcategories = $categoriser->subcategories( category => "Pubs" );
          # will return ( "Pub Food" )

          # Or if you prefer CamelCase node names:
          $wiki->write_node( "CategoryPubFood",
                             "pubs that serve food",
                             $checksum,
                             { category => [ "Pubs", "Food", "Category" ] } );
          my @subcategories = $categoriser->subcategories( category => "Pubs" );
          # will return ( "PubFood" )

        To add a subcategory "Foo" to a given category "Bar", write a node
        called any one of "Foo", "Category Foo", or "CategoryFoo" with
        metadata indicating that it's in categories "Bar" and "Category".

        Yes, this pays specific attention to the Wiki convention of defining
        categories by prefacing the category name with "Category" and
        creating a node by that name. If different behaviour is required we
        should probably implement it using an optional argument in the
        constructor.

    categories
          my @categories = $categoriser->categories( node => "Holborn Station" );

        Returns an array of category names in no particular order.

SEE ALSO
        *   CGI::Wiki

        *   CGI::Wiki::Plugin

AUTHOR
        Kake Pugh (kake@earth.li).

COPYRIGHT
             Copyright (C) 2003 Kake Pugh.  All Rights Reserved.

        This module is free software; you can redistribute it and/or modify
        it under the same terms as Perl itself.

TODO
        Improve subcategories, do category hierarchy.

