mirror of
https://github.com/raysan5/raylib.git
synced 2025-10-06 18:06:28 +00:00
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:
4
.github/workflows/parse_api.yml
vendored
4
.github/workflows/parse_api.yml
vendored
@@ -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
|
||||||
|
@@ -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
118
tools/rlparser/Makefile
Normal 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
|
@@ -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:
|
||||||
```
|
```
|
||||||
@@ -91,7 +91,7 @@ This parser is specifically designed to work with raylib.h, so, it has some cons
|
|||||||
```
|
```
|
||||||
|
|
||||||
_NOTE: For enums, multiple options are supported:_
|
_NOTE: For enums, multiple options are supported:_
|
||||||
|
|
||||||
- If value is not provided, (<valueInteger[i -1]> + 1) is assigned
|
- If value is not provided, (<valueInteger[i -1]> + 1) is assigned
|
||||||
- Value description can be provided or not
|
- Value description can be provided or not
|
||||||
|
|
||||||
@@ -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.
|
||||||
|
|
@@ -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
|
||||||
|
|
||||||
|
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:
|
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
BIN
tools/rlparser/rlparser.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.9 KiB |
24
tools/rlparser/rlparser.rc
Normal file
24
tools/rlparser/rlparser.rc
Normal 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
|
BIN
tools/rlparser/rlparser.rc.data
Normal file
BIN
tools/rlparser/rlparser.rc.data
Normal file
Binary file not shown.
Reference in New Issue
Block a user