package SugarTrail::STM; # STM holder # new() # parse_headers() use strict; use warnings; use Carp; sub new { my $class = shift; my $args = { @_ }; my $self = {}; $self->{args} = $args; return bless $self, $class; } sub parse_headers { my $self = shift; my ($head, $body) = split "\n\n", $self->{text}, 2; my @lines = split "\n", $head; $self->{head} = $head; $self->{body} = $body; foreach (@lines) { my ($n, $v) = split ": ", $_, 2; $self->{meta}->{$n} = $v; } return scalar keys %{ $self->{meta} }; } sub parse_body { my $self = shift; my @lines = split "\n", $self->{body}; $self->{steps} = []; foreach (@lines) { chomp; s/ *$//; my ($line, $cond) = $_ =~ m/^(.*?)(\{(.*)\})?$/; $line =~ s/ *$//; push @{ $self->{steps} }, { line => $line, cond => $cond }; } return scalar @{ $self->{steps} }; } 1;