From 08ef5b435273eaa3de860eac1c031219cd815587 Mon Sep 17 00:00:00 2001 From: jussi Date: Sun, 27 Nov 2022 16:25:25 +0200 Subject: RL_LoadDirectoryFilesEx and separate option for doc_parser. --- API.md | 9 +++++++++ README.md | 4 ++-- changelog | 2 ++ devnotes | 10 +++------- doc_parser.lua | 49 ++++++++++++++++++++++++++++++++++++------------- include/core.h | 1 + src/core.c | 27 +++++++++++++++++++++++++++ src/lua_core.c | 1 + 8 files changed, 81 insertions(+), 22 deletions(-) diff --git a/API.md b/API.md index 94b9d65..2a653db 100644 --- a/API.md +++ b/API.md @@ -2065,6 +2065,15 @@ Load directory filepaths --- +> fileNames = RL_LoadDirectoryFilesEx( string basePath, string filter, bool scanSubdirs ) + +Load directory filepaths with extension filtering and recursive directory scan + +- Failure return false +- Success return string{} + +--- + > success = RL_ChangeDirectory( string directory ) Change working directory, return true on success diff --git a/README.md b/README.md index eccdc98..ed92cb6 100644 --- a/README.md +++ b/README.md @@ -25,12 +25,12 @@ List of some MISSING features that are planned to be included. For specific func * Textures * LoadImageFromMemory * Text - * LoadFontFromMemory * GlyphInfo + * LoadFontFromMemory * Audio + * AudioStream management functions * LoadWaveFromMemory * LoadMusicStreamFromMemory - * AudioStream management functions ## Usage diff --git a/changelog b/changelog index db08e35..b0a2e61 100644 --- a/changelog +++ b/changelog @@ -13,3 +13,5 @@ ADDED: Help argument. CHANGED: Changed fuction name RL_rlSetLineWidth to RL_rlglSetLineWidth. CHANGED: Changed fuction name RL_rlGetLineWidth to RL_rlglGetLineWidth. FIX: DrawRectangleGradient V and H expecting wrong amount of arguments. +ADDED: RL_LoadDirectoryFilesEx. +ADDED: Flag option (-s) for doc_parser.lua for exporting module APIs to separate files. diff --git a/devnotes b/devnotes index 17e26ff..eb6a635 100644 --- a/devnotes +++ b/devnotes @@ -2,13 +2,9 @@ Current { } Backlog { - * Core - * LoadDirectoryFilesEx * Audio - * AudioStream + * AudioStream. * Text - * Codepoints - * String management. At least TextSplit. - - * VR? + * Codepoints? + * VR. } diff --git a/doc_parser.lua b/doc_parser.lua index 09227cf..d7383e4 100644 --- a/doc_parser.lua +++ b/doc_parser.lua @@ -1,5 +1,12 @@ --Create api.md file from c sources. +-- Export each module as separate .md file. +local separate = false + +if arg[1] ~= nil and arg[1] == "-s" then + separate = true +end + local function split( str, sep ) if sep == nil then sep = "%s" @@ -34,6 +41,8 @@ Note: Engine will call Raylib functions 'BeginDrawing()' before this function ca You can still use RL_BeginDrawing() and RL_EndDrawing() manually from anywhere.\n\n---\n" ) apiFile:write( "\n> function log( logLevel, message )\n\ This function can be used for custom log message handling.\n\n---\n" ) +apiFile:write( "\n> function exit()\n\ +This function will be called on program close. Cleanup could be done here.\n\n---\n" ) -- Globals. @@ -142,27 +151,35 @@ apiFile:write( "\n> NPatchInfo = { { 0, 0, 24, 24 }, 0, 0, 0, 0, NPATCH_NINE_PAT apiFile:write( "\n> ModelAnimations = ModelAnimationsId\n\ int id. ModelAnimations\n\n---\n" ) +if separate then + apiFile:close() +end + -- Functions. local sourceFiles = { - "src/core.c", - "src/shapes.c", - "src/textures.c", - "src/text.c", - "src/models.c", - "src/audio.c", - "src/rmath.c", - "src/rgui.c", - "src/lights.c", - "src/rlgl.c", - "src/easings.c", + "core", + "shapes", + "textures", + "text", + "models", + "audio", + "rmath", + "rgui", + "lights", + "rlgl", + "easings", } for _, src in ipairs( sourceFiles ) do - srcFile = io.open( src, "r" ) + srcFile = io.open( "src/"..src..".c", "r" ) local line = "" local p = false + if separate then + apiFile = io.open( src..".md", "w" ) + end + repeat line = srcFile:read( "*l" ) @@ -182,6 +199,12 @@ for _, src in ipairs( sourceFiles ) do until line == nil srcFile:close() + + if separate then + apiFile:close() + end end -apiFile:close() +if not separate then + apiFile:close() +end diff --git a/include/core.h b/include/core.h index 9812d8d..cdd644f 100644 --- a/include/core.h +++ b/include/core.h @@ -85,6 +85,7 @@ int lcoreGetDirectoryPath( lua_State *L ); int lcoreGetPrevDirectoryPath( lua_State *L ); int lcoreGetWorkingDirectory( lua_State *L ); int lcoreLoadDirectoryFiles( lua_State *L ); +int lcoreLoadDirectoryFilesEx( lua_State *L ); int lcoreChangeDirectory( lua_State *L ); int lcoreIsFileDropped( lua_State *L ); int lcoreLoadDroppedFiles( lua_State *L ); diff --git a/src/core.c b/src/core.c index f821af0..eabfe52 100644 --- a/src/core.c +++ b/src/core.c @@ -2198,6 +2198,33 @@ int lcoreLoadDirectoryFiles( lua_State *L ) { return 1; } +/* +> fileNames = RL_LoadDirectoryFilesEx( string basePath, string filter, bool scanSubdirs ) + +Load directory filepaths with extension filtering and recursive directory scan + +- Failure return false +- Success return string{} +*/ +int lcoreLoadDirectoryFilesEx( lua_State *L ) { + if ( !lua_isstring( L, -3 ) || !lua_isstring( L, -2 ) || !lua_isboolean( L, -1 ) ) { + TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_LoadDirectoryFilesEx( string dirPath )" ); + lua_pushboolean( L, false ); + return 1; + } + FilePathList files = LoadDirectoryFilesEx( lua_tostring( L, -3 ), lua_tostring( L, -2 ), lua_toboolean( L, -1 ) ); + + lua_createtable( L, files.count, 0 ); + + for ( int i = 0; i < files.count; ++i ) { + lua_pushstring( L, files.paths[i] ); + lua_rawseti( L, -2, i+1 ); + } + UnloadDirectoryFiles( files ); + + return 1; +} + /* > success = RL_ChangeDirectory( string directory ) diff --git a/src/lua_core.c b/src/lua_core.c index 1d46440..defd8f2 100644 --- a/src/lua_core.c +++ b/src/lua_core.c @@ -748,6 +748,7 @@ void luaRegister() { lua_register( L, "RL_GetPrevDirectoryPath", lcoreGetPrevDirectoryPath ); lua_register( L, "RL_GetWorkingDirectory", lcoreGetWorkingDirectory ); lua_register( L, "RL_LoadDirectoryFiles", lcoreLoadDirectoryFiles ); + lua_register( L, "RL_LoadDirectoryFilesEx", lcoreLoadDirectoryFilesEx ); lua_register( L, "RL_ChangeDirectory", lcoreChangeDirectory ); lua_register( L, "RL_IsFileDropped", lcoreIsFileDropped ); lua_register( L, "RL_LoadDroppedFiles", lcoreLoadDroppedFiles ); -- cgit v1.2.3