From fc51998e35d540af2575a102d4ec2e122b4fd928 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sun, 14 Dec 2025 08:20:35 +0000 Subject: [PATCH] Update kb_text_shape to v2.05 --- vendor/kb_text_shape/lib/kb_text_shape.lib | Bin 852874 -> 853396 bytes vendor/kb_text_shape/src/kb_text_shape.h | 38 +++++++++++++++++---- 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/vendor/kb_text_shape/lib/kb_text_shape.lib b/vendor/kb_text_shape/lib/kb_text_shape.lib index 000ae09b2f50c6e9b3745a77f0026c67263de59f..6a48e9f876c93957ded931e040cca4e14003a531 100644 GIT binary patch delta 14527 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 2) && - (Second->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) && - kbts__WouldSubstitute(Scratchpad, Config, Storage, LookupList, Frames, Rphf, 0, FirstGlyphs[0], 2)) + (Second->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT)) { - OnePastRephIndex = 2; + kbts_glyph Scratch[2]; + Scratch[0] = *FirstGlyphs[0]; + Scratch[1] = *FirstGlyphs[1]; + + if(kbts__WouldSubstitute(Scratchpad, Config, Storage, LookupList, Frames, Rphf, 0, Scratch, 2)) + { + OnePastRephIndex = 2; + } } break; case KBTS__REPH_ENCODING_EXPLICIT: if((ScanGlyphIndex >= 3) && (Second->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_HALANT) && - (Third->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ) && - kbts__WouldSubstitute(Scratchpad, Config, Storage, LookupList, Frames, Rphf, 0, FirstGlyphs[0], 3)) + (Third->SyllabicClass == KBTS_INDIC_SYLLABIC_CLASS_ZWJ)) { - OnePastRephIndex = 3; + kbts_glyph Scratch[3]; + Scratch[0] = *FirstGlyphs[0]; + Scratch[1] = *FirstGlyphs[1]; + Scratch[2] = *FirstGlyphs[2]; + + if(kbts__WouldSubstitute(Scratchpad, Config, Storage, LookupList, Frames, Rphf, 0, Scratch, 3)) + { + OnePastRephIndex = 3; + } } break; } @@ -24068,6 +24084,7 @@ static void kbts__EndCluster(kbts__shape_scratchpad *Scratchpad, kbts_shape_conf kbts_glyph *First = Storage->GlyphSentinel.Next; kbts_glyph *Second = First->Next; if((First->SyllabicPosition == KBTS__SYLLABIC_POSITION_RA_TO_BECOME_REPH) && + kbts__GlyphIsValid(Storage, Second) && (Second->SyllabicPosition != KBTS__SYLLABIC_POSITION_RA_TO_BECOME_REPH)) { kbts__reph_position RephPosition = Config->IndicScriptProperties.RephPosition; @@ -25005,6 +25022,9 @@ KBTS_EXPORT kbts_shape_context *kbts_PlaceShapeContext(kbts_allocator_function * KBTS_MEMSET(Result, 0, sizeof(*Result)); + Result->PermanentArena.Allocator = Allocator; + Result->PermanentArena.AllocatorData = AllocatorData; + Result->FontArena.Allocator = Allocator; Result->FontArena.AllocatorData = AllocatorData; @@ -25014,6 +25034,9 @@ KBTS_EXPORT kbts_shape_context *kbts_PlaceShapeContext(kbts_allocator_function * Result->ScratchArena.Allocator = Allocator; Result->ScratchArena.AllocatorData = AllocatorData; + Result->GlyphStorage.Arena.Allocator = Allocator; + Result->GlyphStorage.Arena.AllocatorData = AllocatorData; + KBTS__DLLIST_SENTINEL_INIT(&Result->FeatureOverrideSentinel); KBTS__DLLIST_SENTINEL_INIT(&Result->FreeFeatureOverrideSentinel); } @@ -25055,6 +25078,7 @@ KBTS_EXPORT void kbts_DestroyShapeContext(kbts_shape_context *Context) { if(Context) { + kbts__FreeArena(&Context->PermanentArena); kbts__FreeArena(&Context->ConfigArena); kbts__FreeArena(&Context->ScratchArena); kbts__FreeArena(&Context->FontArena);