summaryrefslogtreecommitdiffhomepage
path: root/parser
diff options
context:
space:
mode:
authorlazaray <[email protected]>2022-05-06 20:18:39 +0200
committerGitHub <[email protected]>2022-05-06 20:18:39 +0200
commitbbc8d391857da7fd7813db0aaa5cb40e193ad14a (patch)
tree64d9f3567f9da179c159ccf06abb667914fbcb83 /parser
parent19f88241ec43e64c256c625e703de83d68e4a91a (diff)
downloadraylib-bbc8d391857da7fd7813db0aaa5cb40e193ad14a.tar.gz
raylib-bbc8d391857da7fd7813db0aaa5cb40e193ad14a.zip
Add support for truncating parser input (#2464)
* Add support for truncating parser input * Remove RLAPI from implementations in rlgl.h
Diffstat (limited to 'parser')
-rw-r--r--parser/Makefile8
-rw-r--r--parser/raylib_parser.c40
2 files changed, 44 insertions, 4 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 <DEF> : 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 <after> : 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 <string.h>
static void MemoryCopy(void *dest, const void *src, unsigned int count)
{