Ejemplo n.º 1
0
TRISTATE ParseInteger(int* pi, char* szText)
{
	CTextParser	cTextParser;
	TRISTATE	tResult;

	cTextParser.Init(szText);
	tResult = cTextParser.GetInteger(pi);
	cTextParser.Kill();

	return tResult;
}
Ejemplo n.º 2
0
TRISTATE ParseFloat(double* pf, char* szText)
{
	CTextParser		cTextParser;
	TRISTATE		tResult;
	double		f;
	int				iExponent;
	int				iTemp;
	double		fTen;

	cTextParser.Init(szText);
	tResult = cTextParser.GetFloat(&f);
	if (tResult == TRITRUE)
	{
		tResult = cTextParser.GetExactCaseInsensitiveCharacter('e', FALSE);
		if (tResult == TRITRUE)
		{
			tResult = cTextParser.GetInteger(&iExponent, &iTemp, FALSE);
			if (tResult == TRITRUE)
			{
				fTen = 10.0;
				*pf = pow(fTen, iExponent) * f;
				return TRITRUE;
			}
			else
			{
				return TRIFALSE;
			}
		}
		else
		{
			*pf = f;
			return TRITRUE;
		}
	}
	else
	{
		return TRIFALSE;
	}
	cTextParser.Kill();

	return tResult;
}
Ejemplo n.º 3
0
void CGuidClass::Init(char8* sz)
{
	CTextParser	cParser;
	TRISTATE	tOpenCurly;
	TRISTATE	tOpenRound;
	TRISTATE	tResult;
	uint64		uiValue;		
	int32		iLength;
	BOOL		bResult;

	cParser.Init(sz);
	tOpenCurly = cParser.GetExactCharacter('{');
	tOpenRound = TRIERROR;
	if (tOpenCurly == TRIERROR)
	{
		cParser.Kill();
		Clear();
		return;
	}
	else if (tOpenCurly == TRIFALSE)
	{
		tOpenRound = cParser.GetExactCharacter('(');
	}

	tResult = cParser.GetHexadecimal(&uiValue, &iLength);
	if (tResult == TRITRUE)
	{
		bResult = Get0xFormat(&cParser, (uint32)uiValue);
		if (!bResult)
		{
			Clear();
			cParser.Kill();
			return;
		}
	}
	else
	{
		tResult = cParser.GetHexadecimalPart(&uiValue, &iLength);
		if (tResult == TRITRUE)
		{
			if (iLength == 16)
			{
				bResult = Get32Format(&cParser, uiValue);
			}
			else if (iLength == 8)
			{
				bResult = Get8_4_4_4_12Format(&cParser, (uint32)uiValue);
				if (!bResult)
				{
					Clear();
					cParser.Kill();
					return;
				}
			}
			else
			{
				Clear();
				cParser.Kill();
				return;
			}
		}
	}

	if (tOpenCurly == TRITRUE)
	{
		tResult = cParser.GetExactCharacter('}');
		if (tResult != TRITRUE)
		{
			cParser.Kill();
			Clear();
			return;
		}
	}
	else if (tOpenRound == TRITRUE)
	{
		tResult = cParser.GetExactCharacter(')');
		if (tResult != TRITRUE)
		{
			cParser.Kill();
			Clear();
			return;
		}
	}

	cParser.Kill();
	return;
}
Ejemplo n.º 4
0
BOOL CTileMapXML::ImportTiles(CMarkupTag* pcTag, CTileLayer* pcLayer)
{
	CChars				szCSV;
	CCSVFileImmutable	cCSVFile;
	CMemoryFile			cMemoryFile;
	int					iRow;
	SCSVRowImmutable*	psRow;
	int					i;
	char*				szCelIndex;
	CTextParser			cTextParser;
	TRISTATE			tResult;
	int					iCelIndex;
	CChars				szError;
	CTile*				pcTile;

	szCSV.Init(128);
	pcTag->GetText(&szCSV);
	if (szCSV.Empty())
	{
		szCSV.Kill();
		CMarkupTextParser::LogErrorTagWasEmpty(pcTag);
		return FALSE;
	}

	szCSV.StripWhiteSpace(TRUE);
	//szCSV.Replace(" ", "");  //Write a test for this, why does it not work?

	cMemoryFile.Init(szCSV.Text(), szCSV.Length());

	cCSVFile.Init(',');
	cCSVFile.Open(&cMemoryFile);
	cCSVFile.ReadAllLines();

	for (iRow = 0; iRow < cCSVFile.NumRows(); iRow++)
	{
		psRow = cCSVFile.Get(iRow);

		for (i = 0; i < psRow->iNumFields; i++)
		{
			szCelIndex = psRow->Get(i);
			cTextParser.Init(szCelIndex);
			tResult = cTextParser.GetInteger(&iCelIndex);
			if (tResult != TRITRUE)
			{
				szError.Init("CSV cell [");
				szError.Append(i);
				szError.Append(", ");
				szError.Append(iRow);
				szError.Append("] could not be parsed as an integer.");
				CMarkupTextParser::LogError(pcTag, szError.Text());
				szError.Kill();
				cCSVFile.Close();
				cMemoryFile.Kill();
				szCSV.Kill();
				return FALSE;
			}
			
			pcTile = pcLayer->mpcTileType->Get(iCelIndex);
			if (pcTile)
			{
				pcLayer->Set(i, iRow, pcTile);
			}
		}
	}

	cCSVFile.Close();
	cMemoryFile.Kill();
	szCSV.Kill();
	return TRUE;
}