TextInsert and TextSplit.
This commit is contained in:
20
API.md
20
API.md
@@ -6668,6 +6668,26 @@ Encode one codepoint into UTF-8 byte array
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## Text - Text strings management functions (no UTF-8 strings, only byte chars)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> text = RL.TextInsert( string text, string insert, int position )
|
||||||
|
|
||||||
|
Insert text in a specific position, moves all text forward
|
||||||
|
|
||||||
|
- Success return string
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
> splits = RL.TextSplit( string text, char delimiter )
|
||||||
|
|
||||||
|
Split text into multiple strings
|
||||||
|
|
||||||
|
- Success return string{}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Models - Basic geometric 3D shapes drawing functions
|
## Models - Basic geometric 3D shapes drawing functions
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -3999,6 +3999,23 @@ function RL.GetCodepointPrevious( text ) end
|
|||||||
---@return any utf8Size
|
---@return any utf8Size
|
||||||
function RL.CodepointToUTF8( codepoint ) end
|
function RL.CodepointToUTF8( codepoint ) end
|
||||||
|
|
||||||
|
-- Text - Text strings management functions (no UTF-8 strings, only byte chars)
|
||||||
|
|
||||||
|
---Insert text in a specific position, moves all text forward
|
||||||
|
---- Success return string
|
||||||
|
---@param text string
|
||||||
|
---@param insert string
|
||||||
|
---@param position integer
|
||||||
|
---@return any text
|
||||||
|
function RL.TextInsert( text, insert, position ) end
|
||||||
|
|
||||||
|
---Split text into multiple strings
|
||||||
|
---- Success return string{}
|
||||||
|
---@param text string
|
||||||
|
---@param delimiter any
|
||||||
|
---@return any splits
|
||||||
|
function RL.TextSplit( text, delimiter ) end
|
||||||
|
|
||||||
-- Models - Basic geometric 3D shapes drawing functions
|
-- Models - Basic geometric 3D shapes drawing functions
|
||||||
|
|
||||||
---Draw a line in 3D world space
|
---Draw a line in 3D world space
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ DETAILED CHANGES:
|
|||||||
- CHANGE: Raygui lib changed term element to control to correspond raylib naming.
|
- CHANGE: Raygui lib changed term element to control to correspond raylib naming.
|
||||||
- ADDED: LoadBufferFromString, LoadWaveFromMemory and LoadMusicStreamFromMemory.
|
- ADDED: LoadBufferFromString, LoadWaveFromMemory and LoadMusicStreamFromMemory.
|
||||||
- CHANGE: GetGlyphInfo and GetGlyphInfoByIndex return glyphInfo as lightuserdata.
|
- CHANGE: GetGlyphInfo and GetGlyphInfoByIndex return glyphInfo as lightuserdata.
|
||||||
|
- ADDED: TextInsert and TextSplit.
|
||||||
|
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
Release: ReiLua version 0.6.0 Using Raylib 4.5
|
Release: ReiLua version 0.6.0 Using Raylib 4.5
|
||||||
|
|||||||
3
devnotes
3
devnotes
@@ -9,9 +9,6 @@ Backlog {
|
|||||||
* Platform desktop SDL
|
* Platform desktop SDL
|
||||||
* Text input not working on gui. Could this be Raylib issue?
|
* Text input not working on gui. Could this be Raylib issue?
|
||||||
* Haptic functions.
|
* Haptic functions.
|
||||||
* Text
|
|
||||||
* Text codepoints management functions (unicode characters)? Could be usefull for luajit.
|
|
||||||
* Some of the Text strings management functions could be easier to use than the Lua ones.
|
|
||||||
* Audio
|
* Audio
|
||||||
* AudioStream.
|
* AudioStream.
|
||||||
* Core
|
* Core
|
||||||
|
|||||||
@@ -53,3 +53,6 @@ int ltextGetCodepoint( lua_State *L );
|
|||||||
int ltextGetCodepointNext( lua_State *L );
|
int ltextGetCodepointNext( lua_State *L );
|
||||||
int ltextGetCodepointPrevious( lua_State *L );
|
int ltextGetCodepointPrevious( lua_State *L );
|
||||||
int ltextCodepointToUTF8( lua_State *L );
|
int ltextCodepointToUTF8( lua_State *L );
|
||||||
|
/* Text strings management functions (no UTF-8 strings, only byte chars) */
|
||||||
|
int ltextTextInsert( lua_State *L );
|
||||||
|
int ltextTextSplit( lua_State *L );
|
||||||
|
|||||||
@@ -1765,6 +1765,9 @@ void luaRegister() {
|
|||||||
assingGlobalFunction( "GetCodepointNext", ltextGetCodepointNext );
|
assingGlobalFunction( "GetCodepointNext", ltextGetCodepointNext );
|
||||||
assingGlobalFunction( "GetCodepointPrevious", ltextGetCodepointPrevious );
|
assingGlobalFunction( "GetCodepointPrevious", ltextGetCodepointPrevious );
|
||||||
assingGlobalFunction( "CodepointToUTF8", ltextCodepointToUTF8 );
|
assingGlobalFunction( "CodepointToUTF8", ltextCodepointToUTF8 );
|
||||||
|
/* Text strings management functions (no UTF-8 strings, only byte chars) */
|
||||||
|
assingGlobalFunction( "TextInsert", ltextTextInsert );
|
||||||
|
assingGlobalFunction( "TextSplit", ltextTextSplit );
|
||||||
|
|
||||||
/* Audio. */
|
/* Audio. */
|
||||||
/* Audio device management functions. */
|
/* Audio device management functions. */
|
||||||
|
|||||||
61
src/text.c
61
src/text.c
@@ -1042,6 +1042,8 @@ int ltextLoadCodepoints( lua_State *L ) {
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
int* codepoints = LoadCodepoints( text, &count );
|
int* codepoints = LoadCodepoints( text, &count );
|
||||||
|
|
||||||
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
for ( int i = 0; i < count; i++ ) {
|
for ( int i = 0; i < count; i++ ) {
|
||||||
lua_pushinteger( L, codepoints[i] );
|
lua_pushinteger( L, codepoints[i] );
|
||||||
lua_rawseti( L, -2, i + 1 );
|
lua_rawseti( L, -2, i + 1 );
|
||||||
@@ -1133,3 +1135,62 @@ int ltextCodepointToUTF8( lua_State *L ) {
|
|||||||
|
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
## Text - Text strings management functions (no UTF-8 strings, only byte chars)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
> text = RL.TextInsert( string text, string insert, int position )
|
||||||
|
|
||||||
|
Insert text in a specific position, moves all text forward
|
||||||
|
|
||||||
|
- Success return string
|
||||||
|
*/
|
||||||
|
int ltextTextInsert( lua_State *L ) {
|
||||||
|
const char* text = luaL_checkstring( L, 1 );
|
||||||
|
const char* insert = luaL_checkstring( L, 2 );
|
||||||
|
int position = luaL_checkinteger( L, 3 );
|
||||||
|
|
||||||
|
// char* result = TextInsert( text, insert, position ); // Bug in the raylib implementation.
|
||||||
|
|
||||||
|
int textLen = TextLength( text );
|
||||||
|
int insertLen = TextLength( insert );
|
||||||
|
char* result = RL_MALLOC( textLen + insertLen + 1 );
|
||||||
|
|
||||||
|
memcpy( result, text, position );
|
||||||
|
memcpy( result + position, insert, insertLen );
|
||||||
|
memcpy( result + position + insertLen, text + position, textLen - position );
|
||||||
|
|
||||||
|
result[ textLen + insertLen ] = '\0'; // Make sure text string is valid!
|
||||||
|
|
||||||
|
lua_pushstring( L, result );
|
||||||
|
free( result );
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> splits = RL.TextSplit( string text, char delimiter )
|
||||||
|
|
||||||
|
Split text into multiple strings
|
||||||
|
|
||||||
|
- Success return string{}
|
||||||
|
*/
|
||||||
|
int ltextTextSplit( lua_State *L ) {
|
||||||
|
const char* text = luaL_checkstring( L, 1 );
|
||||||
|
const char* delimiter = luaL_checkstring( L, 2 );
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
const char** splits = TextSplit( text, delimiter[0], &count );
|
||||||
|
|
||||||
|
lua_createtable( L, count, 0 );
|
||||||
|
|
||||||
|
for ( int i = 0; i < count; i++ ) {
|
||||||
|
lua_pushstring( L, splits[i] );
|
||||||
|
lua_rawseti( L, -2, i + 1 );
|
||||||
|
}
|
||||||
|
/* Note! No need to free. Uses static memory. */
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user