Acme-Mobile-Therbligs
view release on metacpan or search on metacpan
lib/Acme/Mobile/Therbligs.pm view on Meta::CPAN
my $text = shift;
my $case = shift;
my $debug = shift; # for diagnostics
unless (ref($self)) {
($debug, $case, $text, $self) = ($case, $text, $self, $Self);
}
my $last = ""; # last character
my $shift = 0; # shift flag
my $start = $case; # sentence start flag
my $thurb = 0; # therblig count
foreach my $char (split //, $text) {
if ($debug) {
print STDERR
"# last=$last char=$char start=$start shift=$shift thurb=$thurb\n";
}
unless ($self->{NO_SHIFT_CAPS}) {
# Note: it assumes characters are lower-case rather than
# upper-case without shifting.
if ($char ne lc($char)) {
if ($case) {
unless ($shift||$start) {
$shift = 1;
$thurb ++;
}
}
$char = lc($char);
} elsif ($case) {
if ((!$self->{NO_SENTENCE_CAPS}) && $start && ($char =~ /[\w]/)) {
$thurb += 2; # 2 shifts for initial lowercase
}
if ($shift && ($char =~ /[\w]/)) {
$shift = 0;
$thurb ++;
}
}
unless ($self->{NO_SENTENCE_CAPS}) {
$start = 0, if ($char =~ /[\w]/);
$start = 1, if ($char =~ /[\.\!\?]/);
}
}
croak "Unknown character: $char",
unless (exists $self->{CHAR}->{$char});
$thurb += $self->{CHAR}->{$char}->[1];
$thurb += $self->{SAME_KEY},
if ($self->{CHAR}->{$char}->[0] eq ($self->{CHAR}->{$last}->[0]||""));
$last = $char;
}
if ($debug) {
print STDERR
"# last=$last char= start=$start shift=$shift thurb=$thurb\n";
}
return $thurb;
}
=back
=head1 AUTHOR
( run in 0.229 second using v1.01-cache-2.11-cpan-0d8aa00de5b )