const char* getIdiom(const char* str, int* index, bool* found) { static char result[MAX_TRANSLATED_LEN]; static char untrans[MAX_TRANSLATED_LEN]; int i = (int)strlen(str); result[0]=0; while(i>0) { while(i>0) { if(str[i]==' ') { break; } else if(str[i]==NULL && isalpha2((i>1)?str[i-2]:0, str[i-1], str[i])) { break; } else if(!isalpha2(str[i-1], str[i], str[i+1]) && isalpha2((i>1)?str[i-2]:0, str[i-1], str[i])) { break; } i--; } if(i<=0) { break; } memcpy(untrans, str, i); untrans[i]=0; result[0] = 0; bool bf; strcpy(result, ko_translateSecter(untrans, 2, &bf)); // find_translation(untrans, result, 2); if(strcmp(result, "")!=0) { *index += i; if(str[i]==' ') { // result[strlen(result)+1]=0; // result[strlen(result)]=str[i]; result[strlen(result)]=0; } return result; } i--; } return result; }
const char* getWord(const char* str, int* index, bool* found, int mode) { static char result[MAX_TRANSLATED_LEN]; static char untrans[MAX_TRANSLATED_LEN]; int i; if(mode==0) { i=0; while(str[i]) { if(str[i]==' ')break; i++; } *index += i; *found = false; strncpy(untrans, str, i); untrans[i]=0; return untrans; } i=0; while(str[i]) { if(isalpha2((i>0)?str[i-1]:0, str[i], str[i+1])) { i++; } else { break; } } *index += i; strncpy(untrans, str, i); untrans[i]=0; result[0] = 0; strcpy(result, ko_translateSecter(untrans, 1, found)); // find_translation(untrans, result, 1); if(result[0]==0) { strcpy(result, untrans); if( (strcmp(result, "an")==0 || strcmp(result, "a")==0 || strcmp(result, "the")==0 || strcmp(result, "The")==0 || strcmp(result, "A")==0 || strcmp(result, "An")==0) ) { } else { *found = false; } } return result; }
void Speller::FirstCharBig(CString& s){ LPTSTR bf=s.LockBuffer(); for(;*bf;bf++){ if( isalpha2(*bf) ){ *bf &= ~0x20; bf++; break; } } _tcslwr(bf); //остаток строки - вниз s.UnlockBuffer(); }
int get_token() { int tok; char *temp; (token_type) = 0; tok = 0; temp = (token); if (*(prog) == '\0') { *(token) = 0; tok = FINISHED; return ((token_type) = DELIMITER); } while (iswhite(*(prog))) ++(prog); if (isdelim(*(prog))) { char t=*temp = *(prog); (prog)++; temp++; if ((t == '>' || t == '<' || t == '!') && (*prog) && (*prog == '=')) { *temp = *(prog); (prog)++; temp++; } *temp = 0; return ((token_type) = DELIMITER); } if (isdigit(*(prog))) { while (!isdelim(*(prog))) *temp++=*(prog)++; *temp = '\0'; return ((token_type) = NUMBER); } if (isalpha2(*(prog))) { while (!isdelim(*(prog))) *temp++=*(prog)++; (token_type) = VARIABLE; } *temp = '\0'; if ((token_type) == VARIABLE) { tok = look_up((token)); if (tok) (token_type) = FUNCTION; } return (token_type); }
// замена всех ссылок на ячейки char *change_formula(char *name, int sx, int sy) { int i = 0; int in_name = 0; // 1 - читаем буквенную часть. 2 - читаем цифровую. 0 - читаем разделители и т.д. int alp_len = 0, dig_len = 0; int buf_i = 0; char buffer[256]; // очень плохо memset((Byte*)buffer, 0, 256); //sprintf(debuf, "change formula %S by %U %U", name, sx, sy); //rtlDebugOutString(debuf); while (i < strlen(name) + 1) { char c; if (i == strlen(name)) c = ' '; else c = name[i]; buffer[buf_i++] = c; switch (in_name) { case 0: { if (isalpha2(c) || c == '$') { in_name = 1; alp_len = 1; dig_len = 0; } } break; case 1: { if (isalpha2(c)) { alp_len++; } else if (c == '$' || isdigit(c)) { in_name = 2; dig_len++; } else { // незавершенное имя ячейки - не имя in_name = 0; alp_len = dig_len = 0; } } break; case 2: { if (isdigit(c)) { dig_len++; } else { if (alp_len > 0 && dig_len > 0) { // вот нормальная ячейка int idx = i - alp_len - dig_len; int len = alp_len + dig_len; char *cell = (char*)allocmem(len + 1); //strncpy(cell, name + i, alp_len + dig_len); for (int l = 0; l < len; l++) cell[l] = name[idx + l]; cell[len] = '\0'; //sprintf(debuf, "found cell name '%S' alp %U dig %U", cell, alp_len, dig_len); //rtlDebugOutString(debuf); char *cell_new = change_cell_ref(cell, sx, sy); //sprintf(debuf, "rename to '%S'", cell_new); //rtlDebugOutString(debuf); if (cell_new) { char cc = buffer[buf_i - 1]; strcpy(buffer + buf_i - len - 1, cell_new); buf_i += strlen(cell_new) - len; buffer[buf_i - 1] = cc; } //freemem(cell); //freemem(cell_new); alp_len = dig_len = 0; in_name = 0; } } } } i++; } //sprintf(debuf, "change formula done"); //rtlDebugOutString(debuf); char *res = (char*)allocmem(strlen(buffer) + 1); strcpy(res, buffer); return res; }