diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-05-04 20:36:02 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-05-04 20:36:02 +0200 |
commit | c18d9955df45be20537cc221dabebdae7d4fe744 (patch) | |
tree | ad79013fea86053d96fb6f396ba09e005660b74c /layout/base/nsBidi.cpp | |
parent | 550f4095be21755d7c09f48ed9fef4e1d67cec60 (diff) | |
download | UXP-c18d9955df45be20537cc221dabebdae7d4fe744.tar UXP-c18d9955df45be20537cc221dabebdae7d4fe744.tar.gz UXP-c18d9955df45be20537cc221dabebdae7d4fe744.tar.lz UXP-c18d9955df45be20537cc221dabebdae7d4fe744.tar.xz UXP-c18d9955df45be20537cc221dabebdae7d4fe744.zip |
Issue #325 Part 13: Remove Mozilla implementation of the bidi engine completely and use ICU.
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; +} |