informative git log
This commit is contained in:
parent
e28a3f89ce
commit
119cadadc4
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1,3 +1,4 @@
|
||||||
|
src/*iconv*
|
||||||
bin/*
|
bin/*
|
||||||
test/*
|
test/*
|
||||||
test
|
test
|
||||||
|
|
6
Makefile
6
Makefile
|
@ -3,6 +3,8 @@
|
||||||
|
|
||||||
all:
|
all:
|
||||||
mkdir -p bin
|
mkdir -p bin
|
||||||
mingw32-gcc --std=c99 -g -ggdb -c -o bin/lt.o lt.c
|
mingw32-gcc --std=c99 -g -ggdb -liconv -c -o bin/lt.o src/lt.c -liconv
|
||||||
mingw32-gcc -shared -g -ggdb -o bin/LoveToken.dll bin/lt.o -Wl,--out-implib,bin/libLoveToken.a
|
mingw32-gcc -shared -g -ggdb -liconv -o bin/LoveToken.dll bin/lt.o -Wl,--out-implib,bin/libLoveToken.a -liconv
|
||||||
|
#mingw32-gcc --std=c99 -g -ggdb -c -o bin/lt.o -DI_FUCKING_HATE_WINDOWS src/lt.c
|
||||||
|
#mingw32-gcc -shared -g -ggdb -o bin/LoveToken.dll bin/iconv.o bin/lt.o -Wl,--out-implib,bin/libLoveToken.a
|
||||||
#cp bin/LoveToken.dll test/LoveToken.dll
|
#cp bin/LoveToken.dll test/LoveToken.dll
|
||||||
|
|
|
@ -21,17 +21,15 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||||
THE SOFTWARE.
|
THE SOFTWARE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include "lt.h"
|
#include "lt.h"
|
||||||
|
|
||||||
FILE *LT_ParseFile;
|
|
||||||
bool LT_AssertError = false;
|
|
||||||
LT_GarbageList *gbHead, *gbRover;
|
LT_GarbageList *gbHead, *gbRover;
|
||||||
|
|
||||||
|
static FILE *LT_ParseFile;
|
||||||
static LT_InitInfo info;
|
static LT_InitInfo info;
|
||||||
|
static iconv_t icDesc;
|
||||||
|
static bool LT_AssertError = false;
|
||||||
|
static const char *LT_AssertString;
|
||||||
|
|
||||||
static char *tokenTypes[] = {
|
static char *tokenTypes[] = {
|
||||||
// [marrub] So, this was an interesting bug. This was completely misordered from the enum.
|
// [marrub] So, this was an interesting bug. This was completely misordered from the enum.
|
||||||
|
@ -45,10 +43,35 @@ static char *tokenTypes[] = {
|
||||||
"TOK_Identi", "TOK_EOF", "TOK_ChrSeq"
|
"TOK_Identi", "TOK_EOF", "TOK_ChrSeq"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void LT_DoConvert(char **str)
|
||||||
|
{
|
||||||
|
size_t i = strlen(*str);
|
||||||
|
char *strbuf = calloc((i * 6) + 1, 1);
|
||||||
|
char *strbufOrig = strbuf, *strOrig = *str;
|
||||||
|
size_t in = i, out = i * 6;
|
||||||
|
|
||||||
|
iconv(icDesc, str, &in, &strbuf, &out);
|
||||||
|
|
||||||
|
*str = strOrig, strbuf = strbufOrig;
|
||||||
|
|
||||||
|
free(*str);
|
||||||
|
*str = strbuf;
|
||||||
|
}
|
||||||
|
|
||||||
void LT_Init(LT_InitInfo initInfo)
|
void LT_Init(LT_InitInfo initInfo)
|
||||||
{
|
{
|
||||||
info = initInfo;
|
info = initInfo;
|
||||||
|
|
||||||
|
if(info.doConvert)
|
||||||
|
{
|
||||||
|
icDesc = iconv_open(info.toCode, info.fromCode);
|
||||||
|
|
||||||
|
if(icDesc == (iconv_t) -1)
|
||||||
|
{
|
||||||
|
LT_Assert(true, "failure opening iconv");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
gbHead = malloc(sizeof(LT_GarbageList));
|
gbHead = malloc(sizeof(LT_GarbageList));
|
||||||
gbHead->next = NULL;
|
gbHead->next = NULL;
|
||||||
gbHead->ptr = NULL;
|
gbHead->ptr = NULL;
|
||||||
|
@ -58,6 +81,11 @@ void LT_Init(LT_InitInfo initInfo)
|
||||||
|
|
||||||
void LT_Quit()
|
void LT_Quit()
|
||||||
{
|
{
|
||||||
|
if(info.doConvert)
|
||||||
|
{
|
||||||
|
iconv_close(icDesc);
|
||||||
|
}
|
||||||
|
|
||||||
gbRover = gbHead;
|
gbRover = gbHead;
|
||||||
|
|
||||||
while(gbRover != NULL)
|
while(gbRover != NULL)
|
||||||
|
@ -84,12 +112,21 @@ bool LT_Assert(bool assertion, const char *str)
|
||||||
if(assertion)
|
if(assertion)
|
||||||
{
|
{
|
||||||
LT_AssertError = true;
|
LT_AssertError = true;
|
||||||
|
LT_AssertString = str;
|
||||||
fprintf(stderr, "LT_Assert: %s", str);
|
fprintf(stderr, "LT_Assert: %s", str);
|
||||||
}
|
}
|
||||||
|
|
||||||
return assertion;
|
return assertion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LT_AssertInfo LT_CheckAssert()
|
||||||
|
{
|
||||||
|
LT_AssertInfo ltAssertion;
|
||||||
|
ltAssertion.failure = LT_AssertError;
|
||||||
|
ltAssertion.str = LT_AssertString;
|
||||||
|
return ltAssertion;
|
||||||
|
}
|
||||||
|
|
||||||
bool LT_OpenFile(const char *filePath)
|
bool LT_OpenFile(const char *filePath)
|
||||||
{
|
{
|
||||||
LT_ParseFile = fopen(filePath, "r");
|
LT_ParseFile = fopen(filePath, "r");
|
||||||
|
@ -131,11 +168,21 @@ char *LT_ReadNumber()
|
||||||
realloc(str, TOKEN_STR_BLOCK_LENGTH * str_blocks++);
|
realloc(str, TOKEN_STR_BLOCK_LENGTH * str_blocks++);
|
||||||
}
|
}
|
||||||
|
|
||||||
str[i++] = ((info.stripInvalid && (isspace(c) || isprint(c))) || !info.stripInvalid) ? c : ' ';
|
str[i++] = c;
|
||||||
|
|
||||||
|
if(info.stripInvalid)
|
||||||
|
{
|
||||||
|
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
str[i++] = '\0';
|
str[i++] = '\0';
|
||||||
|
|
||||||
|
if(info.doConvert)
|
||||||
|
{
|
||||||
|
LT_DoConvert(&str);
|
||||||
|
}
|
||||||
|
|
||||||
gbRover->next = malloc(sizeof(LT_GarbageList));
|
gbRover->next = malloc(sizeof(LT_GarbageList));
|
||||||
gbRover = gbRover->next;
|
gbRover = gbRover->next;
|
||||||
gbRover->ptr = realloc(str, i);
|
gbRover->ptr = realloc(str, i);
|
||||||
|
@ -188,12 +235,22 @@ char *LT_ReadString(char term)
|
||||||
realloc(str, TOKEN_STR_BLOCK_LENGTH * str_blocks++);
|
realloc(str, TOKEN_STR_BLOCK_LENGTH * str_blocks++);
|
||||||
}
|
}
|
||||||
|
|
||||||
str[i++] = ((info.stripInvalid && (isspace(c) || isprint(c))) || !info.stripInvalid) ? c : ' ';
|
str[i++] = c;
|
||||||
|
|
||||||
|
if(info.stripInvalid)
|
||||||
|
{
|
||||||
|
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
str[i++] = '\0';
|
str[i++] = '\0';
|
||||||
|
|
||||||
|
if(info.doConvert)
|
||||||
|
{
|
||||||
|
LT_DoConvert(&str);
|
||||||
|
}
|
||||||
|
|
||||||
gbRover->next = malloc(sizeof(LT_GarbageList));
|
gbRover->next = malloc(sizeof(LT_GarbageList));
|
||||||
gbRover = gbRover->next;
|
gbRover = gbRover->next;
|
||||||
gbRover->ptr = realloc(str, i);
|
gbRover->ptr = realloc(str, i);
|
||||||
|
@ -465,12 +522,23 @@ LT_Token LT_GetToken()
|
||||||
realloc(str, TOKEN_STR_BLOCK_LENGTH * str_blocks++);
|
realloc(str, TOKEN_STR_BLOCK_LENGTH * str_blocks++);
|
||||||
}
|
}
|
||||||
|
|
||||||
str[i++] = ((info.stripInvalid && (isspace(c) || isprint(c))) || !info.stripInvalid) ? c : ' ';
|
str[i++] = c;
|
||||||
|
|
||||||
|
if(info.stripInvalid)
|
||||||
|
{
|
||||||
|
str[i++] = (isspace(c) || isprint(c)) ? c : ' ';
|
||||||
|
}
|
||||||
|
|
||||||
fread(&c, 1, 1, LT_ParseFile);
|
fread(&c, 1, 1, LT_ParseFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
|
if(info.doConvert)
|
||||||
|
{
|
||||||
|
LT_DoConvert(&str);
|
||||||
|
}
|
||||||
|
|
||||||
gbRover->next = malloc(sizeof(LT_GarbageList));
|
gbRover->next = malloc(sizeof(LT_GarbageList));
|
||||||
gbRover = gbRover->next;
|
gbRover = gbRover->next;
|
||||||
gbRover->ptr = realloc(str, i);
|
gbRover->ptr = realloc(str, i);
|
||||||
|
@ -483,6 +551,17 @@ LT_Token LT_GetToken()
|
||||||
return tk;
|
return tk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tk.string = malloc(2);
|
||||||
|
tk.string[0] = c;
|
||||||
|
tk.string[1] = '\0';
|
||||||
|
|
||||||
|
gbRover->next = malloc(sizeof(LT_GarbageList));
|
||||||
|
gbRover = gbRover->next;
|
||||||
|
gbRover->ptr = tk.string;
|
||||||
|
gbRover->next = NULL;
|
||||||
|
|
||||||
|
tk.token = tokenTypes[TOK_ChrSeq];
|
||||||
|
|
||||||
return tk;
|
return tk;
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,12 @@ THE SOFTWARE.
|
||||||
#define LOVETOKEN_LT_H
|
#define LOVETOKEN_LT_H
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdio.h>
|
#include <ctype.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <iconv.h>
|
||||||
|
|
||||||
#define TOKEN_STR_BLOCK_LENGTH 512
|
#define TOKEN_STR_BLOCK_LENGTH 512
|
||||||
|
|
||||||
|
@ -38,6 +42,9 @@ typedef struct
|
||||||
{
|
{
|
||||||
bool escapeChars;
|
bool escapeChars;
|
||||||
bool stripInvalid;
|
bool stripInvalid;
|
||||||
|
bool doConvert;
|
||||||
|
const char *fromCode;
|
||||||
|
const char *toCode;
|
||||||
} LT_InitInfo;
|
} LT_InitInfo;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -47,11 +54,16 @@ typedef struct
|
||||||
int pos;
|
int pos;
|
||||||
} LT_Token;
|
} LT_Token;
|
||||||
|
|
||||||
extern bool LT_EXPORT LT_AssertError;
|
typedef struct
|
||||||
|
{
|
||||||
|
bool failure;
|
||||||
|
const char *str;
|
||||||
|
} LT_AssertInfo;
|
||||||
|
|
||||||
void LT_EXPORT LT_Init(LT_InitInfo initInfo);
|
void LT_EXPORT LT_Init(LT_InitInfo initInfo);
|
||||||
void LT_EXPORT LT_Quit();
|
void LT_EXPORT LT_Quit();
|
||||||
bool LT_EXPORT LT_Assert(bool assertion, const char *str);
|
bool LT_EXPORT LT_Assert(bool assertion, const char *str);
|
||||||
|
LT_AssertInfo LT_EXPORT LT_CheckAssert();
|
||||||
|
|
||||||
bool LT_EXPORT LT_OpenFile(const char *filePath);
|
bool LT_EXPORT LT_OpenFile(const char *filePath);
|
||||||
void LT_EXPORT LT_CloseFile();
|
void LT_EXPORT LT_CloseFile();
|
||||||
|
@ -69,8 +81,6 @@ typedef struct LT_GarbageList_s
|
||||||
void *ptr;
|
void *ptr;
|
||||||
} LT_GarbageList;
|
} LT_GarbageList;
|
||||||
|
|
||||||
extern FILE *LT_ParseFile;
|
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
TOK_Colon,
|
TOK_Colon,
|
Reference in New Issue
Block a user