Text codepoints management functions.

This commit is contained in:
jussi
2024-01-28 13:10:18 +02:00
parent 3b3d0ad32e
commit 71cc89c303
6 changed files with 262 additions and 8 deletions

64
API.md
View File

@@ -6470,7 +6470,7 @@ Get glyph index position in font for a codepoint (unicode character), fallback t
> glyphInfo = RL.GetGlyphInfo( Font font, int codepoint ) > glyphInfo = RL.GetGlyphInfo( Font font, int codepoint )
Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found. Return as lightuserdata
- Success return GlyphInfo - Success return GlyphInfo
@@ -6478,7 +6478,7 @@ Get glyph font info data for a codepoint (unicode character), fallback to '?' if
> glyphInfo = RL.GetGlyphInfoByIndex( Font font, int index ) > glyphInfo = RL.GetGlyphInfoByIndex( Font font, int index )
Get glyph font info data by index Get glyph font info data by index. Return as lightuserdata
- Failure return nil - Failure return nil
- Success return GlyphInfo - Success return GlyphInfo
@@ -6608,6 +6608,66 @@ Get glyphInfo character image data. Return as lightuserdata
--- ---
## Text - Text codepoints management functions (unicode characters)
---
> string = RL.LoadUTF8( int{} codepoints )
Load UTF-8 text encoded from codepoints array
- Success return string
---
> codepoints = RL.LoadCodepoints( string text )
Load all codepoints from a UTF-8 text string
- Success return int{}
---
> count = RL.GetCodepointCount( string text )
Get total number of codepoints in a UTF-8 encoded string
- Success return int
---
> codepoint, codepointSize = RL.GetCodepoint( string text )
Get codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
- Success return int, int
---
> codepoint, codepointSize = RL.GetCodepointNext( string text )
Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
- Success return int, int
---
> codepoint, codepointSize = RL.GetCodepointPrevious( string text )
Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
- Success return int, int
---
> string, utf8Size = RL.CodepointToUTF8( int codepoint )
Encode one codepoint into UTF-8 byte array
- Success return string, int
---
## Models - Basic geometric 3D shapes drawing functions ## Models - Basic geometric 3D shapes drawing functions
--- ---

View File

@@ -3836,14 +3836,14 @@ function RL.MeasureText( font, text, fontSize, spacing ) end
---@return any index ---@return any index
function RL.GetGlyphIndex( font, codepoint ) end function RL.GetGlyphIndex( font, codepoint ) end
---Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found ---Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found. Return as lightuserdata
---- Success return GlyphInfo ---- Success return GlyphInfo
---@param font any ---@param font any
---@param codepoint integer ---@param codepoint integer
---@return any glyphInfo ---@return any glyphInfo
function RL.GetGlyphInfo( font, codepoint ) end function RL.GetGlyphInfo( font, codepoint ) end
---Get glyph font info data by index ---Get glyph font info data by index. Return as lightuserdata
---- Failure return nil ---- Failure return nil
---- Success return GlyphInfo ---- Success return GlyphInfo
---@param font any ---@param font any
@@ -3951,6 +3951,54 @@ function RL.GetGlyphInfoAdvanceX( glyphInfo ) end
---@return any image ---@return any image
function RL.GetGlyphInfoImage( glyphInfo ) end function RL.GetGlyphInfoImage( glyphInfo ) end
-- Text - Text codepoints management functions (unicode characters)
---Load UTF-8 text encoded from codepoints array
---- Success return string
---@param codepoints table
---@return any string
function RL.LoadUTF8( codepoints ) end
---Load all codepoints from a UTF-8 text string
---- Success return int{}
---@param text string
---@return any codepoints
function RL.LoadCodepoints( text ) end
---Get total number of codepoints in a UTF-8 encoded string
---- Success return int
---@param text string
---@return any count
function RL.GetCodepointCount( text ) end
---Get codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
---- Success return int, int
---@param text string
---@return any codepoint
---@return any codepointSize
function RL.GetCodepoint( text ) end
---Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
---- Success return int, int
---@param text string
---@return any codepoint
---@return any codepointSize
function RL.GetCodepointNext( text ) end
---Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
---- Success return int, int
---@param text string
---@return any codepoint
---@return any codepointSize
function RL.GetCodepointPrevious( text ) end
---Encode one codepoint into UTF-8 byte array
---- Success return string, int
---@param codepoint integer
---@return any string
---@return any utf8Size
function RL.CodepointToUTF8( codepoint ) 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

