Merge pull request #744 from RudenkoArts/master

wren code outline
This commit is contained in:
Vadim Grigoruk 2018-09-24 20:11:39 +03:00 committed by GitHub
commit 824603653e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 51 additions and 0 deletions

View File

@ -1363,6 +1363,8 @@ static const char* const WrenKeywords [] =
"static", "super", "this", "true", "var", "while" "static", "super", "this", "true", "var", "while"
}; };
static inline bool isalnum_(char c) {return isalnum(c) || c == '_';}
static const tic_outline_item* getWrenOutline(const char* code, s32* size) static const tic_outline_item* getWrenOutline(const char* code, s32* size)
{ {
enum{Size = sizeof(tic_outline_item)}; enum{Size = sizeof(tic_outline_item)};
@ -1371,6 +1373,55 @@ static const tic_outline_item* getWrenOutline(const char* code, s32* size)
static tic_outline_item* items = NULL; static tic_outline_item* items = NULL;
if(items)
{
free(items);
items = NULL;
}
const char* ptr = code;
while(true)
{
static const char ClassString[] = "class ";
ptr = strstr(ptr, ClassString);
if(ptr)
{
ptr += sizeof ClassString - 1;
const char* start = ptr;
const char* end = start;
while(*ptr)
{
char c = *ptr;
if(isalnum_(c));
else if(c == ' ' || c == '{')
{
end = ptr;
break;
}
else break;
ptr++;
}
if(end > start)
{
items = items ? realloc(items, (*size + 1) * Size) : malloc(Size);
items[*size].pos = start - code;
items[*size].size = end - start;
(*size)++;
}
}
else break;
}
return items; return items;
} }