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
|