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.
95 lines
2.8 KiB
95 lines
2.8 KiB
//===================== 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
|
|
|