[Koha-cvs] CVS: koha/misc/translator TmplTokenizer.pm,1.4,1.5

Ambrose Li acli at users.sourceforge.net
Tue Feb 17 04:17:57 CET 2004


Update of /cvsroot/koha/koha/misc/translator
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13338

Modified Files:
	TmplTokenizer.pm 
Log Message:
Still more bugfixes for my own bugs.

$readahead is now an array @readahead which can contain TmplToken objects,
so "ungetting" tokens should not disturb the line number counter any more.


Index: TmplTokenizer.pm
===================================================================
RCS file: /cvsroot/koha/koha/misc/translator/TmplTokenizer.pm,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -r1.4 -r1.5
*** TmplTokenizer.pm	17 Feb 2004 02:45:27 -0000	1.4
--- TmplTokenizer.pm	17 Feb 2004 03:17:48 -0000	1.5
***************
*** 85,89 ****
  # End of the hideous stuff
  
! use vars qw( $readahead $lc_0 $lc $syntaxerror_p );
  use vars qw( $cdata_mode_p $cdata_close );
  
--- 85,89 ----
  # End of the hideous stuff
  
! use vars qw( @readahead $lc_0 $lc $syntaxerror_p );
  use vars qw( $cdata_mode_p $cdata_close );
  
***************
*** 152,171 ****
      my($it, $kind);
      my $eof_p = 0;
!     if (!defined $readahead || !length $readahead) {
  	my $next = scalar <$h>;
  	$eof_p = !defined $next;
  	if (!$eof_p) {
  	    $lc += 1;
! 	    $readahead .= $next;
  	}
      }
      $lc_0 = $lc;			# remember line number of first line
!     if ($eof_p && !length $readahead) {	# nothing left to do
  	;
!     } elsif ($readahead =~ /^\s+/s) {	# whitespace
! 	($kind, $it, $readahead) = (TmplTokenType::TEXT, $&, $');
      # FIXME the following (the [<\s] part) is an unreliable HACK :-(
!     } elsif ($readahead =~ /^(?:[^<]|<[<\s])+/s) {	# non-space normal text
! 	($kind, $it, $readahead) = (TmplTokenType::TEXT, $&, $');
  	warn_normal "Unescaped < in $it\n", $lc_0
  		if !$cdata_mode_p && $it =~ /</s;
--- 152,176 ----
      my($it, $kind);
      my $eof_p = 0;
!     pop @readahead if @readahead && !ref $readahead[$#readahead]
! 	    && !length $readahead[$#readahead];
!     if (!@readahead) {
  	my $next = scalar <$h>;
  	$eof_p = !defined $next;
  	if (!$eof_p) {
  	    $lc += 1;
! 	    push @readahead, $next;
  	}
      }
      $lc_0 = $lc;			# remember line number of first line
!     if (@readahead && ref $readahead[$#readahead]) {	# TmplToken object
! 	my $t = pop @readahead;
! 	($it, $kind, local $lc) = ($t->string, $t->type, $t->line_number);
!     } elsif ($eof_p && !@readahead) {	# nothing left to do
  	;
!     } elsif ($readahead[$#readahead] =~ /^\s+/s) {	# whitespace
! 	($kind, $it, $readahead[$#readahead]) = (TmplTokenType::TEXT, $&, $');
      # FIXME the following (the [<\s] part) is an unreliable HACK :-(
!     } elsif ($readahead[$#readahead] =~ /^(?:[^<]|<[<\s])+/s) {	# non-space normal text
! 	($kind, $it, $readahead[$#readahead]) = (TmplTokenType::TEXT, $&, $');
  	warn_normal "Unescaped < in $it\n", $lc_0
  		if !$cdata_mode_p && $it =~ /</s;
***************
*** 174,190 ****
  	for (;;) {
  	    if ($cdata_mode_p) {
! 		if ($readahead =~ /^$cdata_close/) {
! 		    ($kind, $it, $readahead) = (TmplTokenType::TAG, $&, $');
  		    $ok_p = 1;
  		} else {
! 		    ($kind, $it, $readahead) = (TmplTokenType::TEXT, $readahead, undef);
  		    $ok_p = 1;
  		}
! 	    } elsif ($readahead =~ /^$re_tag_compat/os) {
! 		($kind, $it, $readahead) = (TmplTokenType::TAG, "$1>", $3);
  		$ok_p = 1;
  		warn_normal "SGML \"closed start tag\" notation: $1<\n", $lc_0 if $2 eq '';
! 	    } elsif ($readahead =~ /^<!--(?:(?!-->).)*-->/s) {
! 		($kind, $it, $readahead) = (TmplTokenType::COMMENT, $&, $');
  		$ok_p = 1;
  		warn_normal "Syntax error in comment: $&\n", $lc_0;
--- 179,195 ----
  	for (;;) {
  	    if ($cdata_mode_p) {
! 		if ($readahead[$#readahead] =~ /^$cdata_close/) {
! 		    ($kind, $it, $readahead[$#readahead]) = (TmplTokenType::TAG, $&, $');
  		    $ok_p = 1;
  		} else {
! 		    ($kind, $it) = (TmplTokenType::TEXT, pop @readahead);
  		    $ok_p = 1;
  		}
! 	    } elsif ($readahead[$#readahead] =~ /^$re_tag_compat/os) {
! 		($kind, $it, $readahead[$#readahead]) = (TmplTokenType::TAG, "$1>", $3);
  		$ok_p = 1;
  		warn_normal "SGML \"closed start tag\" notation: $1<\n", $lc_0 if $2 eq '';
! 	    } elsif ($readahead[$#readahead] =~ /^<!--(?:(?!-->).)*-->/s) {
! 		($kind, $it, $readahead[$#readahead]) = (TmplTokenType::COMMENT, $&, $');
  		$ok_p = 1;
  		warn_normal "Syntax error in comment: $&\n", $lc_0;
***************
*** 196,200 ****
  	last if $eof_p;
  	    $lc += 1;
! 	    $readahead .= $next;
  	}
  	if ($kind ne TmplTokenType::TAG) {
--- 201,205 ----
  	last if $eof_p;
  	    $lc += 1;
! 	    $readahead[$#readahead] .= $next;
  	}
  	if ($kind ne TmplTokenType::TAG) {
***************
*** 210,214 ****
  	}
  	if (!$ok_p && $eof_p) {
! 	    ($kind, $it, $readahead) = (TmplTokenType::UNKNOWN, $readahead, undef);
  	    $syntaxerror_p = 1;
  	}
--- 215,219 ----
  	}
  	if (!$ok_p && $eof_p) {
! 	    ($kind, $it, $readahead[$#readahead]) = (TmplTokenType::UNKNOWN, $readahead[$#readahead], undef);
  	    $syntaxerror_p = 1;
  	}
***************
*** 235,239 ****
  	last if !defined $next;
  	    if (defined $next && $next->string =~ /$cdata_close/i) {
! 		($lc, $readahead) = ($lc_prev, $next->string . $readahead);
  		$cdata_mode_p = 0;
  	    }
--- 240,245 ----
  	last if !defined $next;
  	    if (defined $next && $next->string =~ /$cdata_close/i) {
! 		push @readahead, $next; # push the entire TmplToken object
! 		#$lc = $lc_prev; XXX
  		$cdata_mode_p = 0;
  	    }





More information about the Koha-cvs mailing list