# -*- perl -*- =head1 NAME SuikaWiki::View --- SuikaWiki: View =cut package SuikaWiki::View; use strict; our $VERSION = do{my @r=(q$Revision: 1.3 $=~/\d+/g);sprintf "%d."."%02d" x $#r,@r}; my %template; my %definition; use overload '""' => \&as_string, '.=' => \&add_line, fallback => 1; =head1 METHODS FOR TEMPLATE =over 4 =item $t = SuikaWiki::View->template ($name) Returns a view template object =cut sub template ($$) { my $self = bless {type => 'template'}, shift; $self->{name} = shift; $self; } sub definition ($$;\%) { my $self = bless {type => 'definition'}, shift; $self->{name} = shift; my $p = shift; $definition{$self->{name}} = $p if ref $p; $self; } sub add_line ($$) { my $self = shift; if ($self->{type} eq 'template') { $template{$self->{name}} .= shift; } else { $definition{$self->{name}}->{template} .= shift; } $self; } sub as_string ($) { my $self = shift; if ($self->{type} eq 'template') { $template{$self->{name}} .join '', map {$_->{Main}} sort {$a->{Order} <=> $b->{Order}} @{$SuikaWiki::View::Implementation::TemplateFragment{$self->{name}}||[]}; } else { $definition{$self->{name}}->{template}; } } sub properties ($;\%) { my ($self, $new) = @_; if (ref $new) { $definition{$self->{name}} = $new; } elsif (!ref $definition{$self->{name}}) { $definition{$self->{name}} = {}; } $definition{$self->{name}}; } sub property ($$;\%) { my ($self, $key, $new) = @_; if (defined $new) { $definition{$self->{name}}->{$key} = $new; } $definition{$self->{name}}->{$key}; } sub defined ($) { my $self = shift; ref $definition{$self->{name}} && ref $definition{$self->{name}}->{media}; } sub check ($\%) { my $self = shift; ref $definition{$self->{name}}->{check} ? &{$definition{$self->{name}}->{check}} (shift) : $self->defined ; } sub definitions ($) { return keys %definition; } =back =head1 LICENSE Copyright 2003 Wakaba This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut 1; # $Date: 2003/10/25 02:22:06 $