#!/usr/local/perl/bin/perl -I/www/pasha-src/build
#
# file:         translit2tex
# purpose:      transforms Russian translit in TeX file to koi8
# created:      pasha jul 15 2010
# modified:     pasha may 13 2012
# modification: - whitespaces after \bigskip and \noindent
#               - comment out unused Data::Dumper
# usage:        translit2tex < input > output
#

use strict;
use warnings;
use Text::TeX;
use translit2koi8;

my $in;
{
    local $/;
    undef $/;
    $in = <STDIN>
}

my $start_koi8 = 0;

sub _process ()
  {
	my $token = shift;
	my $ref = ref $token;

	#use Data::Dumper;
	#print 'YOYO ', Dumper $token;

	return if (! defined ($token->[0]));

	if (
		($start_koi8 == 0) && ($token->[0] eq '\begin') && 
		(defined ($token->[3])) && ($token->[3]->[0]->print eq 'koi8')
		)
	  {
		$start_koi8 = 1;
		return;
	  }
	if (
		($start_koi8 == 1) && ($token->[0] eq '\end') && 
		(defined ($token->[3])) && ($token->[3]->[0]->print eq 'koi8')
		)
	  {
		$start_koi8 = 0;
		return;
	  }

	if (($start_koi8 == 1) && ($ref eq 'Text::TeX::Text'))
	  {
		print (translit2koi8 ($token->[0]) . ' ');
	  }
	else
	  {
		if ($ref eq 'Text::TeX::BegArgsToken')
		  {
			print ($token->[0]->[0]->[0]);
		  }
		elsif (($ref ne 'Text::TeX::EndArgsToken') && ($ref ne 'Text::TeX::ArgToken'))
		  {
			print ($token->[0]);
			if ($ref eq 'Text::TeX::Token')
			  {
				print(' ') if (
							   ($token->[0] eq '\bf')       ||
							   ($token->[0] eq '\hbox')     ||
							   ($token->[0] eq '\in')       || 
							   ($token->[0] eq '\noindent') || 
							   ($token->[0] eq '\to') 
							  );
				print ("\n\n") if ($token->[0] eq '\bigskip');
			  }
			print(' ') if 
			  (($token->[0] eq '$') && ($ref eq 'Text::TeX::End::Group'));
		  }

		# arguments
		if (defined ($token->[3]))
		  {
			my @args = ();
			for (@{$token->[3]})
			  {
				push (@args, $_->print);
			  }
			print ('{' . join (',', @args) . '}');
		  }
	  }
  }


my $file = new Text::TeX::OpenFile undef, 
  'string' => $in, 'defaultact' => \&_process;
$file->process();
exit (0);

__END__
