[APPEARANCE]
COLOR = 130, 50, 120;
SIZE_X = 8;
SIZE_Y =6;
[END]

[INTERFACE]DIALOG, "Распознавание текста", 637, 561;STATIC, "Поиск в", 4, 4, 44, 20;COMBO, "Активный по Экрану""Активный по Указателю""Фоновый по Указателю""По скриншоту", 52, 4, 128, 100, int EW;STATIC, "Указатель на окно", 192, 4, 100, 20;EDIT, 296, 4, 124, 20, win W;STATIC, "Указатель на скрин", 440, 4, 104, 20;EDIT, 548, 4, 80, 20, int Screen;STATIC, "Пауза до", 4, 28, 48, 20;EDIT, 56, 28, 112, 20, int P1;STATIC, "База", 4, 52, 36, 20;EDIT, 44, 52, 452, 20, string Base;BUTTON_FILE, "Выбрать файл", 504, 52, 92, 20, Base;STATIC, "Зона распознавания", 4, 76, 112, 20;EDIT, 120, 76, 80, 20, int EX1;EDIT, 208, 76, 80, 20, int EY1;EDIT, 328, 76, 80, 20, int EX2;EDIT, 416, 76, 80, 20, int EY2;STATIC, "Настройки:", 4, 100, 60, 20;STATIC, "Переменные:", 340, 100, 68, 20;CHECK, "Рус", 4, 124, 40, 20, int G1;CHECK, "Англ", 56, 124, 48, 20, int G2;CHECK, "Цифры", 112, 124, 56, 20, int G3;CHECK, "Знаки", 176, 124, 52, 20, int G4;STATIC, "Весь Текст будет в", 340, 124, 152, 20;EDIT, 552, 124, 76, 20, string T;STATIC, "Фильтр (1-40)", 4, 148, 76, 20;EDIT, 268, 148, 52, 20, int F;STATIC, "Строки Текста будут в массиве", 340, 148, 208, 20;EDIT, 552, 148, 76, 20, string Str_T;STATIC, "Сглаживание (1-3) Или -1", 4, 172, 136, 20;EDIT, 268, 172, 52, 20, int S;STATIC, "Количество строк", 340, 172, 100, 20;EDIT, 552, 172, 76, 20, int Kol_Str_T;STATIC, "Контрасность (0-100) Или -1", 4, 196, 156, 20;EDIT, 268, 196, 52, 20, int K;STATIC, "Количество символов", 340, 196, 124, 20;EDIT, 552, 196, 76, 20, int Kol;STATIC, "Удалять гор. линии длинее..  Или -1", 4, 220, 188, 20;EDIT, 268, 220, 52, 20, int D1;STATIC, "Координаты строк X", 340, 220, 108, 20;EDIT, 552, 220, 76, 20, int X_Str;STATIC, "Удалять верт. линии длинее..  Или -1", 4, 244, 196, 20;EDIT, 268, 244, 52, 20, int D2;STATIC, "Координаты строк Y", 340, 244, 108, 20;EDIT, 552, 244, 76, 20, int Y_Str;CHECK, "Учитывать Цвета текста (через запятую)", 4, 268, 240, 20, int GT;STATIC, "Координаты символов X", 340, 268, 132, 20;EDIT, 552, 268, 76, 20, int X;EDIT, 4, 292, 252, 20, int Col_T;CHECK, "Любой", 268, 292, 56, 20, int Gt;STATIC, "Координаты символов Y", 340, 292, 132, 20;EDIT, 552, 292, 76, 20, int Y;CHECK, "Учитывать Цвета фона (через запятую)", 4, 316, 232, 20, int GF;STATIC, "Размер символов X", 340, 316, 108, 20;EDIT, 552, 316, 76, 20, int Sx;EDIT, 4, 340, 252, 20, int Col_F;CHECK, "Любой", 268, 340, 56, 20, int Gf;STATIC, "Размер символов Y", 340, 340, 108, 20;EDIT, 552, 340, 76, 20, int Sy;STATIC, "Разбежность цветов текста и фона (0-255) Или -1", 4, 364, 264, 20;EDIT, 268, 364, 52, 20, int R;STATIC, "Корректность распознавания", 340, 364, 156, 20;EDIT, 552, 364, 76, 20, int Cs;STATIC, "Интелект (0-99)  Или -1", 4, 388, 128, 20;EDIT, 268, 388, 52, 20, int I;STATIC, "Тип символа", 340, 388, 68, 20;EDIT, 552, 388, 76, 20, int Type;CHECK, "Удалять пробелы", 340, 412, 108, 20, int DP;STATIC, "Игнорировать с оценкой (до 1 или -1 без игнора)", 340, 436, 252, 20;EDIT, 592, 436, 36, 20, double IGN_KOR;STATIC, "Пауза после", 4, 460, 68, 20;EDIT, 76, 460, 100, 20, int P2;STATIC, "Комментарий", 4, 484, 76, 20;EDIT, 84, 484, 544, 20, unknown Comment;BUTTON_OK, "Принять", 420, 512, 100, 20;BUTTON_CANCEL, "Закрыть", 528, 512, 100, 20;[END]

