REVIEWED: RENAMED: Renamed tool raylib_parser to rlparser

The tool can work with other libraries following `raylib.h` structure, keeping the `raylib_parser` name could be missleading. Also added an icon an reviewed Makefile an CI.
This commit is contained in:
Ray
2025-10-04 19:39:25 +02:00
parent f0ffdb33f4
commit d7a83a1111
13 changed files with 163 additions and 65 deletions

View File

@@ -32,6 +32,6 @@ jobs:
set -x set -x
git config user.name "github-actions[bot]" git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add tools/parser git add tools/rlparser
git commit -m "Update raylib_api.* by CI" git commit -m "rlparser: update raylib_api.* by CI"
git push git push

View File

@@ -1,44 +0,0 @@
EXTENSION?=txt
FORMAT?=DEFAULT
.PHONY: all parse clean raylib_api
raylib_parser: raylib_parser.c
cc raylib_parser.c -o raylib_parser
raylib_api: ../../src/raylib.h raylib_parser
FORMAT=DEFAULT EXTENSION=txt $(MAKE) raylib_api.txt
FORMAT=JSON EXTENSION=json $(MAKE) raylib_api.json
FORMAT=XML EXTENSION=xml $(MAKE) raylib_api.xml
FORMAT=LUA EXTENSION=lua $(MAKE) raylib_api.lua
raylib_api.$(EXTENSION): ../../src/raylib.h raylib_parser
./raylib_parser -i ../../src/raylib.h -o raylib_api.$(EXTENSION) -f $(FORMAT) -d RLAPI
raymath_api.$(EXTENSION): ../../src/raymath.h raylib_parser
./raylib_parser -i ../../src/raymath.h -o raymath_api.$(EXTENSION) -f $(FORMAT) -d RMAPI
rlgl_api.$(EXTENSION): ../../src/rlgl.h raylib_parser
./raylib_parser -i ../../src/rlgl.h -o rlgl_api.$(EXTENSION) -f $(FORMAT) -d RLAPI -t "RLGL IMPLEMENTATION"
reasings_api.$(EXTENSION): ../../examples/others/reasings.h raylib_parser
./raylib_parser -i ../../examples/others/reasings.h -o reasings_api.$(EXTENSION) -f $(FORMAT) -d EASEDEF
raygui_api.$(EXTENSION): ../raygui.h raylib_parser
./raylib_parser -i ../raygui.h -o raygui_api.$(EXTENSION) -f $(FORMAT) -d RAYGUIAPI -t "RAYGUI IMPLEMENTATION"
parse: raylib_api.$(EXTENSION) raymath_api.$(EXTENSION) rlgl_api.$(EXTENSION) raygui_api.$(EXTENSION)
# `make parse` (and therefore `make all) requires
# rmem.h, physac.h and raygui.h to exist in the correct directory
# API files for individual headers can be created likeso, provided the relevant header exists:
# FORMAT=JSON EXTENSION=json make raygui_api.json
all: raylib_parser
FORMAT=DEFAULT EXTENSION=txt $(MAKE) parse
FORMAT=JSON EXTENSION=json $(MAKE) parse
FORMAT=XML EXTENSION=xml $(MAKE) parse
FORMAT=LUA EXTENSION=lua $(MAKE) parse
clean:
rm -f raylib_parser *.json *.txt *.xml *.lua

118
tools/rlparser/Makefile Normal file
View File

