Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
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;
}
Exemplo n.º 3
0
void Speller::FirstCharBig(CString& s){
	LPTSTR bf=s.LockBuffer();
	for(;*bf;bf++){
		if( isalpha2(*bf) ){
			*bf &= ~0x20;
			bf++;
			break;
		}
	}
	_tcslwr(bf); //остаток строки - вниз
	s.UnlockBuffer();
}
Exemplo n.º 4
0
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);
}
Exemplo n.º 5
0
// замена всех ссылок на ячейки
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;
}