'under' and 'as' are parameterizable
[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     after inject_code_parts_here (@args) {
8 #        print "INJECT " . $self->get_linestr . "\n";
9         #print "BLOCK $_\n" for @args;
10     }
11
12     after inject_if_block (@args) {
13 #        print "BLOCK " . $self->get_linestr . "\n";
14         #print "BLOCK $_\n" for @args;
15     }
16
17     method rest_of_line {
18
19         $self->skipspace;
20
21         my $linestr = $self->get_linestr;
22         my $left    = substr $linestr, $self->offset;
23
24         return $left;
25     }
26
27     method strip_from_linestr (Int $chars) {
28
29         my $linestr = $self->get_linestr;
30         substr($linestr, $self->offset, $chars) = '';
31         $self->set_linestr($linestr);
32     }
33
34     method get_string {
35
36         my $left = $self->rest_of_line;
37
38         if ($left =~ /^"/ and my $num = Devel::Declare::toke_scan_str $self->offset) {
39
40             my $found = Devel::Declare::get_lex_stuff;
41             Devel::Declare::clear_lex_stuff;
42             
43             $self->strip_from_linestr($num);
44             
45             return qq{"$found"};
46         }
47         else {
48             return $self->get_scalar;
49         }
50     }
51
52     method get_scalar {
53         
54         my $left = $self->rest_of_line;
55
56         if ($left =~ s/^ ( \$ [a-z_] [a-z0-9_]* ) //ix) {
57
58             my $found = $1;
59
60             $self->strip_from_linestr( length $found );
61
62             return qq{"$found"};
63         }
64         else {
65             return undef;
66         }
67     }
68 }