/***************************************************************************/
// "Меркурий"-"Правда" - open source переводчик
// распространяется в соответсвии с лицензией GNU v 2.0
//
// словарь переводов слов и словосочетаний
// Анисимов Д.В. сегодня
/***************************************************************************/
# ifndef SLOWO3_H
# define SLOWO3_H
# include <mylib.h>
# include <grammar.h>
struct t_sWord
{ long sy ; // ссылка на слово t_Slowo3->Mass
char *str ; // ссылка на слово t_Slowo3->Mass
short i_struct ; // индекс структуры в t_Grammar->Trans
short order ; // смысловой индекс типа<1>
t_Form Param ; // константные параметры
} ;
// -------- структура оригинала или перевода ----------
struct t_sStruct
{ long sy_word ; // индекс первого слова структуры в t_Slowo3->Word
// сюда же можно запихнуть число n_From при трансляции
t_sWord *Word ; // ссылка на то же самое
short n_Word ; // число слов в этой структуре
short i_struct ; // индекс структуры в t_Grammar->Trans
t_Form Param ; // константные параметры
long i_relation ;// индекс таблицы передачи параметров t_Slowo3->Relation
} ;
// -------- одна строка перевода -------------------------
struct t_sRecord
{ long sy_struct, // индекс первой структуры в t_Slowo3->Struct
n_struct ; // число таких структур (минимум две)
long i_dict ; // индекс словаря
};
// --------- элемент дерева поиска ------------------------
struct t_sTree
{ long up,down,n_down ;
long first,last ; // индекс первой и последней (включительно) Record,
// входящих в это поддерево
short rang ; // номер слова в искомой структуре
char empty ; // признак, в поддереве нельзя использовать
// алфавитный поиск
char unused ;
} ;
// ---------- словарь переводов ---------------------------------------
class t_Slowo3
{
private:
char FileName[40] ;
t_Format1 *Format ; // формат словаря
uchar *Mass ; // массив слов, запись типа "S[word]=S[слово]"
t_sWord *Word ; // ссылка на одну запись типа "S<1>(Р)[собака]"
t_sStruct *Struct ; // ссылка на одну запись типа "GS:@0[a hot]S<1>[dog];"
t_sRecord *Record ; // индекс Struct, с которой начинается очередная
// запись типа S[word]=S[слово]
t_sTree *Tree ; // дерево для поиска структур
t_Relation *Relation ;// таблицы передачи параметров
long l_Mass,l_Mass1 ; // длинна массива Mass
long n_Word ;
long n_Struct ; // число структур
long n_Record ; // число записей
long n_Tree ; // длинна Tree
long n_Relation;// длинна Relation
private:
t_longList Antwort ; // массив ответов
public:
t_Slowo3( void );
void del( void );
void read( char *Dir, t_Grammar *Gr );
void read( char *File, t_Format1 *Format );
char read_bin( char *File );
void write_bin( char *File );
void make( char *_Mass, t_Format1 *Format );
void s_universe( short i_word, short i_struct );
void find( char *From, short i_struct, t_longList *Antwort );
char *translate_word_i( char *From, long i_slowo, short i_slowo1=0 );
char *translate_word_s( char *From, short i_struct, short i_slowo1=0 );
short part( char *From, short *i_Part );
t_Form struct_param( long i_slowo, long i_variant=0 );
t_Form word_param( long i_slowo, long i_variant, long i_word );
t_Format1 *format( void );
t_sRecord *record( long i_record );
long n_record( void );
char is_atom( long i_record );
t_sTree *tree( long i_tree );
inline t_sStruct *sstruct( long i_struct );
t_sStruct *get_from( long i_slowo );
t_sStruct *get_to( long i_slowo, long i_slowo1=0 );
t_RelationList1 get_relation( long i_slowo, long i_variant );
short get_n_perevod( long i_slowo );
char *word_src( long i_tree );
char *word_src1( long i_slowo );
void print_record( FILE *fw, long i_record );
void print_param( FILE *fw, char to, short i_struct, t_Form &Param );
void add_new( char *Dir, char *str );
private:
void read0( char *File );
void make0( char *Mass );
void parse( void );
void make_relation1( char fdst, t_sStruct *S, char *Str );
void make_relation2( char fdst, t_sStruct *S, long i_word, char *Str, long &j_Relation );
short find_value1( short i_struct, short i_param, char fdst, char *Str1 );
short find_rename( char *Str );
void sort0( void );
void split_unorder( void );
void make_tree( void );
void s_universe1( short i_word, long i_tree );
void s_universe2( char *From, short i_word, long i_tree );
char find_bin( char *From1, long i_tree );
char find_bin1( char *From1, long i_tree );
long find_mutt( long i_tree );
long root_of_struct( short i_struct );
friend class t_Core ;
};
# endif