Ecma48-Util
view release on metacpan or search on metacpan
lib/Ecma48/Util.pm view on Meta::CPAN
#*** remove_fillchar *** js15.10.2012
#* return input with removed DEL, NUL and CRs directly before other CRs
#* removed: ... and SPACE-BS pairs if the are not inside a word.
sub remove_fillchars ($)
{ use re 'taint'; my $re=qr/[\00\x7F]|\r(?=\r)/; # |(?<!\w)\x20\cH|\x20\cH(?!\w)
return defined wantarray ? $_[0]=~s/$re//gr : $_[0]=~s/$re//g;
}
#*** remove_bs_bolding *** js15.10.2012
sub remove_bs_bolding ($) # ecma-6 not part of ecma-48
{ use re 'taint'; my $re=qr/([[:graph:]])\cH(?=\g1)/;
return defined wantarray ? $_[0]=~s/$re//gr : $_[0]=~s/$re//g;
}
#*** replace_bs_bolding *** js17.10.2012
sub replace_bs_bolding ($;$$$) # ecma-6 not part of ecma-48
{ use re 'taint';
my $s=defined wantarray ? \do{ my $dummy=$_[0] } : \$_[0];
my $b=$_[1]//1; my $e=$_[2]//closing_seq($b); my $i=$_[3]//'';
for ($b,$e) { $_="\e[${_}m" if /^[\d;]+\z/ }
#for ($$s) { s/([[:graph:]])(?:\cH\g1)+/$b$1$e/g; s/\Q$e$b//g; }
my $emiss=0;
$$s=~s{(?| ([[:graph:]])(?:(\cH)\g1)+ | (.)() )}
{ my $r;
if (!$2) { $r=($emiss ? $e : '').$1; $emiss=0; }
else { $r=($emiss ? $i : $b).$1; $emiss=1; }
$r
}gsex;
$$s.=$e if $emiss;
return $$s;
}
# ---------------------------------------------------------------------------
( run in 0.388 second using v1.01-cache-2.11-cpan-3cd7ad12f66 )