diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-05-04 22:42:31 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-05-04 22:42:31 +0200 |
commit | 3b28e26d02106c31e3e2a03098ca24ea3f7e9f5d (patch) | |
tree | 2ef4b78c728a2e1a323babc75205b19911a5ffc0 /layout/base/nsBidi.cpp | |
parent | 175efcbab02bbfea84e565cdea9ee96d6436a08f (diff) | |
parent | 2860601772b392f3f6d2977269f11061f4e970ee (diff) | |
download | UXP-3b28e26d02106c31e3e2a03098ca24ea3f7e9f5d.tar UXP-3b28e26d02106c31e3e2a03098ca24ea3f7e9f5d.tar.gz UXP-3b28e26d02106c31e3e2a03098ca24ea3f7e9f5d.tar.lz UXP-3b28e26d02106c31e3e2a03098ca24ea3f7e9f5d.tar.xz UXP-3b28e26d02106c31e3e2a03098ca24ea3f7e9f5d.zip |
Merge branch 'intl-ICU-emoji-work'
Diffstat (limited to 'layout/base/nsBidi.cpp')
-rw-r--r-- | layout/base/nsBidi.cpp | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/layout/base/nsBidi.cpp b/layout/base/nsBidi.cpp new file mode 100644 index 000000000..1d6975869 --- /dev/null +++ b/layout/base/nsBidi.cpp @@ -0,0 +1,68 @@ +/* -*- Mode: C; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * + * 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 "nsBidi.h" +#include "ICUUtils.h" + +nsBidi::nsBidi() +{ + mBiDi = ubidi_open(); +} + +nsBidi::~nsBidi() +{ + ubidi_close(mBiDi); +} + +nsresult nsBidi::SetPara(const char16_t *aText, int32_t aLength, + nsBidiLevel aParaLevel) +{ + UErrorCode error = U_ZERO_ERROR; + ubidi_setPara(mBiDi, reinterpret_cast<const UChar*>(aText), aLength, + aParaLevel, nullptr, &error); + return ICUUtils::UErrorToNsResult(error); +} + +nsresult nsBidi::GetDirection(nsBidiDirection* aDirection) +{ + *aDirection = nsBidiDirection(ubidi_getDirection(mBiDi)); + return NS_OK; +} + +nsresult nsBidi::GetParaLevel(nsBidiLevel* aParaLevel) +{ + *aParaLevel = ubidi_getParaLevel(mBiDi); + return NS_OK; +} + +nsresult nsBidi::GetLogicalRun(int32_t aLogicalStart, int32_t* aLogicalLimit, + nsBidiLevel* aLevel) +{ + ubidi_getLogicalRun(mBiDi, aLogicalStart, aLogicalLimit, aLevel); + return NS_OK; +} + +nsresult nsBidi::CountRuns(int32_t* aRunCount) +{ + UErrorCode errorCode = U_ZERO_ERROR; + *aRunCount = ubidi_countRuns(mBiDi, &errorCode); + return ICUUtils::UErrorToNsResult(errorCode); +} + +nsresult nsBidi::GetVisualRun(int32_t aRunIndex, int32_t* aLogicalStart, + int32_t* aLength, nsBidiDirection* aDirection) +{ + *aDirection = nsBidiDirection(ubidi_getVisualRun(mBiDi, aRunIndex, + aLogicalStart, aLength)); + return NS_OK; +} + +nsresult nsBidi::ReorderVisual(const nsBidiLevel* aLevels, int32_t aLength, + int32_t* aIndexMap) +{ + ubidi_reorderVisual(aLevels, aLength, aIndexMap); + return NS_OK; +} |