digit syntax works

detects 0x 0X .5 5e8
This commit is contained in:
BADIM-PC\Vadim 2017-12-20 22:46:08 +03:00
parent e449656d57
commit b4b002464d
1 changed files with 56 additions and 2 deletions

View File

@ -404,6 +404,8 @@ static bool isWord(char symbol) {return isLetter(symbol) || isNumber(symbol);}
#include <ctype.h> #include <ctype.h>
static inline bool islineend(char c) {return c == '\n' || c == '\0';}
static void parse(const char* start, u8* color) static void parse(const char* start, u8* color)
{ {
const char* ptr = start; const char* ptr = start;
@ -411,6 +413,7 @@ static void parse(const char* start, u8* color)
const char* blockCommentStart = NULL; const char* blockCommentStart = NULL;
const char* blockStringStart = NULL; const char* blockStringStart = NULL;
const char* singleCommentStart = NULL; const char* singleCommentStart = NULL;
const char* numberStart = NULL;
static const char BlockCommentStart[] = "--[["; static const char BlockCommentStart[] = "--[[";
static const char BlockCommentEnd[] = "]]"; static const char BlockCommentEnd[] = "]]";
@ -460,11 +463,57 @@ static void parse(const char* start, u8* color)
} }
else if(singleCommentStart) else if(singleCommentStart)
{ {
while(*ptr != '\0' && *ptr != '\n')ptr++; while(!islineend(*ptr))ptr++;
memset(color + (singleCommentStart - start), getConfig()->theme.code.comment, ptr - singleCommentStart); memset(color + (singleCommentStart - start), getConfig()->theme.code.comment, ptr - singleCommentStart);
singleCommentStart = NULL; singleCommentStart = NULL;
} }
else if(numberStart)
{
bool digit = true;
while(!islineend(*ptr))
{
char c = *ptr;
if(isdigit(c))
{
ptr++;
}
else if(numberStart[0] == '0' && (numberStart[1] == 'x' || numberStart[1] == 'X'))
{
if(ptr - numberStart <= 2)
{
ptr++;
}
else if(ptr - numberStart > 2 && isxdigit(c))
{
ptr++;
}
else
{
digit = false;
break;
}
}
else if(c == '.' || c == 'e')
{
if(isdigit(ptr[1]))
ptr++;
else break;
}
else if(isalpha(c) || c == '_')
{
digit = false;
break;
}
else break;
}
if(digit)
memset(color + (numberStart - start), getConfig()->theme.code.number, ptr - numberStart);
numberStart = NULL;
}
else else
{ {
s32 blockCommentStartSize = strlen(BlockCommentStart); s32 blockCommentStartSize = strlen(BlockCommentStart);
@ -494,7 +543,12 @@ static void parse(const char* start, u8* color)
} }
else else
{ {
// do other stuff if(isdigit(c) || (c == '.' && isdigit(ptr[1])))
{
numberStart = ptr;
ptr += 1;
continue;
}
} }
} }
} }