| Index: core/include/fxcrt/fx_bidi.h
 | 
| diff --git a/core/include/fxcrt/fx_bidi.h b/core/include/fxcrt/fx_bidi.h
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..a55ce6cfd2035db3ac08e3e1751c4b7d02c6d878
 | 
| --- /dev/null
 | 
| +++ b/core/include/fxcrt/fx_bidi.h
 | 
| @@ -0,0 +1,59 @@
 | 
| +// 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_BIDI_H_
 | 
| +#define CORE_INCLUDE_FXCRT_FX_BIDI_H_
 | 
| +
 | 
| +#include "fx_system.h"
 | 
| +
 | 
| +// Processes characters and group them into segments based on text direction.
 | 
| +class CFX_BidiChar {
 | 
| + public:
 | 
| +  enum Direction { NEUTRAL, LEFT, RIGHT };
 | 
| +
 | 
| +  CFX_BidiChar();
 | 
| +  ~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();
 | 
| +
 | 
| +  // 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:
 | 
| +  void SaveCurrentStateToLastState();
 | 
| +
 | 
| +  // Position of the current segment.
 | 
| +  int32_t m_iCurStart;
 | 
| +
 | 
| +  // Number of characters in the current segment.
 | 
| +  int32_t m_iCurCount;
 | 
| +
 | 
| +  // 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_INCLUDE_FXCRT_FX_BIDI_H_
 | 
| 
 |