View File

@@ -33,6 +33,7 @@ KEY CHANGES:
- CHANGE: GuiTabBar works differently to raygui implementation. - CHANGE: GuiTabBar works differently to raygui implementation.
- CHANGE: Raygui lib refactoring. - CHANGE: Raygui lib refactoring.
- ADDED: Raygui lib extensions property list. - ADDED: Raygui lib extensions property list.
- ADDED: Text codepoints management functions.
DETAILED CHANGES: DETAILED CHANGES:
- REMOVED: DrawLineBezierQuad, DrawLineBezierCubic. - REMOVED: DrawLineBezierQuad, DrawLineBezierCubic.
@@ -63,6 +64,7 @@ DETAILED CHANGES:
- CHANGE: Raygui.h returns textBounds for some controls. - CHANGE: Raygui.h returns textBounds for some controls.
- 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.
------------------------------------------------------------------------ ------------------------------------------------------------------------
Release: ReiLua version 0.6.0 Using Raylib 4.5 Release: ReiLua version 0.6.0 Using Raylib 4.5

View File

@@ -45,3 +45,11 @@ int ltextGetGlyphInfoValue( lua_State *L );
int ltextGetGlyphInfoOffset( lua_State *L ); int ltextGetGlyphInfoOffset( lua_State *L );
int ltextGetGlyphInfoAdvanceX( lua_State *L ); int ltextGetGlyphInfoAdvanceX( lua_State *L );
int ltextGetGlyphInfoImage( lua_State *L ); int ltextGetGlyphInfoImage( lua_State *L );
/* Text codepoints management functions (unicode characters). */
int ltextLoadUTF8( lua_State *L );
int ltextLoadCodepoints( lua_State *L );
int ltextGetCodepointCount( lua_State *L );
int ltextGetCodepoint( lua_State *L );
int ltextGetCodepointNext( lua_State *L );
int ltextGetCodepointPrevious( lua_State *L );
int ltextCodepointToUTF8( lua_State *L );

View File

