home *** CD-ROM | disk | FTP | other *** search
/ PC Professionell 2004 December / PCpro_2004_12.ISO / files / webserver / tsw / TSW_3.4.0.exe / Apache2 / perl / String.pm < prev    next >
Encoding:
Perl POD Document  |  2002-02-03  |  1.4 KB  |  66 lines

  1. # $Id: String.pm,v 1.4 2002/02/03 12:25:45 matt Exp $
  2.  
  3. package XML::SAX::PurePerl::Reader::String;
  4.  
  5. use strict;
  6. use vars qw(@ISA);
  7.  
  8. use XML::SAX::PurePerl::Reader qw(
  9.     CURRENT
  10.     LINE
  11.     COLUMN
  12.     INTERNAL_BUFFER
  13.     BUFFER
  14.     ENCODING
  15.     EOF
  16. );
  17.  
  18. @ISA = ('XML::SAX::PurePerl::Reader');
  19.  
  20. use constant DISCARDED => 11;
  21.  
  22. sub new {
  23.     my $class = shift;
  24.     my $string = shift;
  25.     my @parts;
  26.     @parts[BUFFER, EOF, LINE, COLUMN, INTERNAL_BUFFER, DISCARDED] =
  27.             ('',   0,   1,    0,      $string,         '');
  28.     return bless \@parts, $class;
  29. }
  30.  
  31. sub next {
  32.     my $self = shift;
  33.     
  34.     $self->[DISCARDED] .= $self->[CURRENT] if defined $self->[CURRENT];
  35.     
  36.     # check for chars in buffer first.
  37.     if (length($self->[BUFFER])) {
  38.         return $self->[CURRENT] = substr($self->[BUFFER], 0, 1, ''); # last param truncates buffer
  39.     }
  40.     
  41.     $self->[CURRENT] = substr($self->[INTERNAL_BUFFER], 0, 1, '');
  42.     
  43.     if ($self->[CURRENT] eq "\x0A") {
  44.         $self->[LINE]++;
  45.         $self->[COLUMN] = 1;
  46.     } else { $self->[COLUMN]++ }
  47.  
  48.     $self->[EOF]++ unless length($self->[INTERNAL_BUFFER]);
  49.     return;
  50. }
  51.  
  52. sub set_encoding {
  53.     my $self = shift;
  54.     my ($encoding) = @_;
  55.  
  56.     XML::SAX::PurePerl::Reader::switch_encoding_string($self->[INTERNAL_BUFFER], $encoding, "utf-8");
  57.     $self->[ENCODING] = $encoding;
  58. }
  59.  
  60. sub bytepos {
  61.     my $self = shift;
  62.     length($self->[DISCARDED]);
  63. }
  64.  
  65. 1;
  66.