summaryrefslogtreecommitdiffstats
path: root/intl/components/src/BidiEmbeddingLevel.cpp
blob: d3ef5da9371a94bc40395f5478bcd27c7d8652d4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#include "mozilla/intl/BidiEmbeddingLevel.h"
#include "mozilla/Casting.h"
#include "mozilla/intl/ICU4CGlue.h"

#include "unicode/ubidi.h"

namespace mozilla::intl {

bool BidiEmbeddingLevel::IsDefaultLTR() const {
  return mValue == UBIDI_DEFAULT_LTR;
};

bool BidiEmbeddingLevel::IsDefaultRTL() const {
  return mValue == UBIDI_DEFAULT_RTL;
};

bool BidiEmbeddingLevel::IsRTL() const {
  // If the least significant bit is 1, then the embedding level
  // is right-to-left.
  // If the least significant bit is 0, then the embedding level
  // is left-to-right.
  return (mValue & 0x1) == 1;
};

bool BidiEmbeddingLevel::IsLTR() const { return !IsRTL(); };

bool BidiEmbeddingLevel::IsSameDirection(BidiEmbeddingLevel aOther) const {
  return (((mValue ^ aOther) & 1) == 0);
}

BidiEmbeddingLevel BidiEmbeddingLevel::LTR() { return BidiEmbeddingLevel(0); };

BidiEmbeddingLevel BidiEmbeddingLevel::RTL() { return BidiEmbeddingLevel(1); };

BidiEmbeddingLevel BidiEmbeddingLevel::DefaultLTR() {
  return BidiEmbeddingLevel(UBIDI_DEFAULT_LTR);
};

BidiEmbeddingLevel BidiEmbeddingLevel::DefaultRTL() {
  return BidiEmbeddingLevel(UBIDI_DEFAULT_RTL);
};

BidiDirection BidiEmbeddingLevel::Direction() {
  return IsRTL() ? BidiDirection::RTL : BidiDirection::LTR;
};

uint8_t BidiEmbeddingLevel::Value() const { return mValue; }

}  // namespace mozilla::intl