@@ -0,0 +1,118 @@
EXTENSION?=txt
FORMAT?=DEFAULT
.PHONY: all parse clean raylib_api
# Determine PLATFORM_OS
# No uname.exe on MinGW!, but OS=Windows_NT on Windows!
# ifeq ($(UNAME),Msys) -> Windows
ifeq ($(OS),Windows_NT)
PLATFORM_OS = WINDOWS
else
UNAMEOS = $(shell uname)
ifeq ($(UNAMEOS),Linux)
PLATFORM_OS = LINUX
endif
ifeq ($(UNAMEOS),FreeBSD)
PLATFORM_OS = BSD
endif
ifeq ($(UNAMEOS),OpenBSD)
PLATFORM_OS = BSD
endif
ifeq ($(UNAMEOS),NetBSD)
PLATFORM_OS = BSD
endif
ifeq ($(UNAMEOS),DragonFly)
PLATFORM_OS = BSD
endif
ifeq ($(UNAMEOS),Darwin)
PLATFORM_OS = OSX
endif
endif
# Define default C compiler: CC
#------------------------------------------------------------------------------------------------
CC = gcc
ifeq ($(PLATFORM_OS),OSX)
# OSX default compiler
CC = clang
endif
ifeq ($(PLATFORM_OS),BSD)
# FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
CC = clang
endif
# Define default make program: MAKE
#------------------------------------------------------------------------------------------------
MAKE ?= make
ifeq ($(PLATFORM_OS),WINDOWS)
MAKE = mingw32-make
endif
# Define compiler flags: CFLAGS
#------------------------------------------------------------------------------------------------
CFLAGS = -Wall -std=c99
#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
ifeq ($(BUILD_MODE),DEBUG)
CFLAGS += -g -D_DEBUG
else
ifeq ($(PLATFORM_OS),OSX)
CFLAGS += -O2
else
CFLAGS += -s -O2
endif
endif
ifeq ($(PLATFORM_OS),WINDOWS)
# NOTE: The resource .rc file contains windows executable icon and properties
CFLAGS += rlparser.rc.data
endif
# Define processes to execute
#------------------------------------------------------------------------------------------------
# rlparser compilation
rlparser: rlparser.c
$(CC) rlparser.c -o rlparser $(CFLAGS)
# rlparser execution: [raylib.h] parse, generating some output files
raylib_api: ../../src/raylib.h rlparser
FORMAT=DEFAULT EXTENSION=txt $(MAKE) raylib_api.txt
FORMAT=JSON EXTENSION=json $(MAKE) raylib_api.json
FORMAT=XML EXTENSION=xml $(MAKE) raylib_api.xml
FORMAT=LUA EXTENSION=lua $(MAKE) raylib_api.lua
# rlparser execution: [raylib.h] parse, generating some output files
raylib_api.$(EXTENSION): ../../src/raylib.h rlparser
./rlparser -i ../../src/raylib.h -o raylib_api.$(EXTENSION) -f $(FORMAT) -d RLAPI
# rlparser execution: [rlgl.h] parse, generating some output files
rlgl_api.$(EXTENSION): ../../src/rlgl.h rlparser
./rlparser -i ../../src/rlgl.h -o rlgl_api.$(EXTENSION) -f $(FORMAT) -d RLAPI -t "RLGL IMPLEMENTATION"
# rlparser execution: [raymath.h] parse, generating some output files
raymath_api.$(EXTENSION): ../../src/raymath.h rlparser
./rlparser -i ../../src/raymath.h -o raymath_api.$(EXTENSION) -f $(FORMAT) -d RMAPI
# rlparser execution: [reasings.h] parse, generating some output files
reasings_api.$(EXTENSION): ../../examples/others/reasings.h rlparser
./rlparser -i ../../examples/others/reasings.h -o reasings_api.$(EXTENSION) -f $(FORMAT) -d EASEDEF
# rlparser execution: [raygui.h] parse, generating some output files
raygui_api.$(EXTENSION): ../raygui.h rlparser
./rlparser -i ../raygui.h -o raygui_api.$(EXTENSION) -f $(FORMAT) -d RAYGUIAPI -t "RAYGUI IMPLEMENTATION"
# Target to generate required APIs output files
parse: raylib_api.$(EXTENSION) raymath_api.$(EXTENSION) rlgl_api.$(EXTENSION) raygui_api.$(EXTENSION)
# "make parse" (and therefore "make all") requires
# raygui.h and reasings_api.h to exist in the correct directory
# API files for individual headers can be created likeso, provided the relevant header exists:
# FORMAT=JSON EXTENSION=json make raygui_api.json
all: rlparser
FORMAT=DEFAULT EXTENSION=txt $(MAKE) parse
FORMAT=JSON EXTENSION=json $(MAKE) parse
FORMAT=XML EXTENSION=xml $(MAKE) parse
FORMAT=LUA EXTENSION=lua $(MAKE) parse
# Clean rlparser and generated output files
clean:
rm -f rlparser *.json *.txt *.xml *.lua

View File