@@ -1757,6 +1757,14 @@ void luaRegister() {
assingGlobalFunction( "GetGlyphInfoOffset", ltextGetGlyphInfoOffset ); assingGlobalFunction( "GetGlyphInfoOffset", ltextGetGlyphInfoOffset );
assingGlobalFunction( "GetGlyphInfoAdvanceX", ltextGetGlyphInfoAdvanceX ); assingGlobalFunction( "GetGlyphInfoAdvanceX", ltextGetGlyphInfoAdvanceX );
assingGlobalFunction( "GetGlyphInfoImage", ltextGetGlyphInfoImage ); assingGlobalFunction( "GetGlyphInfoImage", ltextGetGlyphInfoImage );
/* Text codepoints management functions (unicode characters). */
assingGlobalFunction( "LoadUTF8", ltextLoadUTF8 );
assingGlobalFunction( "LoadCodepoints", ltextLoadCodepoints );
assingGlobalFunction( "GetCodepointCount", ltextGetCodepointCount );
assingGlobalFunction( "GetCodepoint", ltextGetCodepoint );
assingGlobalFunction( "GetCodepointNext", ltextGetCodepointNext );
assingGlobalFunction( "GetCodepointPrevious", ltextGetCodepointPrevious );
assingGlobalFunction( "CodepointToUTF8", ltextCodepointToUTF8 );
/* Audio. */ /* Audio. */
/* Audio device management functions. */ /* Audio device management functions. */

View File

@@ -698,7 +698,7 @@ int ltextGetGlyphIndex( lua_State *L ) {
/* /*
> glyphInfo = RL.GetGlyphInfo( Font font, int codepoint ) > glyphInfo = RL.GetGlyphInfo( Font font, int codepoint )
Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found Get glyph font info data for a codepoint (unicode character), fallback to '?' if not found. Return as lightuserdata
- Success return GlyphInfo - Success return GlyphInfo
*/ */
@@ -707,7 +707,7 @@ int ltextGetGlyphInfo( lua_State *L ) {
int codepoint = luaL_checkinteger( L, 2 ); int codepoint = luaL_checkinteger( L, 2 );
int id = GetGlyphIndex( *font, codepoint ); int id = GetGlyphIndex( *font, codepoint );
uluaPushGlyphInfo( L, font->glyphs[id] ); lua_pushlightuserdata( L, &font->glyphs[id] );
return 1; return 1;
} }
@@ -715,7 +715,7 @@ int ltextGetGlyphInfo( lua_State *L ) {
/* /*
> glyphInfo = RL.GetGlyphInfoByIndex( Font font, int index ) > glyphInfo = RL.GetGlyphInfoByIndex( Font font, int index )
Get glyph font info data by index Get glyph font info data by index. Return as lightuserdata
- Failure return nil - Failure return nil
- Success return GlyphInfo - Success return GlyphInfo
@@ -725,7 +725,7 @@ int ltextGetGlyphInfoByIndex( lua_State *L ) {
int index = luaL_checkinteger( L, 2 ); int index = luaL_checkinteger( L, 2 );
if ( 0 <= index && index < font->glyphCount ) { if ( 0 <= index && index < font->glyphCount ) {
uluaPushGlyphInfo( L, font->glyphs[ index ] ); lua_pushlightuserdata( L, &font->glyphs[ index ] );
} }
else { else {
TraceLog( state->logLevelInvalid, "Glyph index %d out of bounds", index ); TraceLog( state->logLevelInvalid, "Glyph index %d out of bounds", index );
@@ -1005,3 +1005,131 @@ int ltextGetGlyphInfoImage( lua_State *L ) {
return 1; return 1;
} }
/*
## Text - Text codepoints management functions (unicode characters)
*/
/*
> string = RL.LoadUTF8( int{} codepoints )
Load UTF-8 text encoded from codepoints array
- Success return string
*/
int ltextLoadUTF8( lua_State *L ) {
int codepointCount = uluaGetTableLen( L, 1 );
int codepoints[ codepointCount ];
getCodepoints( L, codepoints, 1 );
char* string = LoadUTF8( codepoints, codepointCount );
lua_pushstring( L, string );
UnloadUTF8( string );
return 1;
}
/*
> codepoints = RL.LoadCodepoints( string text )
Load all codepoints from a UTF-8 text string
- Success return int{}
*/
int ltextLoadCodepoints( lua_State *L ) {
const char* text = luaL_checkstring( L, 1 );
int count = 0;
int* codepoints = LoadCodepoints( text, &count );
for ( int i = 0; i < count; i++ ) {
lua_pushinteger( L, codepoints[i] );
lua_rawseti( L, -2, i + 1 );
}
UnloadCodepoints( codepoints );
return 1;
}
/*
> count = RL.GetCodepointCount( string text )
Get total number of codepoints in a UTF-8 encoded string
- Success return int
*/
int ltextGetCodepointCount( lua_State *L ) {
const char* text = luaL_checkstring( L, 1 );
lua_pushinteger( L, GetCodepointCount( text ) );
return 1;
}
/*
> codepoint, codepointSize = RL.GetCodepoint( string text )
Get codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
- Success return int, int
*/
int ltextGetCodepoint( lua_State *L ) {
const char* text = luaL_checkstring( L, 1 );
int codepointSize = 0;
lua_pushinteger( L, GetCodepoint( text, &codepointSize ) );
lua_pushinteger( L, codepointSize );
return 2;
}
/*
> codepoint, codepointSize = RL.GetCodepointNext( string text )
Get next codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
- Success return int, int
*/
int ltextGetCodepointNext( lua_State *L ) {
const char* text = luaL_checkstring( L, 1 );
int codepointSize = 0;
lua_pushinteger( L, GetCodepointNext( text, &codepointSize ) );
lua_pushinteger( L, codepointSize );
return 2;
}
/*
> codepoint, codepointSize = RL.GetCodepointPrevious( string text )
Get previous codepoint in a UTF-8 encoded string, 0x3f('?') is returned on failure
- Success return int, int
*/
int ltextGetCodepointPrevious( lua_State *L ) {
const char* text = luaL_checkstring( L, 1 );
int codepointSize = 0;
lua_pushinteger( L, GetCodepointPrevious( text, &codepointSize ) );
lua_pushinteger( L, codepointSize );
return 2;
}
/*
> string, utf8Size = RL.CodepointToUTF8( int codepoint )
Encode one codepoint into UTF-8 byte array
- Success return string, int
*/
int ltextCodepointToUTF8( lua_State *L ) {
int codepoint = luaL_checkinteger( L, 1 );
int utf8Size = 0;
lua_pushstring( L, CodepointToUTF8( codepoint, &utf8Size ) );
lua_pushinteger( L, utf8Size );
return 2;
}