App-sdview-Output-Tickit

 view release on metacpan or  search on metacpan

lib/App/sdview/Output/Tickit.pm  view on Meta::CPAN

toggle case-insensitivity. Press C<< <Alt-w> >> to toggle whole-word matching.

=cut

# Override default output format
require App::sdview;
$App::sdview::DEFAULT_OUTPUT = "tickit"
   if $App::sdview::DEFAULT_OUTPUT eq "terminal" and -t STDOUT;

my @HIGHLIGHT_PEN = (
   fg => 16, # avoid bold-black
   bg => "magenta",
   b  => 1,
);

my @SELECT_PEN = (
   bg => "green",
);

field $t;
field $scroller;

lib/App/sdview/Output/Tickit.pm  view on Meta::CPAN

   my $margin = $opts{margin} // 0;
   my $leader = $opts{leader};
   my $indent = $opts{indent};

   $scroller->push( Tickit::Widget::Scroller::Item::Text->new( "" ) ) if $_nextblank;

   my %parastyle = App::sdview::Style->para_style( $para->type )->%*;


   my $itempen = Tickit::Pen->new;
   $itempen->chattr( b  => 1 ) if defined $parastyle{bold};
   $itempen->chattr( u  => 1 ) if defined $parastyle{under};
   $itempen->chattr( i  => 1 ) if defined $parastyle{italic};
   $itempen->chattr( af => 1 ) if defined $parastyle{monospace};

   $itempen->chattr( fg => $parastyle{fg}->as_xterm->index )
      if defined $parastyle{fg};
   $itempen->chattr( bg => $parastyle{bg}->as_xterm->index )
      if defined $parastyle{bg};

   $margin += ( $parastyle{margin} // 0 );
   $indent //= 0;

   if( defined $leader ) {
      my $leaderlen = Tickit::Utils::textwidth( $leader );

      my %leaderstyle = App::sdview::Style->para_style( "leader" )->%*;
      $leaderstyle{$_} and $leader->apply_tag( 0, $leaderlen, $_ => $leaderstyle{$_} )
         for qw( fg bg bold under italic monospace );
   }

   my $item;
   if( $para->type eq "verbatim" ) {
      # This handily deals with the paragraph bg too
      my $text = App::sdview::Style->convert_str( $para->text );

      $item = App::sdview::Output::Tickit::_FixedWidthItem->new(
         text         => $text,
         margin_left  => $margin + $indent,

lib/App/sdview/Output/Tickit.pm  view on Meta::CPAN

}

# Logic kindof stolen from T:W:Scroller::Item::(Rich)Text but modified

sub _convert_color_tag ($n, $v)
{
   return $n => $v->as_xterm->index;
}

my %convert_tags = (
   bold      => "b",
   under     => "u",
   italic    => "i",
   strike    => "strike",
   blink     => "blink",
   monospace => sub ($, $v) { "af" => ( $v ? 1 : 0 ) },
   reverse   => "rv",
   fg        => \&_convert_color_tag,
   bg        => \&_convert_color_tag,
);

lib/App/sdview/Output/Tickit.pm  view on Meta::CPAN

class App::sdview::Output::Tickit::_SearchBox
   :isa(Tickit::Widget)
{
   use constant WIDGET_PEN_FROM_STYLE => 1;

   use constant CAN_FOCUS => 1;

   use Tickit::Style;
   style_definition base =>
      bg => "grey",
      fg => 16, # colour 16 is black but doesn't become grey on bold
      b  => 1,

      bad_fg => 1;

   method lines { 1 }
   method cols  { 1 }

   field $float :writer;

   field $leader = "Search: ";

t/20item-paragraph.t  view on Meta::CPAN

use Test2::V0;

use Tickit::Test;

use App::sdview::Output::Tickit;

# Testing is simpler with a smaller window
my $term = mk_term lines => 10, cols => 30;

my $str = String::Tagged->new( "Some plain and " )
   ->append_tagged( "bold", bold => 1 )
   ->append_tagged( " text" );

my $rb = Tickit::RenderBuffer->new( lines => 10, cols => 30 );

{
   my $item = App::sdview::Output::Tickit::_ParagraphItem->new(
      text => $str,
      indent => 0,
      margin_left => 4,
      margin_right => 2,

t/20item-paragraph.t  view on Meta::CPAN

   $item->render( $rb,
      firstline => 0,
      lastline => 0,

      width => 30,
      height => 1,
   );
   $rb->flush_to_term( $term );

   is_display( [
         [BLANK(4), TEXT("Some plain and "), TEXT("bold",b=>1), TEXT(" text")],
      ],
      'Display contains item initially' );

   clear_term;

   is( $item->height_for_width( 25 ), 2,
      'item is 2 lines tall at width=25' );

   $item->render( $rb,
      firstline => 0,
      lastline => 1,

      width => 25,
      height => 2,
   );
   $rb->flush_to_term( $term );

   is_display( [
         [BLANK(4), TEXT("Some plain and "), TEXT("bold",b=>1)],
         [BLANK(4), TEXT("text")],
      ],
      'Display contains reflowed item' );
}

clear_term;

# RT150015
{
   use String::Tagged 0.23;  # bugfix

   my $item = App::sdview::Output::Tickit::_ParagraphItem->new(
      text => String::Tagged->new( "A " )
         ->append_tagged( "B C", bold => 1 )
         ->append_tagged( " D E" ),
      indent => 0,
      margin_left => 0,
      margin_right => 0,
   );

   $item->height_for_width( 30 );

   $item->render( $rb,
      firstline => 0,

t/20item-paragraph.t  view on Meta::CPAN

      lastline => 0,

      width => 30,
      height => 1,
   );
   $rb->flush_to_term( $term );

   my @HLPEN = ( b=>1,bg=>5,fg=>16 );

   is_display( [
         [TEXT("Som"), TEXT("e",@HLPEN), TEXT(" plain and "), TEXT("bold",b=>1), TEXT(" t"), TEXT("e",@HLPEN), TEXT("xt")],
      ],
      'Display contains highlights' );

   $match->[2]++;

   $item->render( $rb,
      firstline => 0,
      lastline => 0,

      width => 30,
      height => 1,
   );
   $rb->flush_to_term( $term );

   my @SELPEN = ( b=>1,bg=>2,fg=>16 );

   is_display( [
         [TEXT("Som"), TEXT("e",@SELPEN), TEXT(" plain and "), TEXT("bold",b=>1), TEXT(" t"), TEXT("e",@HLPEN), TEXT("xt")],
      ],
      'Display highlight selected' );
}

clear_term;

# indent
{
   my $item = App::sdview::Output::Tickit::_ParagraphItem->new(
      text => String::Tagged->new( "AAAAA " x 12 ),



( run in 0.247 second using v1.01-cache-2.11-cpan-5dc5da66d9d )