Acme-Indent
view release on metacpan or search on metacpan
lib/Acme/Indent.pm view on Meta::CPAN
package Acme::Indent;
$Acme::Indent::VERSION = '0.04';
use strict;
use warnings;
use Carp;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(ai);
our @EXPORT_OK = qw();
sub ai {
my @lines = split m{\n}xms, $_[0];
my $result = '';
my $empty = '';
my $shft = 0;
my $data = 0;
for my $l (@lines) {
unless ($data) {
if ($l =~ m{\A (\s*) \S}xms) {
$shft = length($1);
$data = 1;
}
}
if ($data) {
my ($spaces, $text);
if (length($l) >= $shft) {
$spaces = substr($l, 0, $shft);
$text = substr($l, $shft);
}
else {
$spaces = $l;
$text = '';
}
if ($spaces =~ m{\S}xms) {
carp "Found characters ('$spaces') in indentation zone";
}
if ($text =~ m{\S}xms) {
$result .= $empty.$text."\n";
$empty = '';
}
else {
$empty .= "\n";
}
}
}
return $result;
}
1;
__END__
=head1 NAME
Acme::Indent - Proper indentation for multi-line strings
=head1 SYNOPSIS
use Acme::Indent qw(ai);
my $mini_prog = ai(q^
my $token = 'B';
print "Begin test $token\n";
( run in 2.545 seconds using v1.01-cache-2.11-cpan-75ffa21a3d4 )