| Index: core/include/fxcrt/fx_bidi.h
|
| diff --git a/core/src/fxcrt/fx_arabic.h b/core/include/fxcrt/fx_bidi.h
|
| similarity index 21%
|
| rename from core/src/fxcrt/fx_arabic.h
|
| rename to core/include/fxcrt/fx_bidi.h
|
| index 0230d4057978168cb4940dbfe6d245b8529a3af5..a55ce6cfd2035db3ac08e3e1751c4b7d02c6d878 100644
|
| --- a/core/src/fxcrt/fx_arabic.h
|
| +++ b/core/include/fxcrt/fx_bidi.h
|
| @@ -4,30 +4,56 @@
|
|
|
| // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
|
|
|
| -#ifndef CORE_SRC_FXCRT_FX_ARABIC_H_
|
| -#define CORE_SRC_FXCRT_FX_ARABIC_H_
|
| +#ifndef CORE_INCLUDE_FXCRT_FX_BIDI_H_
|
| +#define CORE_INCLUDE_FXCRT_FX_BIDI_H_
|
|
|
| -#include "../../include/fxcrt/fx_arb.h"
|
| +#include "fx_system.h"
|
|
|
| -class CFX_BidiChar final : public IFX_BidiChar {
|
| +// Processes characters and group them into segments based on text direction.
|
| +class CFX_BidiChar {
|
| public:
|
| + enum Direction { NEUTRAL, LEFT, RIGHT };
|
| +
|
| CFX_BidiChar();
|
| - ~CFX_BidiChar() override {}
|
| + ~CFX_BidiChar();
|
| +
|
| + // Append a character and classify it as left, right, or neutral.
|
| + // Returns true if the character has a different direction than the
|
| + // existing direction to indicate there is a segment to process.
|
| + bool AppendChar(FX_WCHAR wch);
|
| +
|
| + // Call this after the last character has been appended. AppendChar()
|
| + // must not be called after this.
|
| + // Returns true if there is still a segment to process.
|
| + bool EndChar();
|
|
|
| - void SetPolicy(FX_BOOL bSeparateNeutral = TRUE) override;
|
| - FX_BOOL AppendChar(FX_WCHAR wch) override;
|
| - FX_BOOL EndChar() override;
|
| - int32_t GetBidiInfo(int32_t& iStart, int32_t& iCount) override;
|
| - void Reset() override;
|
| + // Get information about the segment to process.
|
| + // The segment's start position and character count is returned in |iStart|
|
| + // and |iCount|, respectively. Pass in null pointers if the information is
|
| + // not needed.
|
| + // Returns the segment direction.
|
| + Direction GetBidiInfo(int32_t* iStart, int32_t* iCount) const;
|
|
|
| private:
|
| - FX_BOOL m_bSeparateNeutral;
|
| + void SaveCurrentStateToLastState();
|
| +
|
| + // Position of the current segment.
|
| int32_t m_iCurStart;
|
| +
|
| + // Number of characters in the current segment.
|
| int32_t m_iCurCount;
|
| - int32_t m_iCurBidi;
|
| - int32_t m_iLastBidi;
|
| +
|
| + // Direction of the current segment.
|
| + Direction m_CurBidi;
|
| +
|
| + // Number of characters in the last segment.
|
| int32_t m_iLastStart;
|
| +
|
| + // Number of characters in the last segment.
|
| int32_t m_iLastCount;
|
| +
|
| + // Direction of the last segment.
|
| + Direction m_LastBidi;
|
| };
|
|
|
| -#endif // CORE_SRC_FXCRT_FX_ARABIC_H_
|
| +#endif // CORE_INCLUDE_FXCRT_FX_BIDI_H_
|
|
|