// Copyright 2014 PDFium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com #ifndef CORE_INCLUDE_FXCRT_FX_ARB_H_ #define CORE_INCLUDE_FXCRT_FX_ARB_H_ #include "core/include/fxcrt/fx_system.h" #include "core/include/fxcrt/fx_ucd.h" class IFX_ArabicChar; struct FX_ARBFORMTABLE { FX_WCHAR wIsolated; FX_WCHAR wFinal; FX_WCHAR wInitial; FX_WCHAR wMedial; }; struct FX_ARAALEF { FX_WCHAR wAlef; FX_WCHAR wIsolated; }; struct FX_ARASHADDA { FX_WCHAR wShadda; FX_WCHAR wIsolated; }; const FX_ARBFORMTABLE* FX_GetArabicFormTable(FX_WCHAR unicode); FX_WCHAR FX_GetArabicFromAlefTable(FX_WCHAR alef); FX_WCHAR FX_GetArabicFromShaddaTable(FX_WCHAR shadda); enum FX_ARBPOSITION { FX_ARBPOSITION_Isolated = 0, FX_ARBPOSITION_Final, FX_ARBPOSITION_Initial, FX_ARBPOSITION_Medial, }; class IFX_ArabicChar { public: static IFX_ArabicChar* Create(); virtual ~IFX_ArabicChar() {} virtual void Release() = 0; virtual FX_BOOL IsArabicChar(FX_WCHAR wch) const = 0; virtual FX_BOOL IsArabicFormChar(FX_WCHAR wch) const = 0; virtual FX_WCHAR GetFormChar(FX_WCHAR wch, FX_WCHAR prev = 0, FX_WCHAR next = 0) const = 0; virtual FX_WCHAR GetFormChar(const CFX_Char* cur, const CFX_Char* prev, const CFX_Char* next) const = 0; }; void FX_BidiLine(CFX_WideString& wsText, int32_t iBaseLevel = 0); void FX_BidiLine(CFX_TxtCharArray& chars, int32_t iCount, int32_t iBaseLevel = 0); void FX_BidiLine(CFX_RTFCharArray& chars, int32_t iCount, int32_t iBaseLevel = 0); #endif // CORE_INCLUDE_FXCRT_FX_ARB_H_