Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=====================================================================================//
#include "platform.h"
#include "filesystem.h"
#include "filesystem_helpers.h"
#include "characterset.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
// wordbreak parsing set
static characterset_t g_BreakSet, g_BreakSetIncludingColons;
static void InitializeCharacterSets() { static bool s_CharacterSetInitialized = false; if (!s_CharacterSetInitialized) { CharacterSetBuild( &g_BreakSet, "{}()'" ); CharacterSetBuild( &g_BreakSetIncludingColons, "{}()':" ); s_CharacterSetInitialized = true; } }
const char* ParseFile( const char* pFileBytes, char* pToken, bool* pWasQuoted, characterset_t *pCharSet ) { if (pWasQuoted) *pWasQuoted = false;
if (!pFileBytes) return 0;
InitializeCharacterSets();
// YWB: Ignore colons as token separators in COM_Parse
static bool com_ignorecolons = false; characterset_t& breaks = pCharSet ? *pCharSet : (com_ignorecolons ? g_BreakSet : g_BreakSetIncludingColons); int c; int len = 0; pToken[0] = 0; // skip whitespace
skipwhite:
while ( (c = *pFileBytes) <= ' ') { if (c == 0) return 0; // end of file;
pFileBytes++; } // skip // comments
if (c=='/' && pFileBytes[1] == '/') { while (*pFileBytes && *pFileBytes != '\n') pFileBytes++; goto skipwhite; } // skip c-style comments
if (c=='/' && pFileBytes[1] == '*' ) { // Skip "/*"
pFileBytes += 2;
while ( *pFileBytes ) { if ( *pFileBytes == '*' && pFileBytes[1] == '/' ) { pFileBytes += 2; break; }
pFileBytes++; }
goto skipwhite; }
// handle quoted strings specially
if (c == '\"') { if (pWasQuoted) *pWasQuoted = true;
pFileBytes++; while (1) { c = *pFileBytes++; if (c=='\"' || !c) { pToken[len] = 0; return pFileBytes; } pToken[len] = c; len++; } }
// parse single characters
if ( IN_CHARACTERSET( breaks, c ) ) { pToken[len] = c; len++; pToken[len] = 0; return pFileBytes+1; }
// parse a regular word
do { pToken[len] = c; pFileBytes++; len++; c = *pFileBytes; if ( IN_CHARACTERSET( breaks, c ) ) break; } while (c>32); pToken[len] = 0; return pFileBytes; }
char* ParseFile( char* pFileBytes, char* pToken, bool* pWasQuoted ) { return (char*)ParseFile( (const char*)pFileBytes, pToken, pWasQuoted ); }
|