String-Tagged-Terminal
view release on metacpan or search on metacpan
lib/String/Tagged/Terminal.pm view on Meta::CPAN
my %tags;
while( pos($s) < length($s) ) {
if( $s =~ m/\G([^\e]+)/gc ) {
$self->append_tagged( $1, %tags );
}
elsif( $s =~ m/\G\e\[($CSI_args)m/gc || $s =~ m/\G\x9b($CSI_args)m/gc ) {
my $args = $1;
length $args or $args = "0";
foreach my $arg ( split m/;/, $args ) {
my ( $a0, @arest ) = map { int $_ } split m/:/, $arg;
# Reset
if( $a0 == 0 ) { %tags = () }
# Simple boolean attributes
elsif( $a0 == 1 ) { $tags{bold} = 1; }
elsif( $a0 == 22 ) { delete $tags{bold}; }
elsif( $a0 == 4 ) { $tags{under} = 1; }
elsif( $a0 == 24 ) { delete $tags{under}; }
elsif( $a0 == 3 ) { $tags{italic} = 1; }
( run in 1.776 second using v1.01-cache-2.11-cpan-71847e10f99 )