XML-Filter-Glossary

 view release on metacpan or  search on metacpan

lib/XML/Filter/Glossary.pm  view on Meta::CPAN

    $self->{'__cache'}{$keyword} = $self->{'__lookup'}->result();
  }

  return $self->{'__cache'}{$keyword};
}

sub process_result {
  my $self   = shift;
  my $result = shift;

  my $cdata   = undef;
  my $markup  = undef;
  my $element = undef;

  # Hack Until I figure where to tweak
  # the REX expressions. Ick ick ick.
  $$result =~ s/></> </gm;

  while (not $$result =~ m/\G\z/gc) {
    $$result =~ m/\G($TextSE)?($MarkupSPE)*/gcm;
    # print "PARSE [$1] [$2]\n";

    if ($element) {
      $markup .= $1;
    } else {
      $cdata .= $1;
    }

    if ($2) {

      if ($cdata) {
	$self->SUPER::characters({Data=>$cdata});
	# print "CDATA '$cdata'\n";
	$cdata = undef;
      }
      
      my $_markup = $2;
      $markup .= $_markup;
      
      $_markup =~ /^<(\/)?([^\s>]+)/;
      
      if (($1) && ($element eq $2)) {
	# print "MARKUP '$markup'\n";
	

lib/XML/Filter/Glossary.pm  view on Meta::CPAN


	  $markup  = undef;
	  $element = undef;
	}
      }

    }
    
  }

  if ($cdata) {
    $self->SUPER::characters({Data=>$cdata});
  }

  if ($markup) {
    print STDERR "WARNING\nThere was a bunch of unbalanced markup leftover: '$markup'\n";
    $self->SUPER::characters({Data=>$markup});
  }

  return 1;
}



( run in 1.052 second using v1.01-cache-2.11-cpan-995e09ba956 )