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 )