Ejemplo n.º 1
0
//  CaseWord - convert case of string by given type
void CaseWord(wchar_t *nm, int Type)
{
	if (!nm || !*nm)
		return;

	int I;

	switch (Type)
	{
		case MODE_N_WORD:
			*nm = FSF.LUpper(*nm);
			FSF.LStrlwr(nm+1);
			break;
		case MODE_LN_WORD:

			for (I=0; nm[I]; I++)
			{
				if (!I || IsWordDiv(nm[I-1]))
					nm[I]=(wchar_t)FSF.LUpper(nm[I]);
				else
					nm[I]=(wchar_t)FSF.LLower(nm[I]);
			}

			break;
		case MODE_LOWER:
			FSF.LStrlwr(nm);
			break;
		case MODE_UPPER:
			FSF.LStrupr(nm);
			break;
	}
}
Ejemplo n.º 2
0
/*
  Ptr=CalcWordFromString(Str,I,&Start,&End);
  xstrncpy(Dest,Ptr,End-Start+1);
  Dest[End-Start+1]=0;

// Параметры:
//   WordDiv  - набор разделителей слова в кодировке OEM
  возвращает указатель на начало слова
*/
const wchar_t * const CalcWordFromString(const wchar_t *Str,int CurPos,int *Start,int *End, const wchar_t *WordDiv0)
{
	int I, J, StartWPos, EndWPos;
	DWORD DistLeft, DistRight;
	int StrSize=StrLength(Str);

	if (CurPos >= StrSize)
		return nullptr;

	string strWordDiv(WordDiv0);
	strWordDiv += L" \t\n\r";

	if (IsWordDiv(strWordDiv,Str[CurPos]))
	{
		// вычисляем дистанцию - куда копать, где ближе слово - слева или справа
		I=J=CurPos;
		// копаем влево
		DistLeft=-1;

		while (I >= 0 && IsWordDiv(strWordDiv,Str[I]))
		{
			DistLeft++;
			I--;
		}

		if (I < 0)
			DistLeft=-1;

		// копаем вправо
		DistRight=-1;

		while (J < StrSize && IsWordDiv(strWordDiv,Str[J]))
		{
			DistRight++;
			J++;
		}

		if (J >= StrSize)
			DistRight=-1;

		if (DistLeft > DistRight) // ?? >=
			EndWPos=StartWPos=J;
		else
			EndWPos=StartWPos=I;
	}
	else // здесь все оби, т.е. стоим на буковке
		EndWPos=StartWPos=CurPos;

	if (StartWPos < StrSize)
	{
		while (StartWPos >= 0)
			if (IsWordDiv(strWordDiv,Str[StartWPos]))
			{
				StartWPos++;
				break;
			}
			else
				StartWPos--;

		while (EndWPos < StrSize)
			if (IsWordDiv(strWordDiv,Str[EndWPos]))
			{
				EndWPos--;
				break;
			}
			else
				EndWPos++;
	}

	if (StartWPos < 0)
		StartWPos=0;

	if (EndWPos >= StrSize)
		EndWPos=StrSize;

	*Start=StartWPos;
	*End=EndWPos;
	return Str+StartWPos;
}