package Data::Stag::ITextWriter;
=head1 NAME
Data::Stag::ITextWriter
=head1 SYNOPSIS
=cut
=head1 DESCRIPTION
=head1 PUBLIC METHODS -
=cut
use strict;
use base qw(Data::Stag::Writer);
use vars qw($VERSION);
$VERSION="0.11";
sub fmtstr {
return 'itext';
}
sub stack {
my $self = shift;
$self->{_stack} = shift if @_;
return $self->{_stack};
}
sub indent_txt {
my $self = shift;
my $stack = $self->stack;
return " " x scalar(@$stack);
}
sub o {
my $self = shift;
my @o = @_;
$self->addtext($self->indent_txt() . "@o");
}
sub start_event {
my $self = shift;
my $ev = shift || '';
my $stack = $self->stack;
my $tag = "$ev: ";
if ($self->use_color) {
$tag = color('red').$ev.color('reset').':';
}
$self->addtext("\n" . $self->indent_txt() . $tag);
push(@$stack, $ev);
}
sub end_event {
my $self = shift;
my $ev = shift || '';
my $stack = $self->stack;
my $top = pop @$stack;
use Carp;
$top eq $ev or confess("$top ne $ev");
return $ev;
}
sub evbody {
my $self = shift;
my $body = shift;
my $str = itextesc($body);
if ($self->use_color) {
$str = color('white').$str;
}
$self->addtext($str);
return;
}
sub itextesc {
my $w = shift;
if (!defined($w)) {
$w='';
}
$w =~ s/:/\\:/g;
return $w;
}
# this should already be require'd in Writer.pm
sub color {
Term::ANSIColor::color(@_);
}
1;