tge/tools/langc/langc.cc
2017-04-17 06:17:10 -06:00

195 lines
4.3 KiB
C++
Executable File

//-----------------------------------------------------------------------------
// Torque Game Engine
// Copyright (C) GarageGames.com, Inc.
//-----------------------------------------------------------------------------
#include "platform/platform.h"
#include "platform/event.h"
#include "platform/platformAssert.h"
#include "console/console.h"
#include "console/consoleTypes.h"
#include "math/mathTypes.h"
#include "langc/langc.h"
#include "core/fileStream.h"
#include "i18n/lang.h"
#include "langcomp.h"
#include "Getopt.h"
#include <stdlib.h>
//////////////////////////////////////////////////////////////////////////
LangCGame GameObject;
// FOR SILLY LINK DEPENDANCY. REMOVE THIS AT YOUR PERIL.
bool gEditingMission = false;
//////////////////////////////////////////////////////////////////////////
static bool initLibraries()
{
// asserts should be created FIRST
PlatformAssert::create();
_StringTable::create();
// ResManager::create();
Con::init();
Math::init();
Platform::init(); // platform specific initialization
return(true);
}
static void shutdownLibraries()
{
// Purge any resources on the timeout list...
// if (ResourceManager)
// ResourceManager->purge();
// shut down
Platform::shutdown();
Con::shutdown();
// ResManager::destroy();
_StringTable::destroy();
// asserts should be destroyed LAST
PlatformAssert::destroy();
}
//////////////////////////////////////////////////////////////////////////
static void usage(void)
{
dPrintf("Usage: langc [options] <filename> <outbasename>\n\n");
dPrintf("Where options is one or more of:\n\n");
dPrintf(" -l Write Language File -h Write C++ Header\n");
dPrintf(" -s Write Script -d Write C++ Defaults\n");
dPrintf(" -t Compile a translation -r Write translation file\n");
dPrintf(" -e <filename> Specify english file when compiling translations\n");
dPrintf("\n");
dPrintf(" -S Don't strip leading spaces -T Strip trailing spaces\n");
dPrintf(" -I Don't warn for invalid chars -W Don't warn for empty identifiers\n");
dPrintf(" -q Quiet mode, no warnings at all\n");
dPrintf("\nMore information can be found in the documentation at:\n %s\n", I18N_DOC_URL);
}
S32 LangCGame::main(S32 argc, const char **argv)
{
S32 i, ch;
U32 flags = LCO_WARNNOSTRING;
Getopt opts("STIWqhsdlrte:");
char *englishFile = NULL;
if(! initLibraries())
return 0;
while((ch = opts.getopt(argc, (char **)argv)) != -1)
{
switch(ch)
{
case 't':
// Compile a translation
flags |= LCO_COMPILETRANSLATION;
break;
case 'e':
// Specify english file
englishFile = opts.m_sOptArg;
break;
case 'S':
// Don't strip spaces
flags |= LCO_DONTSTRIPSPACES;
break;
case 'T':
// Strip trailing space
flags |= LCO_STRIPTRAILINGSPACE;
break;
case 'I':
// Don't warn for invalid chars
flags |= LCO_DONTWARNINVALIDCHAR;
break;
case 'W':
// Don't warn for empty identifiers
flags &= ~LCO_WARNNOSTRING;
break;
case 'q':
// Quiet mode, no warnings at all
flags |= LCO_NOWARNINGS;
break;
case 'h':
// Write Header
flags |= LCO_WRITEHEADER;
break;
case 's':
// Write Script
flags |= LCO_WRITESCRIPT;
break;
case 'd':
// Write C++ Defaults
flags |= LCO_WRITECDEFAULTS;
break;
case 'l':
// Write Lang Table
flags |= LCO_WRITELANGTABLE;
break;
case 'r':
// Write translation
flags |= LCO_WRITETRANSLATION;
break;
case GO_BAD_ARG:
dPrintf("option %c requires an argument\n", opts.m_nOptOpt);
break;
case GO_INVALID_CHAR:
dPrintf("%c is an invalid option\n", opts.m_nOptOpt);
break;
case GO_BAD_CHAR:
usage();
shutdownLibraries();
return 0;
}
}
argc -= opts.m_nOptInd;
argv += opts.m_nOptInd;
if(argc < 2)
{
usage();
return 0;
}
LangComp c(flags);
dPrintf("Compiling ... \n");
c.Compile(argv[0], argv[1], englishFile);
shutdownLibraries();
return 0;
}
//////////////////////////////////////////////////////////////////////////
void GameReactivate()
{
}
void GameDeactivate( bool )
{
}