update changelog in prep for release
[catagits/CatalystX-Declare.git] / lib / CatalystX / Declare / Context / StringParsing.pm
1 use MooseX::Declare;
2
3 role CatalystX::Declare::Context::StringParsing {
4
5     use Devel::Declare;
6
7     method rest_of_line {
8
9         $self->skipspace;
10
11         my $linestr = $self->get_linestr;
12         my $left    = substr $linestr, $self->offset;
13
14         return $left;
15     }
16
17     method strip_from_linestr (Int $chars) {
18
19         my $linestr = $self->get_linestr;
20         substr($linestr, $self->offset, $chars) = '';
21         $self->set_linestr($linestr);
22     }
23
24     method get_string {
25
26         my $left = $self->rest_of_line;
27
28         # only work on allowed types of string declarations
29         if ($left =~ /^"/ and my $num = Devel::Declare::toke_scan_str $self->offset) {
30
31             my $found = Devel::Declare::get_lex_stuff;
32             Devel::Declare::clear_lex_stuff;
33             
34             $self->strip_from_linestr($num);
35             
36             return qq{"$found"};
37         }
38
39         # check for a scalar version if nothing found
40         else {
41             return $self->get_scalar;
42         }
43     }
44
45     method get_scalar {
46         
47         my $left = $self->rest_of_line;
48
49         # only allow simple scalars
50         if ($left =~ s/^ ( \$ [a-z_] [a-z0-9_]* ) //ix) {
51
52             my $found = $1;
53
54             $self->strip_from_linestr( length $found );
55
56             return qq{"$found"};
57         }
58
59         # nothing suitable found
60         else {
61             return undef;
62         }
63     }
64 }