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.965 second using v1.01-cache-2.11-cpan-39bf76dae61 )