did some polishing work. fun!
This commit is contained in:
		
							parent
							
								
									a3d95d57bd
								
							
						
					
					
						commit
						dce1f1b534
					
				| 
						 | 
					@ -1,6 +1,8 @@
 | 
				
			||||||
Compiling LoveToken is near trivial since it only needs C99 (and optionally iconv).
 | 
					Compiling LoveToken is trivial since it only needs C99, and optionally iconv.
 | 
				
			||||||
Build an object file from lt.c (and link it with iconv if you want conversion) into a dll/so/etc.
 | 
					You can compile with the LT_NO_ICONV definition to disable iconv.
 | 
				
			||||||
You can compile with the NO_ICONV definition to skip iconv requirements.
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
Also, compiling with GDCC ( http://github.com/DavidPH/GDCC ) is now allowed.
 | 
					Compile lt.c to an object file and statically or dynamically link it with
 | 
				
			||||||
 | 
					your application. That's it. Don't forget to include lt.h.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Also, compiling with GDCC ( http://github.com/DavidPH/GDCC ) works.
 | 
				
			||||||
It will automatically omit iconv and use some specialized functions to work.
 | 
					It will automatically omit iconv and use some specialized functions to work.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
LoveToken is a tokenizer made for usage with LOVE2D's (LuaJIT) FFI.
 | 
					LoveToken is a tokenizer made for usage with LOVE2D's (LuaJIT) FFI.
 | 
				
			||||||
It also works just as well in C or C++, or really anything that can load C functions.
 | 
					It also works just as well in C or C++, or really anything that can load external C symbols.
 | 
				
			||||||
See COMPILING.txt for info on compiling.
 | 
					See COMPILING.txt for info on compiling.
 | 
				
			||||||
Supported platforms (known): Microsoft Windows, Linux, ZDoom, Mac OS X
 | 
					Supported platforms (known): Microsoft Windows, Linux, ZDoom, Mac OS X
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										24
									
								
								src/lt.c
									
									
									
									
									
								
							
							
						
						
									
										24
									
								
								src/lt.c
									
									
									
									
									
								
							| 
						 | 
					@ -33,12 +33,15 @@ THE SOFTWARE.
 | 
				
			||||||
#ifdef __GDCC__
 | 
					#ifdef __GDCC__
 | 
				
			||||||
	#include <ACS_Zandronum.h>
 | 
						#include <ACS_Zandronum.h>
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
	#ifndef NO_ICONV
 | 
						#ifndef LT_NO_ICONV
 | 
				
			||||||
		#include <iconv.h>
 | 
							#include <iconv.h>
 | 
				
			||||||
	#endif
 | 
						#endif
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __GDCC__
 | 
					#ifdef __GDCC__
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO: replace these with GDCC's new file function tables or whatever they're called
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define fopen LT_FOpen
 | 
					#define fopen LT_FOpen
 | 
				
			||||||
#define ftell LT_FTell
 | 
					#define ftell LT_FTell
 | 
				
			||||||
#define fgetc LT_FGetC
 | 
					#define fgetc LT_FGetC
 | 
				
			||||||
| 
						 | 
					@ -63,7 +66,7 @@ static LT_GarbageList *gbHead, *gbRover;
 | 
				
			||||||
static FILE *parseFile;
 | 
					static FILE *parseFile;
 | 
				
			||||||
static LT_Config cfg;
 | 
					static LT_Config cfg;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
static iconv_t icDesc;
 | 
					static iconv_t icDesc;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -95,7 +98,7 @@ const char *LT_TkNames[] = {
 | 
				
			||||||
 * Functions
 | 
					 * Functions
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
static void LT_DoConvert(char **str)
 | 
					static void LT_DoConvert(char **str)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	size_t i = strlen(*str);
 | 
						size_t i = strlen(*str);
 | 
				
			||||||
| 
						 | 
					@ -215,6 +218,7 @@ int LT_FClose(LT_File *file)
 | 
				
			||||||
void LT_Init(LT_Config initCfg)
 | 
					void LT_Init(LT_Config initCfg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifndef __GDCC__
 | 
					#ifndef __GDCC__
 | 
				
			||||||
 | 
						// [marrub] we don't need a garbage collector in GDCC
 | 
				
			||||||
	gbHead = LT_Alloc(sizeof(LT_GarbageList));
 | 
						gbHead = LT_Alloc(sizeof(LT_GarbageList));
 | 
				
			||||||
	gbHead->next = NULL;
 | 
						gbHead->next = NULL;
 | 
				
			||||||
	gbHead->ptr = NULL;
 | 
						gbHead->ptr = NULL;
 | 
				
			||||||
| 
						 | 
					@ -224,7 +228,7 @@ void LT_Init(LT_Config initCfg)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	cfg = initCfg;
 | 
						cfg = initCfg;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
	if(cfg.doConvert && cfg.fromCode != NULL && cfg.toCode != NULL)
 | 
						if(cfg.doConvert && cfg.fromCode != NULL && cfg.toCode != NULL)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		icDesc = iconv_open(cfg.toCode, cfg.fromCode);
 | 
							icDesc = iconv_open(cfg.toCode, cfg.fromCode);
 | 
				
			||||||
| 
						 | 
					@ -300,7 +304,7 @@ void LT_SetConfig(LT_Config newCfg)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	cfg = newCfg;
 | 
						cfg = newCfg;
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
	if(cfg.doConvert && cfg.fromCode != NULL && cfg.toCode != NULL)
 | 
						if(cfg.doConvert && cfg.fromCode != NULL && cfg.toCode != NULL)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		if(icDesc != NULL)
 | 
							if(icDesc != NULL)
 | 
				
			||||||
| 
						 | 
					@ -385,7 +389,7 @@ void LT_SetConfig(LT_Config newCfg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void LT_Quit()
 | 
					void LT_Quit()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
	if(cfg.doConvert)
 | 
						if(cfg.doConvert)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		iconv_close(icDesc);
 | 
							iconv_close(icDesc);
 | 
				
			||||||
| 
						 | 
					@ -434,7 +438,7 @@ bool LT_Assert(bool assertion, const char *fmt, ...)
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		snprintf(assertString, 512, "%s%s", ftString, asBuffer);
 | 
							snprintf(assertString, 512, "%s%s", ftString, asBuffer);
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		LT_SetGarbage(LT_ReAlloc(assertString, strlen(assertString) + 1));
 | 
							LT_SetGarbage(assertString = LT_ReAlloc(assertString, strlen(assertString) + 1));
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	return assertion;
 | 
						return assertion;
 | 
				
			||||||
| 
						 | 
					@ -522,7 +526,7 @@ char *LT_ReadNumber()
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	str[i++] = '\0';
 | 
						str[i++] = '\0';
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
	if(cfg.doConvert)
 | 
						if(cfg.doConvert)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		LT_DoConvert(&str);
 | 
							LT_DoConvert(&str);
 | 
				
			||||||
| 
						 | 
					@ -590,7 +594,7 @@ char *LT_ReadString(char term)
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	str[i++] = '\0';
 | 
						str[i++] = '\0';
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
	if(cfg.doConvert)
 | 
						if(cfg.doConvert)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
		LT_DoConvert(&str);
 | 
							LT_DoConvert(&str);
 | 
				
			||||||
| 
						 | 
					@ -974,7 +978,7 @@ LT_Token LT_GetToken()
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
		str[i++] = '\0'; // [marrub] Completely forgot this line earlier. Really screwed up everything.
 | 
							str[i++] = '\0'; // [marrub] Completely forgot this line earlier. Really screwed up everything.
 | 
				
			||||||
		
 | 
							
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
		if(cfg.doConvert)
 | 
							if(cfg.doConvert)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			LT_DoConvert(&str);
 | 
								LT_DoConvert(&str);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										4
									
								
								src/lt.h
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								src/lt.h
									
									
									
									
									
								
							| 
						 | 
					@ -51,7 +51,7 @@ THE SOFTWARE.
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef __GDCC__
 | 
					#ifdef __GDCC__
 | 
				
			||||||
	#define NO_ICONV
 | 
						#define LT_NO_ICONV
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum
 | 
					enum
 | 
				
			||||||
| 
						 | 
					@ -83,7 +83,7 @@ typedef struct
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	bool escapeChars;
 | 
						bool escapeChars;
 | 
				
			||||||
	bool stripInvalid;
 | 
						bool stripInvalid;
 | 
				
			||||||
#ifndef NO_ICONV
 | 
					#ifndef LT_NO_ICONV
 | 
				
			||||||
	bool doConvert;
 | 
						bool doConvert;
 | 
				
			||||||
	const char *fromCode;
 | 
						const char *fromCode;
 | 
				
			||||||
	const char *toCode;
 | 
						const char *toCode;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in New Issue
	
	Block a user