mirror of
https://github.com/raysan5/raylib.git
synced 2025-12-25 10:22:33 -05:00
REXM: Validate examples list against existing examples in repo
This commit is contained in:
@ -749,6 +749,53 @@ int main(int argc, char *argv[])
|
||||
|
||||
// TODO: Log more details about the validation process
|
||||
|
||||
// Scan available example .c files and add to collection missing ones
|
||||
// NOTE: Source of truth is what we have in the examples directories (on validation/update)
|
||||
FilePathList list = LoadDirectoryFilesEx(exBasePath, ".c", true);
|
||||
|
||||
const char *exList = LoadFileText(exCollectionFilePath);
|
||||
char *exListUpdated = (char *)RL_CALLOC(REXM_MAX_BUFFER_SIZE, 1);
|
||||
bool listUpdated = false;
|
||||
|
||||
int exListLen = strlen(exList);
|
||||
strcpy(exListUpdated, exList);
|
||||
|
||||
for (int i = 0; i < list.count; i++)
|
||||
{
|
||||
if ((strcmp("examples_template", GetFileNameWithoutExt(list.paths[i])) != 0) && // HACK: Skip "examples_template"
|
||||
(TextFindIndex(exList, GetFileNameWithoutExt(list.paths[i])) == -1))
|
||||
{
|
||||
// Add example to the examples collection list
|
||||
// WARNING: Added to the end of the list, order must be set by users and
|
||||
// defines placement on raylib webpage
|
||||
rlExampleInfo *exInfo = LoadExampleInfo(list.paths[i]);
|
||||
|
||||
// Get example difficulty stars
|
||||
char starsText[16] = { 0 };
|
||||
for (int i = 0; i < 4; i++)
|
||||
{
|
||||
// NOTE: Every UTF-8 star are 3 bytes
|
||||
if (i < exInfo->stars) strcpy(starsText + 3*i, "★");
|
||||
else strcpy(starsText + 3*i, "☆");
|
||||
}
|
||||
|
||||
exListLen += sprintf(exListUpdated + exListLen,
|
||||
TextFormat("%s;%s;%s;%.2f;%.2f;\"%s\";@%s\n",
|
||||
exInfo->category, exInfo->name, starsText, exInfo->verCreated,
|
||||
exInfo->verUpdated, exInfo->author, exInfo->authorGitHub));
|
||||
|
||||
listUpdated = true;
|
||||
UnloadExampleInfo(exInfo);
|
||||
}
|
||||
}
|
||||
|
||||
if (listUpdated) SaveFileText(exCollectionFilePath, exListUpdated);
|
||||
|
||||
UnloadFileText(exList);
|
||||
RL_FREE(exListUpdated);
|
||||
|
||||
UnloadDirectoryFiles(list);
|
||||
|
||||
// Check all examples in collection [examples_list.txt] -> Source of truth!
|
||||
int exCollectionCount = 0;
|
||||
rlExampleInfo *exCollection = LoadExamplesData(exCollectionFilePath, "ALL", false, &exCollectionCount);
|
||||
@ -1566,12 +1613,13 @@ static void UnloadTextLines(char **lines)
|
||||
RL_FREE(lines);
|
||||
}
|
||||
|
||||
// Get example info from file header
|
||||
// Get example info from example file header
|
||||
// NOTE: Expecting the example to follow raylib_example_template.c
|
||||
rlExampleInfo *LoadExampleInfo(const char *exFileName)
|
||||
{
|
||||
rlExampleInfo *exInfo = (rlExampleInfo *)RL_CALLOC(1, sizeof(rlExampleInfo));
|
||||
|
||||
if (IsFileExtension(exFileName, ".c"))
|
||||
if (FileExists(exFileName) && IsFileExtension(exFileName, ".c"))
|
||||
{
|
||||
strcpy(exInfo->name, GetFileNameWithoutExt(exFileName));
|
||||
strncpy(exInfo->category, exInfo->name, TextFindIndex(exInfo->name, "_"));
|
||||
@ -1747,16 +1795,21 @@ static char **ScanExampleResources(const char *filePath, int *resPathCount)
|
||||
strncpy(buffer, start, len);
|
||||
buffer[len] = '\0';
|
||||
|
||||
// TODO: Make sure buffer is a path (and not a Tracelog() text)
|
||||
|
||||
// Check for known extensions
|
||||
for (int i = 0; i < extCount; i++)
|
||||
{
|
||||
// TODO: WARNING: IsFileExtension() expects a NULL terminated fileName,
|
||||
// but in this case buffer can contain any kind of string,
|
||||
// including not paths strings, for example TraceLog() string
|
||||
if (IsFileExtension(buffer, exts[i]))
|
||||
{
|
||||
// Avoid duplicates
|
||||
bool found = false;
|
||||
for (int j = 0; j < resCounter; j++)
|
||||
{
|
||||
if (TextIsEqual(paths[j], buffer)) { found = true; break; }
|
||||
if (strcmp(paths[j], buffer) == 0) { found = true; break; }
|
||||
}
|
||||
|
||||
if (!found && (resCounter < REXM_MAX_RESOURCE_PATHS))
|
||||
|
||||
Reference in New Issue
Block a user