| Index: core/fxcrt/fx_arabic.cpp
|
| diff --git a/core/fxcrt/fx_arabic.cpp b/core/fxcrt/fx_arabic.cpp
|
| index 191350e24d55f579e8afb31882fbc301c485d5d8..01a1a2a15e327aab746ded35b498a9633f8f45b9 100644
|
| --- a/core/fxcrt/fx_arabic.cpp
|
| +++ b/core/fxcrt/fx_arabic.cpp
|
| @@ -114,6 +114,23 @@ const FX_ARASHADDA gs_FX_ShaddaTable[] = {
|
| {0x064F, 0xFC61}, {0x0650, 0xFC62},
|
| };
|
|
|
| +const FX_ARBFORMTABLE* ParseChar(const CFX_Char* pTC,
|
| + FX_WCHAR& wChar,
|
| + FX_CHARTYPE& eType) {
|
| + if (!pTC) {
|
| + eType = FX_CHARTYPE_Unknown;
|
| + wChar = 0xFEFF;
|
| + return nullptr;
|
| + }
|
| + eType = (FX_CHARTYPE)pTC->GetCharType();
|
| + wChar = (FX_WCHAR)pTC->m_wCharCode;
|
| + const FX_ARBFORMTABLE* pFT = FX_GetArabicFormTable(wChar);
|
| + if (!pFT || eType >= FX_CHARTYPE_ArabicNormal)
|
| + eType = FX_CHARTYPE_Unknown;
|
| +
|
| + return pFT;
|
| +}
|
| +
|
| } // namespace
|
|
|
| const FX_ARBFORMTABLE* FX_GetArabicFormTable(FX_WCHAR unicode) {
|
| @@ -145,26 +162,30 @@ FX_WCHAR FX_GetArabicFromShaddaTable(FX_WCHAR shadda) {
|
| return shadda;
|
| }
|
|
|
| -FX_BOOL CFX_ArabicChar::IsArabicChar(FX_WCHAR wch) const {
|
| +namespace pdfium {
|
| +namespace arabic {
|
| +
|
| +bool IsArabicChar(FX_WCHAR wch) {
|
| uint32_t dwRet =
|
| kTextLayoutCodeProperties[(uint16_t)wch] & FX_CHARTYPEBITSMASK;
|
| return dwRet >= FX_CHARTYPE_ArabicAlef;
|
| }
|
| -FX_BOOL CFX_ArabicChar::IsArabicFormChar(FX_WCHAR wch) const {
|
| +
|
| +bool IsArabicFormChar(FX_WCHAR wch) {
|
| return (kTextLayoutCodeProperties[(uint16_t)wch] & FX_CHARTYPEBITSMASK) ==
|
| FX_CHARTYPE_ArabicForm;
|
| }
|
| -FX_WCHAR CFX_ArabicChar::GetFormChar(FX_WCHAR wch,
|
| - FX_WCHAR prev,
|
| - FX_WCHAR next) const {
|
| +
|
| +FX_WCHAR GetFormChar(FX_WCHAR wch, FX_WCHAR prev, FX_WCHAR next) {
|
| CFX_Char c(wch, kTextLayoutCodeProperties[(uint16_t)wch]);
|
| CFX_Char p(prev, kTextLayoutCodeProperties[(uint16_t)prev]);
|
| CFX_Char n(next, kTextLayoutCodeProperties[(uint16_t)next]);
|
| return GetFormChar(&c, &p, &n);
|
| }
|
| -FX_WCHAR CFX_ArabicChar::GetFormChar(const CFX_Char* cur,
|
| - const CFX_Char* prev,
|
| - const CFX_Char* next) const {
|
| +
|
| +FX_WCHAR GetFormChar(const CFX_Char* cur,
|
| + const CFX_Char* prev,
|
| + const CFX_Char* next) {
|
| FX_CHARTYPE eCur;
|
| FX_WCHAR wCur;
|
| const FX_ARBFORMTABLE* ft = ParseChar(cur, wCur, eCur);
|
| @@ -184,37 +205,22 @@ FX_WCHAR CFX_ArabicChar::GetFormChar(const CFX_Char* cur,
|
| if (ePrev < FX_CHARTYPE_ArabicAlef) {
|
| if (bAlef) {
|
| return FX_GetArabicFromAlefTable(wNext);
|
| - } else {
|
| - return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
|
| - }
|
| - } else {
|
| - if (bAlef) {
|
| - wCur = FX_GetArabicFromAlefTable(wNext);
|
| - return (ePrev != FX_CHARTYPE_ArabicDistortion) ? wCur : ++wCur;
|
| - } else if (ePrev == FX_CHARTYPE_ArabicAlef ||
|
| - ePrev == FX_CHARTYPE_ArabicSpecial) {
|
| - return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
|
| - } else {
|
| - return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wFinal : ft->wMedial;
|
| }
|
| + return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
|
| }
|
| -}
|
| -const FX_ARBFORMTABLE* CFX_ArabicChar::ParseChar(const CFX_Char* pTC,
|
| - FX_WCHAR& wChar,
|
| - FX_CHARTYPE& eType) const {
|
| - if (pTC == NULL) {
|
| - eType = FX_CHARTYPE_Unknown;
|
| - wChar = 0xFEFF;
|
| - return NULL;
|
| + if (bAlef) {
|
| + wCur = FX_GetArabicFromAlefTable(wNext);
|
| + return (ePrev != FX_CHARTYPE_ArabicDistortion) ? wCur : ++wCur;
|
| }
|
| - eType = (FX_CHARTYPE)pTC->GetCharType();
|
| - wChar = (FX_WCHAR)pTC->m_wCharCode;
|
| - const FX_ARBFORMTABLE* pFT = FX_GetArabicFormTable(wChar);
|
| - if (pFT == NULL || eType >= FX_CHARTYPE_ArabicNormal) {
|
| - eType = FX_CHARTYPE_Unknown;
|
| + if (ePrev == FX_CHARTYPE_ArabicAlef || ePrev == FX_CHARTYPE_ArabicSpecial) {
|
| + return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wIsolated : ft->wInitial;
|
| }
|
| - return pFT;
|
| + return (eNext < FX_CHARTYPE_ArabicAlef) ? ft->wFinal : ft->wMedial;
|
| }
|
| +
|
| +} // namespace arabic
|
| +} // namespace pdfium
|
| +
|
| void FX_BidiReverseString(CFX_WideString& wsText,
|
| int32_t iStart,
|
| int32_t iCount) {
|
|
|