#include "FGrp_TextCommon.h"
#include "FGrp_TextTextComposite.h"
#include "FGrp_TextTextLine.h"
+#include "FGrp_TextTextUtility.h"
#include "FGrp_CoordinateSystemUtils.h"
#include <fribidi.h>
pEnum->GetCurrent(currentGap);
- FriBidiChar text[1] = { __pCompositeText->GetCharacter(__textOffset + textIndexFromLineOffset - 1) };
- FriBidiCharType type[1] = { 0 };
- fribidi_get_bidi_types(text, 1, type);
- bool isRtl = (type[0] & FRIBIDI_MASK_RTL) > 0;
+ TextBidiHint bidiHint = _GetTextBidiHint();
+ wchar_t ch = __pCompositeText->GetCharacter(__textOffset + textIndexFromLineOffset - 1);
+ bool isRtl = TextUtility::IsRTLCharacter(ch);
+ bool isLtr = TextUtility::IsLTRCharacter(ch);
+ bool isNeutral = TextUtility::IsNeutralCharacter(ch);
+
+ bool isBidiEnabled = (bidiHint == TEXT_BIDI_HINT_RTL) ? true : false;
+ SysLogException(NID_GRP, E_SUCCESS, "[000] isRtl(%d) isLtr(%d) isNeutral(%d) isBidiEnabled(%d)", isRtl, isLtr, isNeutral, isBidiEnabled);
+
+ isRtl = (!isRtl && !isLtr && isNeutral) ? isBidiEnabled : isRtl;
+
+ SysLogException(NID_GRP, E_SUCCESS, "[111] isRtl(%d) isLtr(%d)", isRtl, isLtr);
extent.x = (isRtl == true) ? currentGap.first : currentGap.second;
extent.width = 0;
return false;
}
+bool
+TextUtility::IsNeutralCharacter(wchar_t ch)
+{
+ FriBidiChar text[1] = { ch };
+ FriBidiCharType type[1] = { 0 };
+ fribidi_get_bidi_types(text, 1, type);
+
+ if (type[0] & (FRIBIDI_MASK_NEUTRAL | FRIBIDI_MASK_LETTER))
+ {
+ return true;
+ }
+
+ return false;
+}
+
float
TextUtility::Abs(const float t)
{