Data-Stag
view release on metacpan or search on metacpan
2002-12-20 - Added Data::Stag::Writer and tidied up writer classes
- added stag-splitter.pl script
- fixed Makefile.PL
Version 0.03
============
2003-04-29 - Fixed bug with empty XML tags being treated as nulls
- Fixed bug with XML parsing/export where zero-valued
pcdata was treated as empty string
(new test emptytag.t added for these)
- Modified behaviour of BaseHandler - now the whole
stag object is passed. This can be manipulated by
the intercepting code directly
- Added makehandler() to Data::Stag
- BIG CHANGE: behaviour of 'get' now different;
if the value 'got' is a terminal, will return
the node data; if it is non-terminal, it will
return the node itself (like getnode()).
Data/Stag/BaseHandler.pm view on Meta::CPAN
if (!$self->{sax_stack}) {
$self->{sax_stack} = [];
}
push(@{$self->{sax_stack}}, $name);
push(@{$self->{is_nonterminal_stack}}, 0);
if (@{$self->{is_nonterminal_stack}} > 1) {
$self->{is_nonterminal_stack}->[-2] = 1;
}
# check if we need an event
# for any preceeding pcdata
my $str = $self->{__str};
if (defined $str) {
# mixed attribute text - use element '.'
$str =~ s/^\s*//;
$str =~ s/\s*$//;
if ($str) {
$self->event(".", $str) if $str;
}
$self->{__str} = undef;
}
Data/Stag/ITextParser.pm view on Meta::CPAN
$self->pop_to_level(0, $txt, \@stack);
return;
}
sub pop_to_level {
my $self = shift;
my $indent = shift;
my $txt = shift;
my $stack = shift;
# if buffered pcdata, export it
if (defined $txt) {
# unescape :s
$txt =~ s/^\\:/:/g;
$txt =~ s/([^\\])\\:/$1:/g;
$self->evbody($txt);
}
while (scalar(@$stack) &&
$stack->[-1]->[0] >= $indent) {
$self->end_event($stack->[-1]->[1]);
pop(@$stack);
Data/Stag/IndentWriter.pm view on Meta::CPAN
sub start_event {
my $self = shift;
my $ev = shift;
my $stack = $self->stack;
if ($ev eq '@') {
$self->o('[');
$self->in_attr(1);
}
elsif ($ev eq '.') {
# pcdata for element with attributes
# do nothing
}
elsif ($self->in_attr) {
if ($self->in_attr > 1) {
$self->o(' ');
}
$self->o("$ev=");
$self->in_attr(2);
}
elsif ($ev eq '') {
Data/Stag/IndentWriter.pm view on Meta::CPAN
my $stack = $self->stack;
my $top = pop @$stack;
$top eq $ev or confess("$top ne $ev");
if ($self->in_attr) {
if ($ev eq '@') {
$self->in_attr(0);
$self->o(']');
}
}
elsif ($ev eq '.') {
# end of pcdata for element with attributes
}
else {
if (!@$stack) {
$self->o("\n");
}
}
return $ev;
}
sub evbody {
my $self = shift;
Data/Stag/XMLWriter.pm view on Meta::CPAN
}
my $stack = $self->stack;
if (!@$stack) {
$self->o($self->first_line || "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
}
if ($ev eq '@') {
$self->in_attr(1);
}
elsif ($ev eq '.') {
# pcdata for element with attributes
# do nothing
}
elsif ($self->in_attr) {
$self->o(" $ev=");
}
elsif ($ev eq '') {
# ignore null nodes
}
else {
$self->ensure_closed;
Data/Stag/XMLWriter.pm view on Meta::CPAN
if (!$ev) {
$ev = $popped;
}
if ($self->in_attr) {
if ($ev eq '@') {
$self->in_attr(0);
$self->ensure_closed;
}
}
elsif ($ev eq '.') {
# end of pcdata for element with attributes
}
else {
$self->ensure_closed;
if ($self->{_nl}) {
$self->o("\n" . $self->indent_txt)
}
$self->o("</$ev>");
$self->{_nl} = 1;
if (!@$stack) {
$self->o("\n");
my ($f1, $f2) = @_;
}
sub composite {
my $fset = shift;
return
Node(gene=>[
[transcript=>[
]
],
[funcdata=>[
[function=>'tm receptor'],
],
],
]
);
}
my $intersects_f1 = mk_intersects($f);
print 111 if $intersects_f1->($f);
print 222 if $intersects_f1->(Node(feature=>[
( run in 1.071 second using v1.01-cache-2.11-cpan-995e09ba956 )