NormBuffer__RecheckStartCombinations
VOID __fastcall NormBuffer__RecheckStartCombinations(INT64 a1){
bool v1;
INT64 v2;
__int64 v3;
__int64 v4;
char v5;
__int64 v6;
unsigned int CurrentOutputChar;
int CanCombinableCharactersCombine;
int v9;
char v10;
unsigned __int64 v11;
_WORD *v12;
unsigned __int64 v13;
unsigned __int64 v14;
__int64 v15;
char v16;
char v17;
__int64 v18;
v1 = *(_BYTE *)(a1 + 93) == 64;
v2 = a1;
v3 = *(_QWORD *)(a1 + 80);
v18 = v3;
if( v1 )
{
v4 = *(_QWORD *)(a1 + 40);
v5 = 0;
if( v3 != v4 )
{
v6 = *(_QWORD *)(a1 + 112);
while( 1 )
{
v16 = 0;
v17 = 0;
CurrentOutputChar = NormBuffer__GetCurrentOutputChar((WCHAR **)a1);
Normalization__GetCharacterInfo(v6, CurrentOutputChar, &v16, &v17);
if( v16 == v5 )
goto LABEL_17;
if( v17 != -64 )
break;
CanCombinableCharactersCombine = Normalization__CanCombinableCharactersCombine(
v6,
*(unsigned int *)(v2 + 88),
CurrentOutputChar);
v9 = CanCombinableCharactersCombine;
if( !CanCombinableCharactersCombine )
break;
Normalization__GetCharacterInfo(v6, CanCombinableCharactersCombine, &v16, &v17);
v10 = v17;
v4 = *(_QWORD *)(v2 + 40) - 2i64;
v11 = v18;
*(_BYTE *)(v2 + 92) = v16;
v12 = (_WORD *)v11;
v13 = *(_QWORD *)(v2 + 64);
*(_WORD *)(v3 - 2) = v9;
*(_DWORD *)(v2 + 88) = v9;
*(_BYTE *)(v2 + 93) = v10;
*(_QWORD *)(v2 + 40) = v4;
if( v13 == v4 )
{
if( v11 >= v13 )
{
v15 = *(_QWORD *)(v2 + 24);
*(_DWORD *)(v2 + 56) = 0;
v14 = v15 - 2;
*(_WORD *)(v2 + 72) = 0;
}
else
{
v14 = v13 - 2;
}
*(_QWORD *)(v2 + 64) = v14;
}
if( v11 != v4 )
{
do
{
a1 = (INT64)(v12 + 1);
*v12 = v12[1];
v12 = (_WORD *)a1;
}
while( a1 != v4 );
}
if( v10 != 64 )
return;
LABEL_18:
if( v11 == v4 )
return;
}
v5 = v16;
LABEL_17:
v11 = v18 + 2;
v18 += 2i64;
goto LABEL_18;
}
}
}Referenced by:
Normalization__NormalizeCharacter