[EVENT]
IF (GT==0)ENABLE(GETID(Col_T), 0);
IF (GT==1)ENABLE(GETID(Col_T), 1);
IF (GF==0)ENABLE(GETID(Col_F), 0);
IF (GF==1)ENABLE(GETID(Col_F), 1);
IF (GT==0)ENABLE(GETID(Gf), 0);
IF (GT==1)ENABLE(GETID(Gf), 1);
IF (GF==0)ENABLE(GETID(Gt), 0);
IF (GF==1)ENABLE(GETID(Gt), 1);
IF (GT==0)ENABLE(GETID(Gt), 1);
IF (GT==1)ENABLE(GETID(Gt), 0);
IF (GF==0)ENABLE(GETID(Gf), 1);
IF (GF==1)ENABLE(GETID(Gf), 0);

IF (I_MODE_BIND_WINDOW!=0)SENDBUTTON(GETID(EW), S_MODE_BIND_WINDOW);
IF (I_MODE_BIND_WINDOW!=0)SENDEDIT(GETID(W), W_Kib);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(EW), 0);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(W), 0);
IF (I_MODE_BIND_WINDOW!=0)ENABLE(GETID(Screen), 0);

IF (EW==0)ENABLE(GETID(W), 0);
IF (EW==0)ENABLE(GETID(Screen), 0);
IF (EW==1)ENABLE(GETID(W), 1);
IF (EW==1)ENABLE(GETID(Screen), 0);
IF (EW==2)ENABLE(GETID(W), 1);
IF (EW==2)ENABLE(GETID(Screen), 0);
IF (EW==3)ENABLE(GETID(W), 0);
IF (EW==3)ENABLE(GETID(Screen), 1);

[END]

[INFO]
[ENDL]>>~GET(regexsearch(~Base~, "(?<=\\)(.*?)(?=\.)", 16))~>>[ENDL]>>Comment
[END]

[ASSOC_NUMBER]
Col_T, Col_F, 
[END]

[ASSOC_VAR]
EW=0;
W=W_Kib;
Screen=Screen;
P1=0;
Base="C:\basetext.sib";
File=~GET(regexsearch(~Base~, "(?<=\\)(.*?)", 16))~;
G1 = 1;
G2 = 0;
G3 = 0;
G4 = 0;
EX1=100;
EY1=100;
EX2=200;
EY2=130;

F=8;
S=1;
K=-1;
D1=-1;
D2=-1;
GT=0;
Col_T=0;
Gt=0;
GF=0;
Col_F=255;
Gf=0;
R=0;
I=20;
DP=0;
IGN_KOR=-1;

T=Text_S;
Str_T=Text_Str;
Kol_Str_T=K_Str;
Kol=K_S;
X = X_S;
Y = Y_S;
X_Str = X_Str;
Y_Str = Y_Str;
Sx = sX_S;
Sy = sY_S;
Cs=Cor_S;
Type=Type_S;

