From: Robin Edwards Date: Sun, 11 Apr 2010 18:15:40 +0000 (+0100) Subject: renamed to Context.pm X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=281da8d25b989df5646a7a4a0aeabb0c87cb866d;p=p5sagit%2FDevel-Declare-Keyword.git renamed to Context.pm --- diff --git a/lib/Devel/Declare/Keyword/Declare.pm b/lib/Devel/Declare/Keyword/Declare.pm deleted file mode 100644 index 62da055..0000000 --- a/lib/Devel/Declare/Keyword/Declare.pm +++ /dev/null @@ -1,306 +0,0 @@ -package Devel::Declare::Keyword::Declare; -use strict; -use warnings; -use Carp; -use Devel::Declare; -use Data::Dumper; - -#TODO organise high level and low level methods -#TODO possible import strip_names_and_args - -=head1 NAME - -Keyword::Declare - simple oo interface to Devel::Declare - -=cut - -=head1 SYNOPSIS - - my $kd = new Devel::Declare::Keyword::Declare; - print $kd->line; - -=cut - - -sub new { - my ($class,$decl,$offset) = @_; - my $self = {}; - $self->{offset} = $offset || 0; - $self->{declarator} = $decl; - bless($self,$class); -} - -=head1 METHODS - -=head2 offset - -for setting and retrieving the offset - -=cut - -sub offset { - my ($self, $offset) = @_; - $self->{offset} = $offset if $offset; - return $self->{offset}; -} - -sub declarator { - my $self = shift; - return $self->{declarator} -} - -=head2 inc_offset - -increments the current offset - - $kd->inc_offset; # by one - $kd->inc_offset(23); - -=cut - -sub inc_offset { - my ($self, $offset) = @_; - if($offset) { - $self->{offset} += $offset; - } - else { - $self->{offset}++; - } - return $self->{offset}; -} - -=head2 next_token - -skips to the next token - -=cut - -sub next_token { - my ($self) = @_; - $self->{offset} += Devel::Declare::toke_move_past_token($self->offset); -} - -=head2 skip_token - -skips a token matching - -=cut - -sub skip_token { - my ($self, $token) = @_;; - my $len = $self->scan_word(0); - confess "Couldn't find token '$token'" unless $len; - - my $l = $self->line; - my $match = substr($l, $self->offset, $len); - confess "Expected declarator '$token', got '${match}'" - unless $match eq $token; - $self->inc_offset($len); - return $match; -} - - -=head2 strip_token - -strips a token - -=cut - -sub strip_token { - my ($self) = @_;; - my $len = $self->scan_word(0); - confess "Couldn't find a token." unless $len; - my $l = $self->line; - my $match = substr($l, $self->offset, $len) = ''; - $self->inc_offset($len); - return $match; -} - -=head2 strip_ident - -strips an identifier - -=cut - -sub strip_ident { - my $self = shift; - if (my $len = Devel::Declare::toke_scan_ident( $self->offset )) { - my $l = $self->line; - my $ident = substr($l, $self->offset, $len); - substr($l, $self->offset, $len) = ''; - $self->line($l); - return $ident; - } -} - -=head2 strip_to_char - -#strip out everything until a certain char is matched - -=cut - -sub strip_to_char { - my ($self, $char) = @_; - my $str = ""; - while ($str !~ /$char/) { - my $l = $self->line; - $str .= substr($l, $self->offset, 1); - substr($l, $self->offset, 1) = ''; - $self->line($l); - } - return $str; -} - -=head2 terminate - -inject a semi colon - -=cut - -sub terminate { - my ($self) = shift; - my $l = $self->line; - substr($l, $self->offset, 1) = ';'; - $self->line($l); -} - -=head2 skip_ws - -skip past white space - -=cut - -sub skip_ws { - my ($self) = @_; - $self->{offset} += Devel::Declare::toke_skipspace($self->offset); -} - -=head2 scan_word - -scan in a word, see also scanned - -=cut - -sub scan_word { - my ($self, $n) = @_; - return Devel::Declare::toke_scan_word($self->offset, $n); -} - -=head2 scan_ident - -scan in a ident, see also scanned - -=cut - -sub scan_ident { - my ($self, $n) = @_; - return Devel::Declare::toke_scan_ident($self->offset, $n); -} - -=head2 scan_string - -scan a quoted string, see also scanned - -=cut - -sub scan_string { - my ($self) = @_; - return Devel::Declare::toke_scan_str($self->offset); -} - -=head2 scanned - -returns whatever the parser has scanned - -=cut - -sub scanned { - my ($self) = @_; - my $stream = Devel::Declare::get_lex_stuff(); - Devel::Declare::clear_lex_stuff(); - return $stream; -} - - -=head2 line - -get or set the current line - -=cut - -sub line { - my ($self, $line) = @_; - Devel::Declare::set_linestr($line) if $line; - return Devel::Declare::get_linestr; -} - -=head2 package - -returns name of package being compiled - -=cut - -sub package { - return Devel::Declare::get_curstash_name; -} - -=head2 line_offset - -get or set the current lines offset - -=cut - -sub line_offset { - my ($self, $os) = @_; - Devel::Declare::set_linestr_offset($os) if $os; - return Devel::Declare::get_linestr_offset; -} - -=head2 shadow - -sets up a shadow subroutine, optionally takes a sub ref as the shadow - - $declare->shadow('Some::Thing::do_something', \&somecoderef) - -=cut - -sub shadow { - my ($self, $name, $sub) = @_; - - #set name as global for import; - no strict 'refs'; - - ${$self->package."::__block_name"} = $name; - - unless ($sub) { - if($name) { - $sub = sub (&) { - *{$name} = shift; - }; - } - else { - $sub = sub (&) { shift; }; - } - } - - Devel::Declare::shadow_sub($name, $sub); - - return $sub; -} - -=head1 AUTHOR - -Robin Edwards - -=head1 COPYRIGHT - -Copyright (c) 2009 Robin Edwards - -=head1 LICENSE - -This library is free software and may be distributed under the same terms -as perl itself. - -=cut - -1;