summaryrefslogtreecommitdiff
path: root/core/include/fxcrt/fx_bidi.h
diff options
context:
space:
mode:
authorLei Zhang <thestig@chromium.org>2015-08-17 18:00:48 -0700
committerLei Zhang <thestig@chromium.org>2015-08-17 18:00:48 -0700
commit2ae87d2e8ddff79d0e96aad3db97e090db21fb99 (patch)
tree9bbae4e8d6b554a4b4b12fe0cfc5a8a5b54e43b7 /core/include/fxcrt/fx_bidi.h
parent1d9dbd53b205b2b4d9e75a7eeb95e80837917ea3 (diff)
downloadpdfium-2ae87d2e8ddff79d0e96aad3db97e090db21fb99.tar.xz
Clean up IFX_BidiChar
- Replace IFX_BidiChar with just CFX_BidiChar - Document implementation - Change out parameters to pointers - Remove dead code - Add an enum for bidi directions - Move several externs to a header - Add unit tests R=tsepez@chromium.org Review URL: https://codereview.chromium.org/1197643002 .
Diffstat (limited to 'core/include/fxcrt/fx_bidi.h')
-rw-r--r--core/include/fxcrt/fx_bidi.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/core/include/fxcrt/fx_bidi.h b/core/include/fxcrt/fx_bidi.h
new file mode 100644
index 0000000000..a55ce6cfd2
--- /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_