Text = #~T~;
Str_Text = #~Str_T~;
Kol_Sim=#~Kol~;
Kol_Str=#~Kol_Str_T~;
X_Sim=#~X~;
Y_Sim=#~Y~;
X_Str_T=#~X_Str~;
Y_Str_T=#~Y_Str~;
Xs_Sim=#~Sx~;
Ys_Sim=#~Sy~;
Cor_Sim=#~Cs~;
Type_Sim=#~Type~;

V_Col_T = #Col_T~*~;
V_Col_F = #Kol_F~*~;
W_V = #~W~;
V_X=~W~.leftclient;
V_Y=~W~.topclient;
V_Screen=#~Screen~;
P2=0;
Comment=;
[END]

[GLOBAL_VAR]
string ~T~;
string ~Str_T~[100];
int ~Kol_Str_T~;
int ~Kol~;
int ~X~[2000];
int ~Y~[2000];
int ~X_Str~[100];
int ~Y_Str~[100];
int ~Sx~[2000];
int ~Sy~[2000];
double ~Cs~[2000];
int ~Type~[2000];
int Col_T~*~[~GET(amtelement(~Col_T~))~] = {~Col_T~};
int Kol_F~*~[~GET(amtelement(~Col_F~))~] = {~Col_F~};
win ~W~;
int ~Screen~[3000][3000];  
[END]

[GLOBAL_REPEAT_CODE]
load_base();
[END]


[GLOBAL_SINGLE_CODE_BOTTOM]
function load_base()
{
}
[END]

[REGEXPLACE_CODE]
"function load_base\(\)"~%13~~%10~"\{"~%13~~%10~    =    "function load_base()"~%13~~%10~"{"~%13~~%10~"loadsymbolbase ("~Base~");"~%13~~%10~;
[END]

