tge/engine/console/consoleParser.cc
2025-02-17 23:17:30 -06:00

77 lines
1.6 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#include "platform/platform.h"
#include "console/console.h"
#include "console/consoleParser.h"
namespace Compiler
{
static ConsoleParser *gParserList = NULL;
static ConsoleParser *gDefaultParser = NULL;
void freeConsoleParserList(void)
{
ConsoleParser *pParser;
while(pParser = gParserList)
{
gParserList = pParser->next;
delete pParser;
}
gDefaultParser = NULL;
}
bool addConsoleParser(char *ext, fnGetCurrentFile gcf, fnGetCurrentLine gcl, fnParse p, fnRestart r, fnSetScanBuffer ssb, bool def /* = false */)
{
AssertFatal(ext && gcf && gcl && p && r, "AddConsoleParser called with one or more NULL arguments");
ConsoleParser *pParser;
if(pParser = new ConsoleParser)
{
pParser->ext = ext;
pParser->getCurrentFile = gcf;
pParser->getCurrentLine = gcl;
pParser->parse = p;
pParser->restart = r;
pParser->setScanBuffer = ssb;
if(def)
gDefaultParser = pParser;
pParser->next = gParserList;
gParserList = pParser;
return true;
}
return false;
}
ConsoleParser * getParserForFile(const char *filename)
{
char *ptr;
if(filename == NULL)
return gDefaultParser;
if(ptr = dStrrchr((char *)filename, '.'))
{
ptr++;
ConsoleParser *p;
for(p = gParserList;p;p = p->next)
{
if(dStricmp(ptr, p->ext) == 0)
return p;
}
}
return gDefaultParser;
}
} // end namespace Con