File Coverage

blib/lib/Text/Oyster.pm
Criterion Covered Total %
statement 42 126 33.3
branch 0 30 0.0
condition 0 2 0.0
subroutine 14 30 46.6
pod 11 12 91.6
total 67 200 33.5


line stmt bran cond sub pod time code
1             package Text::Oyster;
2              
3             # $Id: Oyster.pm,v 1.12 2003/06/27 15:38:38 steve Exp $
4              
5             # Copyright 2000-2001 by Steve McKay. All rights reserved.
6             # This library is free software; you can redistribute it and/or
7             # modify it under the same terms as Perl itself.
8              
9 1     1   945 use strict;
  1         2  
  1         34  
10 1     1   6 use Carp;
  1         2  
  1         114  
11 1     1   6 use vars qw( @ISA $VERSION );
  1         5  
  1         78  
12             # can we convert to use the base pragma yet?
13 1     1   888 use Parse::Tokens;
  1         2211  
  1         109  
14             @ISA = ('Parse::Tokens');
15              
16             $VERSION = 0.32;
17              
18             sub new
19             {
20 0     0 1   my( $class, $params ) = @_;
21 0           my $self = $class->SUPER::new;
22 0           $self->delimiters( [''] ); # default delimiters
23 0           $self->package( 'Safe' ); # default package
24 0           $self->init( $params );
25 0           return $self;
26             }
27              
28             sub init
29             {
30 0     0 0   my( $self, $params ) = @_;
31 1     1   14 no strict 'refs';
  1         2  
  1         87  
32 0           my $hash;
33 0           for ( keys %$params )
34             {
35 0           my $ref = lc $_;
36 0 0         if( $_ eq 'hash' )
37             {
38 0           $hash = $params->{$_};
39 0           next;
40             }
41 0           $self->$ref( $params->{$_} );
42             }
43 0 0         $self->hash( $hash ) if( defined $hash );
44 1     1   5 use strict;
  1         1  
  1         398  
45             }
46              
47             sub hash
48             {
49 0     0 1   my( $self, $val ) = @_;
50 0 0         if ( $val ){
51             # $self->_uninstall( $self->{'hash'} ) if $self->{'hash'};
52             # $self->cleanup( $self->package() );
53 0           $self->{'hash'} = $val;
54 0           $self->_install( $val );
55             }
56 0           return $self->{'hash'};
57             }
58              
59             sub package
60             {
61 0     0 1   my( $self, $val ) = @_;
62 0 0         $self->{'package'} = $val if $val;
63 0           return $self->{'package'};
64             }
65              
66             sub inline_errs
67             {
68 0     0 1   my( $self, $val ) = @_;
69 0 0         $self->{'inline_errs'} = $val if $val;
70 0           return $self->{'inline_errs'};
71             }
72              
73             sub autoclean
74             {
75 0     0 1   my( $self, $val ) = @_;
76 0 0         $self->{'autoclean'} = $val if $val;
77 0           return $self->{'autoclean'};
78             }
79              
80             sub file
81             {
82 0     0 1   my( $self, $val ) = @_;
83 0 0         if( $val )
84             {
85 0           $self->{'file'} = $val;
86             # always use the text accessor as it handles cache flushing
87 0           $self->text( &_get_file( $self->{'file'} ) );
88             }
89 0           return $self->{'file'};
90             }
91              
92             sub parsed
93             {
94 0     0 1   my( $self ) = @_;
95 0           return $self->{'parsed'};
96             }
97              
98             sub parse
99             {
100             # overide SUPER::parse
101 0     0 1   my( $self, $params ) = @_;
102 0           $self->{'parsed'} = undef;
103 0           $self->init( $params );
104 0 0         return unless $self->text();
105 0           $self->SUPER::parse();
106 0           return $self->{'parsed'};
107             }
108              
109             sub token
110             {
111             # overide SUPER::token
112 0     0 1   my( $self, $token) = @_;
113 0           my $package = $self->package();
114 1     1   5 no strict 'vars';
  1         2  
  1         84  
115 0           $self->{'parsed'} .= eval qq{
116             package $package;
117             $token->[1];
118             };
119 0 0         if( $@ ){
120 0           carp $@;
121 0 0         $self->{'parsed'} .= $@ if $self->inline_errs();
122             }
123 1     1   5 use strict;
  1         1  
  1         99  
124             }
125              
126             sub ether
127             {
128             # overide SUPER::ether
129              
130 0     0 1   my( $self, $text ) = @_;
131 0           $self->{'parsed'} .= $text;
132             }
133              
134             sub cleanup
135             {
136             # clean up the contents of our package
137             # called prior to the installation of a new hash
138              
139 0     0 1   my( $self, $package ) = @_;
140              
141 0 0         return if $package eq 'main';
142 1     1   5 no strict 'refs', 'vars';
  1         1  
  1         180  
143 0           *stash = *{"${package}::"};
  0            
144 0           for( keys %stash )
145             {
146 0           *alias = $stash{$_};
147 0 0         $alias = undef if( defined $alias );
148 0 0         @alias = () if( defined @alias );
149 0 0         %alias = () if( defined %alias )
150             }
151 1     1   5 use strict;
  1         2  
  1         113  
152 0           return 1;
153             }
154              
155             sub DESTROY
156             {
157 0     0     my( $self ) = @_;
158 0 0         $self->cleanup( $self->package() ) if $self->autoclean();
159 0           return;
160             }
161              
162             sub _install
163             {
164             # install a given hash in a package for later use
165              
166 0     0     my( $self, $hash ) = @_;
167 0           my $package = $self->package();
168 1     1   5 no strict 'refs';
  1         1  
  1         66  
169 0           for( keys %{$hash} )
  0            
170             {
171             # why if defined?
172             # next unless defined $hash->{$_};
173 0           *{$package."::$_"} = \$hash->{$_};
  0            
174             }
175 1     1   5 use strict;
  1         1  
  1         77  
176 0           return 1;
177             }
178              
179             sub _uninstall
180             {
181             # clean up the contents of our package
182             # called prior to the installation of a new hash
183              
184 0     0     my( $self, $hash ) = @_;
185 0           my $package = $self->package();
186 1     1   5 no strict 'refs';
  1         1  
  1         64  
187 0           for( keys %{$hash} )
  0            
188             {
189 0           *{$package."::$_"} = undef;
  0            
190             }
191 1     1   17 use strict;
  1         2  
  1         116  
192 0           return 1;
193             }
194              
195             sub _get_file
196             {
197 0     0     my( $file ) = @_;
198 0           local *IN;
199 0   0       open IN, $file || return;
200 0           local $/;
201 0           my $text = ;
202 0           close IN;
203 0           return $text;
204             }
205              
206             1;
207              
208             __END__