diff options
Diffstat (limited to 'core/include/fxcrt/fx_bidi.h')
-rw-r--r-- | core/include/fxcrt/fx_bidi.h | 73 |
1 files changed, 0 insertions, 73 deletions
diff --git a/core/include/fxcrt/fx_bidi.h b/core/include/fxcrt/fx_bidi.h deleted file mode 100644 index 4ea17dae86..0000000000 --- a/core/include/fxcrt/fx_bidi.h +++ /dev/null @@ -1,73 +0,0 @@ -// 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 <memory> -#include <vector> - -#include "core/include/fxcrt/fx_string.h" -#include "core/include/fxcrt/fx_system.h" - -// Processes characters and group them into segments based on text direction. -class CFX_BidiChar { - public: - enum Direction { NEUTRAL, LEFT, RIGHT }; - struct Segment { - int32_t start; // Start position. - int32_t count; // Character count. - Direction direction; // Segment direction. - }; - - 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(); - - // Call after a change in direction is indicated by the above to get - // information about the segment to process. - Segment GetSegmentInfo() const { return m_LastSegment; } - - private: - void StartNewSegment(CFX_BidiChar::Direction direction); - - Segment m_CurrentSegment; - Segment m_LastSegment; -}; - -class CFX_BidiString { - public: - using const_iterator = std::vector<CFX_BidiChar::Segment>::const_iterator; - explicit CFX_BidiString(const CFX_WideString& str); - - // Overall direction is always LEFT or RIGHT, never NEUTRAL. - CFX_BidiChar::Direction OverallDirection() const { - return m_eOverallDirection; - } - - // Force the overall direction to be R2L regardless of what was detected. - void SetOverallDirectionRight(); - - FX_WCHAR CharAt(size_t x) const { return m_Str[x]; } - const_iterator begin() const { return m_Order.begin(); } - const_iterator end() const { return m_Order.end(); } - - private: - const CFX_WideString m_Str; - std::unique_ptr<CFX_BidiChar> m_pBidiChar; - std::vector<CFX_BidiChar::Segment> m_Order; - CFX_BidiChar::Direction m_eOverallDirection; -}; - -#endif // CORE_INCLUDE_FXCRT_FX_BIDI_H_ |