#!/usr/bin/perl -w

=head1 NAME

makecheck.pl - скрипт для создания, функции, проверяющего слова
на предмет наличия в словаре.

=head1 SYNOPSIS

makecheck.pl


=head1 BUGS

На самом деле используется упрощённый формат описания 
аффиксов. Существенны только строчки "prefix", "suffix" 
и строчки, в которых встречается знак ">". Причём 
любая такая строка (кроме закомментированных) 
будет считаться строкой описания аффикса.


=head1 AUTHOR

Роман Семизаров

=cut



use locale;
use POSIX qw (locale_h);
use lib "../lib";
use chgkfiles;

do "../bin/common.pl";

if ((uc 'а') ne 'А') {die "!Koi8-r locale not installed!\n"};


input_files(RULES);

output_files(CHECK);

myprint (CHECK, "#!perl\n\n");

auto_message(CHECK, "makecheck.pl");


myprint(CHECK, 'sub checkit {my $nf=\'\'; my $a; my ($uword,$words)=@_; ');



while ( ($sha,$_)=getstring("\s*>\s*",RULES),$sha )
{
    $sha =~ s/\s+//g;
    s/\s+//g;
    if ( $sha =~ m/^flag\s*\*(.):/ )
    {
        $flag=$1;
    }

    if ($_)
    {
        s/(\#.*)$//g;
        ($f,$s)=split(",");


        if (!$s) {$s = $f; $f=""};
        $f=~s/^-//;

        if ( $sha eq "." )
        {
            $sha="";
        }
        
        if ( $s eq "-")
        { 
          $s=""
        }
        $sha= $sha."\$";
        $s= $s."\$";

myprint (CHECK, "\n\n#-------------------------------------\n\n"); 

        myprint (CHECK, "
           \$\_=\$uword;
           if ((s/$s/$f/) && (m/$sha/) &&  (\$a=\$\$words{\$\_}) && (\$a=~m/$flag/))
           \{
               \$nf.=\"\$\_/$flag \";
           \}");
      }

}

        myprint (CHECK, "
           \$\_=\$uword;
           if (\$\$words{\$\_})
           \{
               \$nf.=\"\$\_/! \";
           \}
          return \$nf;
         ");


myprint (CHECK,"} 1\n")