[FUNCTION_BODY]
function(int ew, int #Scr, win #w, int v_x, int v_y, int p1, string base, string #text, int #kol_sim, int #x_sim, int #y_sim, int #xs_sim, int #ys_sim, int #cor_sim, int #type_sim, int #kol_str, string #text_str, int #x_str, int #y_str, int g1, int g2, int g3, int g4, int f, int s, int k, int d1, int d2, int GT, int #col_t, int Gt, int GF, int #col_f, int Gf, int r, int i, int ex1, int ey1, int ex2, int ey2, int ignor, int dp)
{
disablesymbolbase(ALL);
enablesymbolbase(base);
pause(p1);
  if (GT==0 && GF==0)
  {
  if (ew==0) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, -1, 0, i, ex1, ey1, ex2, ey2, -1);
  if (ew==1) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, -1, 0, i, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, -1);
  if (ew==2) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, -1, 0, i, ex1, ey1, ex2, ey2, w);
  if (ew==3) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, -1, 0, i, ex1, ey1, ex2, ey2, #Scr[0][0]);
  }
  if (GT==1 && GF==1)
  {
  if (ew==0) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], #col_f[0], r, i, ex1, ey1, ex2, ey2, -1);
  if (ew==1) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], #col_f[0], r, i, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, -1);
  if (ew==2) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], #col_f[0], r, i, ex1, ey1, ex2, ey2, w);
  if (ew==3) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], #col_f[0], r, i, ex1, ey1, ex2, ey2, #Scr[0][0]);
  }
  if (GT==1 && GF==0)
  {
    if (Gf==1)
    {
    if (ew==0) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], 1, r, i, ex1, ey1, ex2, ey2, -1);
    if (ew==1) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], 1, r, i, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, -1);
    if (ew==2) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], 1, r, i, ex1, ey1, ex2, ey2, w);
    if (ew==3) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], 1, r, i, ex1, ey1, ex2, ey2, #Scr[0][0]);
    }
    else
    {
    if (ew==0) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], -1, r, i, ex1, ey1, ex2, ey2, -1);
    if (ew==1) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], -1, r, i, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, -1);
    if (ew==2) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], -1, r, i, ex1, ey1, ex2, ey2, w);
    if (ew==3) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, #col_t[0], -1, r, i, ex1, ey1, ex2, ey2, #Scr[0][0]);
    }
  }
  if (GT==0 && GF==1)
  {
    if (Gt==1)
    {
    if (ew==0) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, 1, #col_f[0], r, i, ex1, ey1, ex2, ey2, -1);
    if (ew==1) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, 1, #col_f[0], r, i, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, -1);
    if (ew==2) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, 1, #col_f[0], r, i, ex1, ey1, ex2, ey2, w);
    if (ew==3) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, 1, #col_f[0], r, i, ex1, ey1, ex2, ey2, #Scr[0][0]);
    }
    else
    {
    if (ew==0) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, #col_f[0], r, i, ex1, ey1, ex2, ey2, -1);
    if (ew==1) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, #col_f[0], r, i, v_x+ex1, v_y+ey1, v_x+ex2, v_y+ey2, -1);
    if (ew==2) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, #col_f[0], r, i, ex1, ey1, ex2, ey2, w);
    if (ew==3) readtext (g1*RU | g2*EN | g3*NUM | g4*MARK, #text, f, s, k, d1, d2, -1, #col_f[0], r, i, ex1, ey1, ex2, ey2, #Scr[0][0]);
    }
  }
kol_sim=size(text);
if (kol_sim>2000) kol_sim=2000;
int ScrX=0, ScrY=0;
  if (ew==3)
  {
  ScrX=screenstartx();
  ScrY=screenstarty();
  }  
  for (int n=0; n<kol_sim; n++)
  {
  x_sim[n]=ex1+symbolxpos(n)+ScrX; y_sim[n]=ey1+symbolypos(n)+ScrY;
  xs_sim[n]=symbolwidth(n); ys_sim[n]=symbolheight(n);
  cor_sim[n]=symbolcorrect(n);
  type_sim[n]=symboltype(n);
  }
  if (ignor>-1)
  {
  char C[2000];
  int tn=0;
  strcpy(#C[0], text);
  text="";
    for (n=0; n<kol_sim; n++)
    {
      if (cor_sim[n]>=ignor || C[n]==' ' || C[n]==10 || C[n]==13)
      {
      text=text+C[n];
      x_sim[tn]=x_sim[n];
      y_sim[tn]=y_sim[n];
      cor_sim[tn]=cor_sim[n];
      type_sim[tn]=type_sim[n];
      tn++;
      }
    }
  int sz=size(text);
  strcpy(#C[0], text);
  int min;
  int pmin=-99999;
  text="";
  int tn1;
  tn=0;
  A: min=99999;
  tn1=-1;
    for (n=0; n<sz; n++)
    {
    if (x_sim[n]<min && x_sim[n]>pmin) {min=x_sim[n]; tn1=n;}
    }
    if (tn1!=-1)
    {
    text=text+C[tn1];
    x_sim[tn]=x_sim[tn1];
    y_sim[tn]=y_sim[tn1];
    cor_sim[tn]=cor_sim[tn1];
    type_sim[tn]=type_sim[tn1];
    if (C[tn1]!=' ' && C[tn1]!=10 && C[tn1]!=13)tn++;
    pmin=min;
    goto A;
    }
  kol_sim=tn;
  }
if (dp) regexreplace(-1, #text, text, " ", "");
string t_text=text+"^r^n";
kol_str=regexsearch(100, #text_str[0], t_text, "(.*)+(?=^r^n)");
  for (n=0; n<kol_str; n++)
  {
  x_str[n]=ex1+symbolxpos(regexstart(n))+ScrX;
  y_str[n]=ey1+symbolypos(regexstart(n))+ScrY;
  }
}
[END]

[CALL]
(EW, V_Screen[0][0], W_V, V_X, V_Y, P1, Base, Text, Kol_Sim, X_Sim[0], Y_Sim[0], Xs_Sim[0], Ys_Sim[0], Cor_Sim[0], Type_Sim[0], Kol_Str, Str_Text[0], X_Str_T[0], Y_Str_T[0], G1, G2, G3, G4, F, S, K, D1, D2, GT, V_Col_T[0], Gt, GF, V_Col_F[0], Gf, R, I, EX1, EY1, EX2, EY2, IGN_KOR, DP)
[END]

