|
|
//===================== Copyright (c) Valve Corporation. All Rights Reserved. ======================
//
// This module manages a stack of "script sources".
//
//==================================================================================================
#ifndef SCRIPTSOURCE_H
#define SCRIPTSOURCE_H
#ifdef _WIN32
#pragma once
#endif
#define MAX_SYSPRINTMSG 4096
#define MAX_SYSTOKENCHARS 4096
class CScriptSource { public: CScriptSource() { Set( "", NULL, 0, false ); }
CScriptSource( const char *pScriptName, const char *pScriptData, int nScriptLine, bool bFreeScriptAtPop ) { Set( pScriptName, pScriptData, nScriptLine, bFreeScriptAtPop ); }
void Set( const char *pScriptName, const char *pScriptData, int nScriptLine, bool bFreeScriptAtPop ) { m_ScriptName = pScriptName; m_pScriptData = pScriptData; m_nScriptLine = nScriptLine; m_bFreeScriptAtPop = bFreeScriptAtPop; }
const char *GetName() const { return m_ScriptName.Get(); } const char *GetData() const { return m_pScriptData; } int GetLine() const { return m_nScriptLine; } bool IsFreeScriptAtPop() const { return m_bFreeScriptAtPop; }
private: CUtlString m_ScriptName; const char *m_pScriptData; int m_nScriptLine; bool m_bFreeScriptAtPop; };
class CScript { public: CScript();
void PushScript( const char *pFilename ); void PushScript( const char *pScriptName, const char *ppScriptData, int nScriptLine = 1, bool bFreeScriptAtPop = false ); void PushCurrentScript(); void PopScript(); CScriptSource GetCurrentScript(); void RestoreScript( const CScriptSource &scriptSource ); void EnsureScriptStackEmpty(); void SpewScriptStack();
const char *GetName() const { return m_ScriptName.Get(); } const char *GetData() const { return m_pScriptData; } int GetLine() const { return m_nScriptLine; }
const char *GetToken( bool bAllowLineBreaks ); const char *PeekNextToken( bool bAllowLineBreaks ); void SkipRestOfLine(); void SkipBracedSection(); void SkipToValidToken();
bool ParsePropertyValue( const char *pBaseString, char *pOutBuff, int outBuffSize );
private: const char *SkipWhitespace( const char *data, bool *pHasNewLines, int *pNumLines ); const char *SkipToValidToken( const char *data, bool *pHasNewLines, int *pNumLines ); void SkipBracedSection( const char **dataptr, int *numlines ); void SkipRestOfLine( const char **dataptr, int *numlines ); const char *PeekNextToken( const char *dataptr, bool bAllowLineBreaks ); const char *GetToken( const char **dataptr, bool allowLineBreaks, int *pNumLines );
CUtlStack< CScriptSource > m_ScriptStack;
int m_nScriptLine; int *m_pScriptLine; const char *m_pScriptData; CUtlString m_ScriptName; bool m_bFreeScriptAtPop;
char m_Token[MAX_SYSTOKENCHARS]; char m_PeekToken[MAX_SYSTOKENCHARS]; };
#endif // SCRIPTSOURCE_H
|