From bbc8d391857da7fd7813db0aaa5cb40e193ad14a Mon Sep 17 00:00:00 2001 From: lazaray <104470294+lazaray@users.noreply.github.com> Date: Fri, 6 May 2022 20:18:39 +0200 Subject: [PATCH] Add support for truncating parser input (#2464) * Add support for truncating parser input * Remove RLAPI from implementations in rlgl.h --- parser/Makefile | 8 ++++---- parser/raylib_parser.c | 40 ++++++++++++++++++++++++++++++++++++++++ src/rlgl.h | 4 ++-- 3 files changed, 46 insertions(+), 6 deletions(-) diff --git a/parser/Makefile b/parser/Makefile index 9446e282..c9b7f443 100644 --- a/parser/Makefile +++ b/parser/Makefile @@ -19,10 +19,10 @@ parse: ./raylib_parser -i ../src/raylib.h -o raylib_api.$(EXTENSION) -f $(FORMAT) -d RLAPI ./raylib_parser -i ../src/raymath.h -o raymath_api.$(EXTENSION) -f $(FORMAT) -d RMAPI ./raylib_parser -i ../src/extras/easings.h -o easings_api.$(EXTENSION) -f $(FORMAT) -d EASEDEF - ./raylib_parser -i ../src/extras/physac.h -o physac_api.$(EXTENSION) -f $(FORMAT) -d PHYSACDEF - ./raylib_parser -i ../src/extras/raygui.h -o raygui_api.$(EXTENSION) -f $(FORMAT) -d RAYGUIAPI - ./raylib_parser -i ../src/extras/rmem.h -o rmem_api.$(EXTENSION) -f $(FORMAT) -d RMEMAPI - ./raylib_parser -i ../src/rlgl.h -o rlgl_api.$(EXTENSION) -f $(FORMAT) -d RLAPI + ./raylib_parser -i ../src/extras/physac.h -o physac_api.$(EXTENSION) -f $(FORMAT) -d PHYSACDEF -t "PHYSAC IMPLEMENTATION" + ./raylib_parser -i ../src/extras/raygui.h -o raygui_api.$(EXTENSION) -f $(FORMAT) -d RAYGUIAPI -t "RAYGUI IMPLEMENTATION" + ./raylib_parser -i ../src/extras/rmem.h -o rmem_api.$(EXTENSION) -f $(FORMAT) -d RMEMAPI -t "RMEM IMPLEMENTATION" + ./raylib_parser -i ../src/rlgl.h -o rlgl_api.$(EXTENSION) -f $(FORMAT) -d RLAPI -t "RLGL IMPLEMENTATION" clean: rm -f raylib_parser *.json *.txt *.xml *.lua diff --git a/parser/raylib_parser.c b/parser/raylib_parser.c index 884ff7c6..55d2d648 100644 --- a/parser/raylib_parser.c +++ b/parser/raylib_parser.c @@ -154,6 +154,7 @@ static FunctionInfo *funcs = NULL; // Command line variables static char apiDefine[32] = { 0 }; // Functions define (i.e. RLAPI for raylib.h, RMDEF for raymath.h, etc.) +static char truncAfter[32] = { 0 }; // Truncate marker (i.e. "RLGL IMPLEMENTATION" for rlgl.h) static char inFileName[512] = { 0 }; // Input file name (required in case of provided through CLI) static char outFileName[512] = { 0 }; // Output file name (required for file save/export) static int outputFormat = DEFAULT; @@ -171,6 +172,7 @@ static void GetDescription(const char *source, char *description); static void MoveArraySize(char *name, char *type); // Move array size from name to type static unsigned int TextLength(const char *text); // Get text length in bytes, check for \0 character static bool IsTextEqual(const char *text1, const char *text2, unsigned int count); +static int TextFindIndex(const char *text, const char *find); // Find first text occurrence within a string static void MemoryCopy(void *dest, const void *src, unsigned int count); static char *EscapeBackslashes(char *text); // Replace '\' by "\\" when exporting to JSON and XML static const char *StrDefineType(DefineType type); // Get string of define type @@ -196,6 +198,19 @@ int main(int argc, char* argv[]) int linesCount = 0; char **lines = GetTextLines(buffer, length, &linesCount); + // Truncate lines + if (truncAfter[0] != '\0') + { + int newCount = -1; + for (int i = 0; i < linesCount; i++) + { + if (newCount > -1) free(lines[i]); + else if (TextFindIndex(lines[i], truncAfter) > -1) newCount = i; + } + if (newCount > -1) linesCount = newCount; + printf("Number of truncated text lines: %i\n", linesCount); + } + // Defines line indices int *defineLines = (int *)malloc(MAX_DEFINES_TO_PARSE*sizeof(int)); @@ -936,6 +951,8 @@ static void ShowCommandLineInfo(void) printf(" Supported types: DEFAULT, JSON, XML, LUA\n\n"); printf(" -d, --define : Define functions define (i.e. RLAPI for raylib.h, RMDEF for raymath.h, etc.)\n"); printf(" NOTE: If not specified, defaults to: RLAPI\n\n"); + printf(" -t, --truncate : Define string to truncate input after (i.e. \"RLGL IMPLEMENTATION\" for rlgl.h)\n"); + printf(" NOTE: If not specified input is not truncated.\n\n"); printf("\nEXAMPLES:\n\n"); printf(" > raylib_parser --input raylib.h --output api.json\n"); @@ -997,6 +1014,15 @@ static void ProcessCommandLine(int argc, char *argv[]) } else printf("WARNING: No define key provided\n"); } + else if (IsTextEqual(argv[i], "-t", 2) || IsTextEqual(argv[i], "--truncate", 10)) + { + if (((i + 1) < argc) && (argv[i + 1][0] != '-')) + { + MemoryCopy(truncAfter, argv[i + 1], TextLength(argv[i + 1])); // Read truncate marker + truncAfter[TextLength(argv[i + 1])] = '\0'; + i++; + } + } } } @@ -1174,6 +1200,20 @@ static bool IsTextEqual(const char *text1, const char *text2, unsigned int count return result; } +// Find first text occurrence within a string +int TextFindIndex(const char *text, const char *find) +{ + int textLen = TextLength(text); + int findLen = TextLength(find); + + for (int i = 0; i <= textLen - findLen; i++) + { + if (IsTextEqual(&text[i], find, findLen)) return i; + } + + return -1; +} + // Custom memcpy() to avoid static void MemoryCopy(void *dest, const void *src, unsigned int count) { diff --git a/src/rlgl.h b/src/rlgl.h index 5783a298..d929989d 100644 --- a/src/rlgl.h +++ b/src/rlgl.h @@ -4091,7 +4091,7 @@ Matrix rlGetMatrixTransform(void) } // Get internal projection matrix for stereo render (selected eye) -RLAPI Matrix rlGetMatrixProjectionStereo(int eye) +Matrix rlGetMatrixProjectionStereo(int eye) { Matrix mat = rlMatrixIdentity(); #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2) @@ -4101,7 +4101,7 @@ RLAPI Matrix rlGetMatrixProjectionStereo(int eye) } // Get internal view offset matrix for stereo render (selected eye) -RLAPI Matrix rlGetMatrixViewOffsetStereo(int eye) +Matrix rlGetMatrixViewOffsetStereo(int eye) { Matrix mat = rlMatrixIdentity(); #if defined(GRAPHICS_API_OPENGL_33) || defined(GRAPHICS_API_OPENGL_ES2)