@@ -1,4 +1,4 @@
# raylib parser # rlparser - raylib parser
This parser scans [`raylib.h`](../src/raylib.h) to get information about `defines`, `structs`, `enums` and `functions`. This parser scans [`raylib.h`](../src/raylib.h) to get information about `defines`, `structs`, `enums` and `functions`.
All data is separated into parts, usually as strings. The following types are used for data: All data is separated into parts, usually as strings. The following types are used for data:
@@ -8,16 +8,16 @@ All data is separated into parts, usually as strings. The following types are us
- `struct StructInfo` - `struct StructInfo`
- `struct EnumInfo` - `struct EnumInfo`
Check `raylib_parser.c` for details about those structs. Check `rlparser.c` for details about those structs.
## Command Line ## Command Line
``` ```
////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////
// // // //
// raylib API parser // // rlparser - raylib header API parser //
// // // //
// more info and bugs-report: github.com/raysan5/raylib/parser // // more info and bugs-report: github.com/raysan5/raylib/tools/rlparser //
// // // //
// Copyright (c) 2021-2025 Ramon Santamaria (@raysan5) // // Copyright (c) 2021-2025 Ramon Santamaria (@raysan5) //
// // // //
@@ -25,7 +25,7 @@ Check `raylib_parser.c` for details about those structs.
USAGE: USAGE:
> raylib_parser [--help] [--input <filename.h>] [--output <filename.ext>] [--format <type>] > rlparser [--help] [--input <filename.h>] [--output <filename.ext>] [--format <type>]
OPTIONS: OPTIONS:
@@ -50,19 +50,19 @@ OPTIONS:
EXAMPLES: EXAMPLES:
> raylib_parser --input raylib.h --output api.json > rlparser --input raylib.h --output api.json
Process <raylib.h> to generate <api.json> Process <raylib.h> to generate <api.json>
> raylib_parser --output raylib_data.info --format XML > rlparser --output raylib_data.info --format XML
Process <raylib.h> to generate <raylib_data.info> as XML text data Process <raylib.h> to generate <raylib_data.info> as XML text data
> raylib_parser --input raymath.h --output raymath_data.info --format XML --define RMAPI > rlparser --input raymath.h --output raymath_data.info --format XML --define RMAPI
Process <raymath.h> to generate <raymath_data.info> as XML text data Process <raymath.h> to generate <raymath_data.info> as XML text data
``` ```
## Constraints ## Constraints
This parser is specifically designed to work with raylib.h, so, it has some constraints: `rlparser` is specifically designed to work with `raylib.h`, so, it has some constraints:
- Functions are expected as a single line with the following structure: - Functions are expected as a single line with the following structure:
``` ```
@@ -103,5 +103,7 @@ This parser **does not require `<string.h>` library**, all data is parsed direct
### LICENSE: zlib/libpng ### LICENSE: zlib/libpng
raylib-parser is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details. raylib-parser is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software.
Check [LICENSE](LICENSE) for further details.

View File

@@ -1,28 +1,28 @@
/********************************************************************************************** /**********************************************************************************************
raylib API parser rlparser - raylib header API parser, extracts API information as separate tokens
This parser scans raylib.h to get API information about defines, structs, aliases, enums, callbacks and functions. This parser scans raylib.h to get API information about defines, structs, aliases, enums, callbacks and functions.
All data is divided into pieces, usually as strings. The following types are used for data: All data is divided into pieces, usually as strings. The following types are used for data:
- struct DefineInfo - struct DefineInfo
- struct StructInfo - struct StructInfo
- struct AliasInfo - struct AliasInfo
- struct EnumInfo - struct EnumInfo
- struct FunctionInfo - struct FunctionInfo
CONSTRAINTS: WARNING: This parser is specifically designed to work with raylib.h, and has some contraints
in that regards. Still, it can also work with other header files that follow same file structure
conventions as raylib.h: rlgl.h, raymath.h, raygui.h, reasings.h
CONSTRAINTS:
This parser is specifically designed to work with raylib.h, so, it has some constraints: This parser is specifically designed to work with raylib.h, so, it has some constraints:
- Functions are expected as a single line with the following structure: - Functions are expected as a single line with the following structure:
<retType> <name>(<paramType[0]> <paramName[0]>, <paramType[1]> <paramName[1]>); <desc> <retType> <name>(<paramType[0]> <paramName[0]>, <paramType[1]> <paramName[1]>); <desc>
Be careful with functions broken into several lines, it breaks the process! WARNING: Be careful with functions broken into several lines, it breaks the process!
- Structures are expected as several lines with the following form: - Structures are expected as several lines with the following form:
<desc> <desc>
typedef struct <name> { typedef struct <name> {
<fieldType[0]> <fieldName[0]>; <fieldDesc[0]> <fieldType[0]> <fieldName[0]>; <fieldDesc[0]>
@@ -31,7 +31,6 @@
} <name>; } <name>;
- Enums are expected as several lines with the following form: - Enums are expected as several lines with the following form:
<desc> <desc>
typedef enum { typedef enum {
<valueName[0]> = <valueInteger[0]>, <valueDesc[0]> <valueName[0]> = <valueInteger[0]>, <valueDesc[0]>
@@ -45,7 +44,6 @@
- Value description can be provided or not - Value description can be provided or not
OTHER NOTES: OTHER NOTES:
- This parser could work with other C header files if mentioned constraints are followed. - This parser could work with other C header files if mentioned constraints are followed.
- This parser does not require <string.h> library, all data is parsed directly from char buffers. - This parser does not require <string.h> library, all data is parsed directly from char buffers.

BIN
tools/rlparser/rlparser.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@@ -0,0 +1,24 @@
IDI_APP_ICON ICON "rlparser.ico"
1 VERSIONINFO
FILEVERSION 5,5,0,0
PRODUCTVERSION 5,5,0,0
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904E4" // English US
BEGIN
VALUE "CompanyName", "raylib technologies"
VALUE "FileDescription", "rlparser | raylib header API parser"
VALUE "FileVersion", "1.0"
VALUE "InternalName", "rlparser"
VALUE "LegalCopyright", "(c) 2025 Ramon Santamaria (@raysan5)"
VALUE "OriginalFilename", "rlparser"
VALUE "ProductName", "rlparser"
VALUE "ProductVersion", "1.0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1252 // English US
END
END

Binary file not shown.