NormBuffer__GetLastChar

INT64 __fastcall NormBuffer__GetLastChar(INT64 a1){
  INT64 v1; 
  unsigned __int16 *v2; 
  unsigned int v3; 
  INT64 v4; 
  CHAR v5; 
  CHAR v6; 
  INT64 v7; 
  CHAR v8; 
  char v9; 
  char v10; 
  v1 = a1;
  v2 = (unsigned __int16 *)(*(_QWORD *)(a1 + 40) - 2i64);
  if( *(unsigned __int16 **)(v1 + 64) != v2 )
  {
    v3 = *v2;
    *(_QWORD *)(v1 + 64) = v2;
    v4 = v3;
    *(_DWORD *)(v1 + 56) = v3;
    if( v3 > 0xDC00 && v3 <= 0xDFFF )
    {
      v4 = v3 + ((*(v2 - 1) - 55287) << 10);
      *(_DWORD *)(v1 + 56) = v4;
    }
    v5 = Normalization__PageLookup(*(_QWORD *)(v1 + 112), v4);
    if( (unsigned __int8)(v5 - 1) > 0xF9u )
    {
      v9 = 0;
      v10 = 0;
    }
    else
    {
      v8 = Normalization__TableLookup(v7, v6, v5);
      v9 = v8 & 0xC0;
      v10 = v8 & 0x3F;
    }
    *(_BYTE *)(v1 + 72) = v10;
    *(_BYTE *)(v1 + 73) = v9;
  }
  return *(unsigned int *)(v1 + 56);
}

Referenced by:

Normalization__NormalizeCharacter