X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FGitalist.git;a=blobdiff_plain;f=local-lib5%2Flib%2Fperl5%2FPPI%2FToken%2FNumber%2FFloat.pm;fp=local-lib5%2Flib%2Fperl5%2FPPI%2FToken%2FNumber%2FFloat.pm;h=479a233541c8725e2ac9d97b2f9e9a81a1094ada;hp=0000000000000000000000000000000000000000;hb=3fea05b9fbf95091f4522528b9980a33e0235603;hpb=af746827daa7a8feccee889e1d12ebc74cc9201e diff --git a/local-lib5/lib/perl5/PPI/Token/Number/Float.pm b/local-lib5/lib/perl5/PPI/Token/Number/Float.pm new file mode 100644 index 0000000..479a233 --- /dev/null +++ b/local-lib5/lib/perl5/PPI/Token/Number/Float.pm @@ -0,0 +1,133 @@ +package PPI::Token::Number::Float; + +=pod + +=head1 NAME + +PPI::Token::Number::Float - Token class for a floating-point number + +=head1 SYNOPSIS + + $n = 1.234; + +=head1 INHERITANCE + + PPI::Token::Number::Float + isa PPI::Token::Number + isa PPI::Token + isa PPI::Element + +=head1 DESCRIPTION + +The C class is used for tokens that +represent floating point numbers. A float is identified by n decimal +point. Exponential notation (the C or C) is handled by the +PPI::Token::Number::Exp class. + +=head1 METHODS + +=cut + +use strict; +use PPI::Token::Number (); + +use vars qw{$VERSION @ISA}; +BEGIN { + $VERSION = '1.206'; + @ISA = 'PPI::Token::Number'; +} + +=pod + +=head2 base + +Returns the base for the number: 10. + +=cut + +sub base () { 10 } + +=pod + +=head2 literal + +Return the numeric value of this token. + +=cut + +sub literal { + my $self = shift; + my $str = $self->_literal; + my $neg = $str =~ s/^\-//; + $str =~ s/^\./0./; + my $val = 0+$str; + return $neg ? -$val : $val; +} + + + + + +##################################################################### +# Tokenizer Methods + +sub __TOKENIZER__on_char { + my $class = shift; + my $t = shift; + my $char = substr( $t->{line}, $t->{line_cursor}, 1 ); + + # Allow underscores straight through + return 1 if $char eq '_'; + + # Allow digits + return 1 if $char =~ /\d/o; + + # Is there a second decimal point? Then version string or '..' operator + if ( $char eq '.' ) { + if ( $t->{token}->{content} =~ /\.$/ ) { + # We have a .., which is an operator. + # Take the . off the end of the token.. + # and finish it, then make the .. operator. + chop $t->{token}->{content}; + $t->{class} = $t->{token}->set_class( 'Number' ); + $t->_new_token('Operator', '..'); + return 0; + } elsif ( $t->{token}->{content} !~ /_/ ) { + # Underscore means not a Version, fall through to end token + $t->{class} = $t->{token}->set_class( 'Number::Version' ); + return 1; + } + } + if ($char eq 'e' || $char eq 'E') { + $t->{class} = $t->{token}->set_class( 'Number::Exp' ); + return 1; + } + + # Doesn't fit a special case, or is after the end of the token + # End of token. + $t->_finalize_token->__TOKENIZER__on_char( $t ); +} + +1; + +=pod + +=head1 SUPPORT + +See the L in the main module. + +=head1 AUTHOR + +Chris Dolan Ecdolan@cpan.orgE + +=head1 COPYRIGHT + +Copyright 2006 Chris Dolan. + +This program is free software; you can redistribute +it and/or modify it under the same terms as Perl itself. + +The full text of the license can be found in the +LICENSE file included with this module. + +=cut