/***************************************************************************/
// "Меркурий"-"Правда" - open source переводчик
// распространяется в соответсвии с лицензией GNU v 2.0
//
// Простенький такой текстовый редактор
// Анисимов Д.В. сегодня
/***************************************************************************/
# ifndef EDIT_H
# define EDIT_H
# include <stdio.h>
# include <stdlib.h>
# include <window.h>
struct t_KeyWord
{ char Begin[32], l_Begin ;
char End[32], l_End ;
char f ;
};
/* --------------------------------- образ текста в памяти --------------- */
class t_Text
{
public: // не забыть убрать это безобразие
char *Text ; // участок текста хранящийся в памяти
long Length ; // длинна текста, хранящегося в памяти
long i_str,i_pos ; // текущая строка и ее позиция
long str_Txt ; // число строк в массиве Text
char fformat ; // признак "спецформата"
public:
t_Text( void );
~t_Text( void );
void init( char *Text ); // инициировать текст строкой
void clear( void );
void write_file( char *name ); // записать текст в файл
char read_file( char *name ); // прочитать тект из файла
char operator [] long i );
long length( );
long str_txt( );
long pos_str( long i_Str ); // начало строки i_Str
char *get_str( long i_Str ); // прочесть из текста строку номер i_Str
char *get_str( long i_Str, char *Buf ); // прочесть строку номер i_Str в буфер
void put_str_ipos( long i_pos, char *str ); // вставить в текст строку str
void put_str_istr( long i_str, char *str ); // вставить в текст строку str
long get_text1( long Str1, long Str2, char *List ); // вытащить из текста кусок
long get_text2( long Str1, long Str2, char *List ); // вытащить из текста кусок без стирания
void put_text1( long Str1, char *List, long l_List );
void put_text1p( long Pos1, long Pos2, char *List ); // вставить фразу взамен
void insert_str( long PY ); // вставить пустую строку
void delete_str( long PY ); // удалить строку PY
short max_length_str( void );
char* get_frasa( long pos );
char* get_word_punkt( long pos );
void put_frasa( long pos, char *Frasa );
long next_frasa( long pos );
long prev_frasa( long pos );
long begin_frasa( long pos );
long end_frasa( long pos );
char (*is_const)( char *Str ); // функция определения "слова с точкой"
long get_pos_xy( long py, long px );
void get_xy_pos( long pos1, long *_py, long *_px );
} ;
/* --------- собственно редактор ---------------------------------------- */
class t_Edit : public t_Win
{
protected:
t_Text *Text ;
long Begin_Y ; /* первая строка, видимая в окне */
short Begin_X ; /* первая позиция, видимая в окне */
short PX ; /* положение курсора */
long PY ; /* номер редактируемой строки */
long old_PY ;
short otm1,otm2, /* номера выделеных символов */
Otm1,Otm2 ; /* номера выделеных символов (упорядоченные) */
long str1,str2, /* номера выделеных строк */
Str1,Str2 ; /* номера выделеных строк (упорядоченные) */
char Str[256], /* текущая строка */
Buf[256] ;
char fview ; // если fview==1 - то запрет редактирования
char REG ; /* вставка-замена */
char Flag_b ; /* флаг начала работы с буфером */
t_KeyWord *KeyWord ; // слова, которые выделяются другим цветом
long n_KeyWord ;
public :
void begin( void );
e_WinMsg main( void );
e_WinMsg loop( short ZZ, short key1, short key2 );
void paint_main( void ); // отобразить текст
void paint( long Otm1, long Otm2 ); // отобразить текст
void paint_current( short Otm1, short Otm2 );// отобразить строку
void set_string_color( char *Str, short x1, short y );
short hot_key( short Taste ); // обработка быстрых клавиш
e_WinMsg int_to_msg( short i );
void raden_y3( );
short raden_Y( long PY ); // действия связанные со сменой текущей строки
short raden_X( short px ); // действия связанные со сменой текущей колонки
void delet_str1( short px ); // удалить из текущей строки символ
void insert_str1( short px, short key ); // добавить в текущую строку символ
void prepare_text( void ); // подготовка текста перед вызовом меню
short beg_str( void ); // вычислить начало строки
short end_str( void ); // вычислить конец строки
short char_exist( short px ); // есть ли в строке символы
short key_WK( void ); // реакция на клавишу Enter
void key_Delet( void ); // реакция на клавишу Delete
void delet_str( short Otm1,short Otm2,char f=0 ); // удалить текст в буфер
void insert_str( short px ); // вставть буфер в текущую строку
void insert_Buf( long PY ); // вставть буфер
void delet_Buf( long Pos, long Length );
void find_forward( void );
void find_backward( void );
void goto_str( void ); // пойти в заданную строку
void str_shift( char R ); // сдвиг несколких строчек
char find1( void );
char find( char Richt );
void replace( void );
void replace1( void );
void get_str( void ); // синхронизировать Str с Текстом
void set_text( t_Text *Text );
void init( char *_Text );
void set_view( char f ); // установить флаг "только чтение"
void set_keyword( t_KeyWord *KeyWord, long n_KeyWord );
t_Text *text();
} ;
# endif