Loading dom/base/Selection.cpp +13 −13 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ */ #include "mozilla/dom/Selection.h" #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/AccessibleCaretEventHub.h" #include "mozilla/AsyncEventDispatcher.h" Loading Loading @@ -386,8 +386,8 @@ Nullable<int16_t> Selection::GetCaretBidiLevel( aRv.Throw(NS_ERROR_NOT_INITIALIZED); return Nullable<int16_t>(); } mozilla::intl::Bidi::EmbeddingLevel caretBidiLevel = static_cast<mozilla::intl::Bidi::EmbeddingLevel>( mozilla::intl::BidiEmbeddingLevel caretBidiLevel = static_cast<mozilla::intl::BidiEmbeddingLevel>( mFrameSelection->GetCaretBidiLevel()); return (caretBidiLevel & BIDI_LEVEL_UNDEFINED) ? Nullable<int16_t>() Loading @@ -406,7 +406,7 @@ void Selection::SetCaretBidiLevel(const Nullable<int16_t>& aCaretBidiLevel, mFrameSelection->UndefineCaretBidiLevel(); } else { mFrameSelection->SetCaretBidiLevelAndMaybeSchedulePaint( mozilla::intl::Bidi::EmbeddingLevel(aCaretBidiLevel.Value())); mozilla::intl::BidiEmbeddingLevel(aCaretBidiLevel.Value())); } } Loading Loading @@ -1360,7 +1360,7 @@ nsIFrame* Selection::GetPrimaryOrCaretFrameForNodeOffset(nsIContent* aContent, CaretAssociationHint hint = mFrameSelection->GetHint(); if (aVisual) { mozilla::intl::Bidi::EmbeddingLevel caretBidiLevel = mozilla::intl::BidiEmbeddingLevel caretBidiLevel = mFrameSelection->GetCaretBidiLevel(); return nsCaret::GetCaretFrameForNodeOffset( Loading Loading @@ -3302,10 +3302,10 @@ void Selection::Modify(const nsAString& aAlter, const nsAString& aDirection, // If the paragraph direction of the focused frame is right-to-left, // we may have to swap the direction of movement. if (nsIFrame* frame = GetPrimaryFrameForFocusNode(visual)) { mozilla::intl::Bidi::Direction paraDir = mozilla::intl::BidiDirection paraDir = nsBidiPresUtils::ParagraphDirection(frame); if (paraDir == mozilla::intl::Bidi::Direction::RTL && visual) { if (paraDir == mozilla::intl::BidiDirection::RTL && visual) { if (amount == eSelectBeginLine) { amount = eSelectEndLine; forward = !forward; Loading Loading @@ -3479,9 +3479,9 @@ nsresult Selection::SelectionLanguageChange(bool aLangRTL) { RefPtr<nsFrameSelection> frameSelection = mFrameSelection; // if the direction of the language hasn't changed, nothing to do mozilla::intl::Bidi::EmbeddingLevel kbdBidiLevel = aLangRTL ? mozilla::intl::Bidi::EmbeddingLevel::RTL() : mozilla::intl::Bidi::EmbeddingLevel::LTR(); mozilla::intl::BidiEmbeddingLevel kbdBidiLevel = aLangRTL ? mozilla::intl::BidiEmbeddingLevel::RTL() : mozilla::intl::BidiEmbeddingLevel::LTR(); if (kbdBidiLevel == frameSelection->mKbdBidiLevel) { return NS_OK; } Loading @@ -3495,12 +3495,12 @@ nsresult Selection::SelectionLanguageChange(bool aLangRTL) { auto [frameStart, frameEnd] = focusFrame->GetOffsets(); RefPtr<nsPresContext> context = GetPresContext(); mozilla::intl::Bidi::EmbeddingLevel levelBefore, levelAfter; mozilla::intl::BidiEmbeddingLevel levelBefore, levelAfter; if (!context) { return NS_ERROR_FAILURE; } mozilla::intl::Bidi::EmbeddingLevel level = focusFrame->GetEmbeddingLevel(); mozilla::intl::BidiEmbeddingLevel level = focusFrame->GetEmbeddingLevel(); int32_t focusOffset = static_cast<int32_t>(FocusOffset()); if ((focusOffset != frameStart) && (focusOffset != frameEnd)) // the cursor is not at a frame boundary, so the level of both the Loading Loading @@ -3531,7 +3531,7 @@ nsresult Selection::SelectionLanguageChange(bool aLangRTL) { frameSelection->SetCaretBidiLevelAndMaybeSchedulePaint(level); } else { frameSelection->SetCaretBidiLevelAndMaybeSchedulePaint( mozilla::intl::Bidi::EmbeddingLevel(level + 1)); mozilla::intl::BidiEmbeddingLevel(level + 1)); } } else { // if cursor is between characters with opposite orientations, changing the Loading dom/canvas/CanvasRenderingContext2D.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ #include "nsContentUtils.h" #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/PresShell.h" #include "mozilla/PresShellInlines.h" #include "mozilla/SVGImageContext.h" Loading Loading @@ -3523,11 +3523,11 @@ struct MOZ_STACK_CLASS CanvasBidiProcessor using ContextState = CanvasRenderingContext2D::ContextState; virtual void SetText(const char16_t* aText, int32_t aLength, mozilla::intl::Bidi::Direction aDirection) override { mozilla::intl::BidiDirection aDirection) override { mFontgrp->UpdateUserFonts(); // ensure user font generation is current // adjust flags for current direction run gfx::ShapedTextFlags flags = mTextRunFlags; if (aDirection == mozilla::intl::Bidi::Direction::RTL) { if (aDirection == mozilla::intl::BidiDirection::RTL) { flags |= gfx::ShapedTextFlags::TEXT_IS_RTL; } else { flags &= ~gfx::ShapedTextFlags::TEXT_IS_RTL; Loading Loading @@ -3894,8 +3894,8 @@ TextMetrics* CanvasRenderingContext2D::DrawOrMeasureText( // bounding boxes before rendering anything aError = nsBidiPresUtils::ProcessText( textToDraw.get(), textToDraw.Length(), isRTL ? mozilla::intl::Bidi::EmbeddingLevel::RTL() : mozilla::intl::Bidi::EmbeddingLevel::LTR(), isRTL ? mozilla::intl::BidiEmbeddingLevel::RTL() : mozilla::intl::BidiEmbeddingLevel::LTR(), presShell->GetPresContext(), processor, nsBidiPresUtils::MODE_MEASURE, nullptr, 0, &totalWidthCoord, &mBidiEngine); if (aError.Failed()) { Loading Loading @@ -4037,8 +4037,8 @@ TextMetrics* CanvasRenderingContext2D::DrawOrMeasureText( aError = nsBidiPresUtils::ProcessText( textToDraw.get(), textToDraw.Length(), isRTL ? mozilla::intl::Bidi::EmbeddingLevel::RTL() : mozilla::intl::Bidi::EmbeddingLevel::LTR(), isRTL ? mozilla::intl::BidiEmbeddingLevel::RTL() : mozilla::intl::BidiEmbeddingLevel::LTR(), presShell->GetPresContext(), processor, nsBidiPresUtils::MODE_DRAW, nullptr, 0, nullptr, &mBidiEngine); Loading editor/libeditor/EditorBase.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ #include "JoinNodeTransaction.h" // for JoinNodeTransaction #include "PlaceholderTransaction.h" // for PlaceholderTransaction #include "SplitNodeTransaction.h" // for SplitNodeTransaction #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/BasePrincipal.h" // for BasePrincipal #include "mozilla/CheckedInt.h" // for CheckedInt #include "mozilla/ComposerCommandsUpdater.h" // for ComposerCommandsUpdater Loading Loading @@ -5763,13 +5763,13 @@ EditorBase::AutoCaretBidiLevelManager::AutoCaretBidiLevelManager( nsPrevNextBidiLevels levels = frameSelection->GetPrevNextBidiLevels( aPointAtCaret.GetContainerAsContent(), aPointAtCaret.Offset(), true); mozilla::intl::Bidi::EmbeddingLevel levelBefore = levels.mLevelBefore; mozilla::intl::Bidi::EmbeddingLevel levelAfter = levels.mLevelAfter; mozilla::intl::BidiEmbeddingLevel levelBefore = levels.mLevelBefore; mozilla::intl::BidiEmbeddingLevel levelAfter = levels.mLevelAfter; mozilla::intl::Bidi::EmbeddingLevel currentCaretLevel = mozilla::intl::BidiEmbeddingLevel currentCaretLevel = frameSelection->GetCaretBidiLevel(); mozilla::intl::Bidi::EmbeddingLevel levelOfDeletion; mozilla::intl::BidiEmbeddingLevel levelOfDeletion; levelOfDeletion = (nsIEditor::eNext == aDirectionAndAmount || nsIEditor::eNextWord == aDirectionAndAmount) ? levelAfter Loading editor/libeditor/EditorBase.h +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ #ifndef mozilla_EditorBase_h #define mozilla_EditorBase_h #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/Assertions.h" // for MOZ_ASSERT, etc. #include "mozilla/EditAction.h" // for EditAction and EditSubAction #include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint Loading Loading @@ -1982,7 +1982,7 @@ class EditorBase : public nsIEditor, void MaybeUpdateCaretBidiLevel(const EditorBase& aEditorBase) const; private: Maybe<mozilla::intl::Bidi::EmbeddingLevel> mNewCaretBidiLevel; Maybe<mozilla::intl::BidiEmbeddingLevel> mNewCaretBidiLevel; bool mFailed = false; bool mCanceled = false; }; Loading intl/components/gtest/TestBidi.cpp +23 −23 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ namespace mozilla::intl { struct VisualRun { Span<const char16_t> string; Bidi::Direction direction; BidiDirection direction; }; /** Loading @@ -19,7 +19,7 @@ struct VisualRun { class MOZ_STACK_CLASS VisualRunIter { public: VisualRunIter(Bidi& aBidi, Span<const char16_t> aParagraph, Bidi::EmbeddingLevel aLevel) BidiEmbeddingLevel aLevel) : mBidi(aBidi), mParagraph(aParagraph) { // Crash in case of errors by calling unwrap. If this were a real API, this // would be a TryCreate call. Loading @@ -35,7 +35,7 @@ class MOZ_STACK_CLASS VisualRunIter { int32_t stringIndex = -1; int32_t stringLength = -1; Bidi::Direction direction = BidiDirection direction = mBidi.GetVisualRun(mRunIndex, &stringIndex, &stringLength); Span<const char16_t> string(mParagraph.Elements() + stringIndex, Loading @@ -53,7 +53,7 @@ class MOZ_STACK_CLASS VisualRunIter { struct LogicalRun { Span<const char16_t> string; Bidi::EmbeddingLevel embeddingLevel; BidiEmbeddingLevel embeddingLevel; }; /** Loading @@ -63,7 +63,7 @@ struct LogicalRun { class MOZ_STACK_CLASS LogicalRunIter { public: LogicalRunIter(Bidi& aBidi, Span<const char16_t> aParagraph, Bidi::EmbeddingLevel aLevel) BidiEmbeddingLevel aLevel) : mBidi(aBidi), mParagraph(aParagraph) { // Crash in case of errors by calling unwrap. If this were a real API, this // would be a TryCreate call. Loading @@ -78,7 +78,7 @@ class MOZ_STACK_CLASS LogicalRunIter { int32_t logicalLimit; Bidi::EmbeddingLevel embeddingLevel; BidiEmbeddingLevel embeddingLevel; mBidi.GetLogicalRun(mRunIndex, &logicalLimit, &embeddingLevel); Span<const char16_t> string(mParagraph.Elements() + mRunIndex, Loading @@ -98,7 +98,7 @@ TEST(IntlBidi, SimpleLTR) { Bidi bidi{}; LogicalRunIter logicalRunIter(bidi, MakeStringSpan(u"this is a paragraph"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 0); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::LTR); Loading @@ -107,7 +107,7 @@ TEST(IntlBidi, SimpleLTR) ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"this is a paragraph")); ASSERT_EQ(logicalRun->embeddingLevel, 0); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::LTR); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::LTR); } { Loading @@ -120,7 +120,7 @@ TEST(IntlBidi, SimpleRTL) { Bidi bidi{}; LogicalRunIter logicalRunIter(bidi, MakeStringSpan(u"فايرفوكس رائع"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 1); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::RTL); Loading @@ -128,7 +128,7 @@ TEST(IntlBidi, SimpleRTL) auto logicalRun = logicalRunIter.Next(); ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"فايرفوكس رائع")); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::RTL); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::RTL); ASSERT_EQ(logicalRun->embeddingLevel, 1); } Loading @@ -143,7 +143,7 @@ TEST(IntlBidi, MultiLevel) Bidi bidi{}; LogicalRunIter logicalRunIter( bidi, MakeStringSpan(u"Firefox is awesome: رائع Firefox"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 0); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::Mixed); Loading Loading @@ -180,7 +180,7 @@ TEST(IntlBidi, RtlOverride) // levels can be computed. LogicalRunIter logicalRunIter( bidi, MakeStringSpan(u"ltr\u202b___رائع___\u202a___ltr__"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 0); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::Mixed); Loading @@ -189,21 +189,21 @@ TEST(IntlBidi, RtlOverride) ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"ltr")); ASSERT_EQ(logicalRun->embeddingLevel, 0); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::LTR); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::LTR); } { auto logicalRun = logicalRunIter.Next(); ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"\u202b___رائع___")); ASSERT_EQ(logicalRun->embeddingLevel, 1); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::RTL); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::RTL); } { auto logicalRun = logicalRunIter.Next(); ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"\u202a___ltr__")); ASSERT_EQ(logicalRun->embeddingLevel, 2); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::LTR); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::LTR); } { auto logicalRun = logicalRunIter.Next(); Loading @@ -219,24 +219,24 @@ TEST(IntlBidi, VisualRuns) bidi, MakeStringSpan( u"first visual run التشغيل البصري الثاني third visual run"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"first visual run ")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"التشغيل البصري الثاني")); ASSERT_EQ(run->direction, Bidi::Direction::RTL); ASSERT_EQ(run->direction, BidiDirection::RTL); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u" third visual run")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); Loading @@ -250,24 +250,24 @@ TEST(IntlBidi, VisualRunsWithEmbeds) Bidi bidi{}; VisualRunIter visualRunIter( bidi, MakeStringSpan(u"ltr\u202b___رائع___\u202a___ltr___"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"ltr")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"\u202a___ltr___")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"\u202b___رائع___")); ASSERT_EQ(run->direction, Bidi::Direction::RTL); ASSERT_EQ(run->direction, BidiDirection::RTL); } { Maybe<VisualRun> run = visualRunIter.Next(); Loading Loading
dom/base/Selection.cpp +13 −13 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ */ #include "mozilla/dom/Selection.h" #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/AccessibleCaretEventHub.h" #include "mozilla/AsyncEventDispatcher.h" Loading Loading @@ -386,8 +386,8 @@ Nullable<int16_t> Selection::GetCaretBidiLevel( aRv.Throw(NS_ERROR_NOT_INITIALIZED); return Nullable<int16_t>(); } mozilla::intl::Bidi::EmbeddingLevel caretBidiLevel = static_cast<mozilla::intl::Bidi::EmbeddingLevel>( mozilla::intl::BidiEmbeddingLevel caretBidiLevel = static_cast<mozilla::intl::BidiEmbeddingLevel>( mFrameSelection->GetCaretBidiLevel()); return (caretBidiLevel & BIDI_LEVEL_UNDEFINED) ? Nullable<int16_t>() Loading @@ -406,7 +406,7 @@ void Selection::SetCaretBidiLevel(const Nullable<int16_t>& aCaretBidiLevel, mFrameSelection->UndefineCaretBidiLevel(); } else { mFrameSelection->SetCaretBidiLevelAndMaybeSchedulePaint( mozilla::intl::Bidi::EmbeddingLevel(aCaretBidiLevel.Value())); mozilla::intl::BidiEmbeddingLevel(aCaretBidiLevel.Value())); } } Loading Loading @@ -1360,7 +1360,7 @@ nsIFrame* Selection::GetPrimaryOrCaretFrameForNodeOffset(nsIContent* aContent, CaretAssociationHint hint = mFrameSelection->GetHint(); if (aVisual) { mozilla::intl::Bidi::EmbeddingLevel caretBidiLevel = mozilla::intl::BidiEmbeddingLevel caretBidiLevel = mFrameSelection->GetCaretBidiLevel(); return nsCaret::GetCaretFrameForNodeOffset( Loading Loading @@ -3302,10 +3302,10 @@ void Selection::Modify(const nsAString& aAlter, const nsAString& aDirection, // If the paragraph direction of the focused frame is right-to-left, // we may have to swap the direction of movement. if (nsIFrame* frame = GetPrimaryFrameForFocusNode(visual)) { mozilla::intl::Bidi::Direction paraDir = mozilla::intl::BidiDirection paraDir = nsBidiPresUtils::ParagraphDirection(frame); if (paraDir == mozilla::intl::Bidi::Direction::RTL && visual) { if (paraDir == mozilla::intl::BidiDirection::RTL && visual) { if (amount == eSelectBeginLine) { amount = eSelectEndLine; forward = !forward; Loading Loading @@ -3479,9 +3479,9 @@ nsresult Selection::SelectionLanguageChange(bool aLangRTL) { RefPtr<nsFrameSelection> frameSelection = mFrameSelection; // if the direction of the language hasn't changed, nothing to do mozilla::intl::Bidi::EmbeddingLevel kbdBidiLevel = aLangRTL ? mozilla::intl::Bidi::EmbeddingLevel::RTL() : mozilla::intl::Bidi::EmbeddingLevel::LTR(); mozilla::intl::BidiEmbeddingLevel kbdBidiLevel = aLangRTL ? mozilla::intl::BidiEmbeddingLevel::RTL() : mozilla::intl::BidiEmbeddingLevel::LTR(); if (kbdBidiLevel == frameSelection->mKbdBidiLevel) { return NS_OK; } Loading @@ -3495,12 +3495,12 @@ nsresult Selection::SelectionLanguageChange(bool aLangRTL) { auto [frameStart, frameEnd] = focusFrame->GetOffsets(); RefPtr<nsPresContext> context = GetPresContext(); mozilla::intl::Bidi::EmbeddingLevel levelBefore, levelAfter; mozilla::intl::BidiEmbeddingLevel levelBefore, levelAfter; if (!context) { return NS_ERROR_FAILURE; } mozilla::intl::Bidi::EmbeddingLevel level = focusFrame->GetEmbeddingLevel(); mozilla::intl::BidiEmbeddingLevel level = focusFrame->GetEmbeddingLevel(); int32_t focusOffset = static_cast<int32_t>(FocusOffset()); if ((focusOffset != frameStart) && (focusOffset != frameEnd)) // the cursor is not at a frame boundary, so the level of both the Loading Loading @@ -3531,7 +3531,7 @@ nsresult Selection::SelectionLanguageChange(bool aLangRTL) { frameSelection->SetCaretBidiLevelAndMaybeSchedulePaint(level); } else { frameSelection->SetCaretBidiLevelAndMaybeSchedulePaint( mozilla::intl::Bidi::EmbeddingLevel(level + 1)); mozilla::intl::BidiEmbeddingLevel(level + 1)); } } else { // if cursor is between characters with opposite orientations, changing the Loading
dom/canvas/CanvasRenderingContext2D.cpp +7 −7 Original line number Diff line number Diff line Loading @@ -12,7 +12,7 @@ #include "nsContentUtils.h" #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/PresShell.h" #include "mozilla/PresShellInlines.h" #include "mozilla/SVGImageContext.h" Loading Loading @@ -3523,11 +3523,11 @@ struct MOZ_STACK_CLASS CanvasBidiProcessor using ContextState = CanvasRenderingContext2D::ContextState; virtual void SetText(const char16_t* aText, int32_t aLength, mozilla::intl::Bidi::Direction aDirection) override { mozilla::intl::BidiDirection aDirection) override { mFontgrp->UpdateUserFonts(); // ensure user font generation is current // adjust flags for current direction run gfx::ShapedTextFlags flags = mTextRunFlags; if (aDirection == mozilla::intl::Bidi::Direction::RTL) { if (aDirection == mozilla::intl::BidiDirection::RTL) { flags |= gfx::ShapedTextFlags::TEXT_IS_RTL; } else { flags &= ~gfx::ShapedTextFlags::TEXT_IS_RTL; Loading Loading @@ -3894,8 +3894,8 @@ TextMetrics* CanvasRenderingContext2D::DrawOrMeasureText( // bounding boxes before rendering anything aError = nsBidiPresUtils::ProcessText( textToDraw.get(), textToDraw.Length(), isRTL ? mozilla::intl::Bidi::EmbeddingLevel::RTL() : mozilla::intl::Bidi::EmbeddingLevel::LTR(), isRTL ? mozilla::intl::BidiEmbeddingLevel::RTL() : mozilla::intl::BidiEmbeddingLevel::LTR(), presShell->GetPresContext(), processor, nsBidiPresUtils::MODE_MEASURE, nullptr, 0, &totalWidthCoord, &mBidiEngine); if (aError.Failed()) { Loading Loading @@ -4037,8 +4037,8 @@ TextMetrics* CanvasRenderingContext2D::DrawOrMeasureText( aError = nsBidiPresUtils::ProcessText( textToDraw.get(), textToDraw.Length(), isRTL ? mozilla::intl::Bidi::EmbeddingLevel::RTL() : mozilla::intl::Bidi::EmbeddingLevel::LTR(), isRTL ? mozilla::intl::BidiEmbeddingLevel::RTL() : mozilla::intl::BidiEmbeddingLevel::LTR(), presShell->GetPresContext(), processor, nsBidiPresUtils::MODE_DRAW, nullptr, 0, nullptr, &mBidiEngine); Loading
editor/libeditor/EditorBase.cpp +5 −5 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ #include "JoinNodeTransaction.h" // for JoinNodeTransaction #include "PlaceholderTransaction.h" // for PlaceholderTransaction #include "SplitNodeTransaction.h" // for SplitNodeTransaction #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/BasePrincipal.h" // for BasePrincipal #include "mozilla/CheckedInt.h" // for CheckedInt #include "mozilla/ComposerCommandsUpdater.h" // for ComposerCommandsUpdater Loading Loading @@ -5763,13 +5763,13 @@ EditorBase::AutoCaretBidiLevelManager::AutoCaretBidiLevelManager( nsPrevNextBidiLevels levels = frameSelection->GetPrevNextBidiLevels( aPointAtCaret.GetContainerAsContent(), aPointAtCaret.Offset(), true); mozilla::intl::Bidi::EmbeddingLevel levelBefore = levels.mLevelBefore; mozilla::intl::Bidi::EmbeddingLevel levelAfter = levels.mLevelAfter; mozilla::intl::BidiEmbeddingLevel levelBefore = levels.mLevelBefore; mozilla::intl::BidiEmbeddingLevel levelAfter = levels.mLevelAfter; mozilla::intl::Bidi::EmbeddingLevel currentCaretLevel = mozilla::intl::BidiEmbeddingLevel currentCaretLevel = frameSelection->GetCaretBidiLevel(); mozilla::intl::Bidi::EmbeddingLevel levelOfDeletion; mozilla::intl::BidiEmbeddingLevel levelOfDeletion; levelOfDeletion = (nsIEditor::eNext == aDirectionAndAmount || nsIEditor::eNextWord == aDirectionAndAmount) ? levelAfter Loading
editor/libeditor/EditorBase.h +2 −2 Original line number Diff line number Diff line Loading @@ -6,7 +6,7 @@ #ifndef mozilla_EditorBase_h #define mozilla_EditorBase_h #include "mozilla/intl/Bidi.h" #include "mozilla/intl/BidiEmbeddingLevel.h" #include "mozilla/Assertions.h" // for MOZ_ASSERT, etc. #include "mozilla/EditAction.h" // for EditAction and EditSubAction #include "mozilla/EditorDOMPoint.h" // for EditorDOMPoint Loading Loading @@ -1982,7 +1982,7 @@ class EditorBase : public nsIEditor, void MaybeUpdateCaretBidiLevel(const EditorBase& aEditorBase) const; private: Maybe<mozilla::intl::Bidi::EmbeddingLevel> mNewCaretBidiLevel; Maybe<mozilla::intl::BidiEmbeddingLevel> mNewCaretBidiLevel; bool mFailed = false; bool mCanceled = false; }; Loading
intl/components/gtest/TestBidi.cpp +23 −23 Original line number Diff line number Diff line Loading @@ -9,7 +9,7 @@ namespace mozilla::intl { struct VisualRun { Span<const char16_t> string; Bidi::Direction direction; BidiDirection direction; }; /** Loading @@ -19,7 +19,7 @@ struct VisualRun { class MOZ_STACK_CLASS VisualRunIter { public: VisualRunIter(Bidi& aBidi, Span<const char16_t> aParagraph, Bidi::EmbeddingLevel aLevel) BidiEmbeddingLevel aLevel) : mBidi(aBidi), mParagraph(aParagraph) { // Crash in case of errors by calling unwrap. If this were a real API, this // would be a TryCreate call. Loading @@ -35,7 +35,7 @@ class MOZ_STACK_CLASS VisualRunIter { int32_t stringIndex = -1; int32_t stringLength = -1; Bidi::Direction direction = BidiDirection direction = mBidi.GetVisualRun(mRunIndex, &stringIndex, &stringLength); Span<const char16_t> string(mParagraph.Elements() + stringIndex, Loading @@ -53,7 +53,7 @@ class MOZ_STACK_CLASS VisualRunIter { struct LogicalRun { Span<const char16_t> string; Bidi::EmbeddingLevel embeddingLevel; BidiEmbeddingLevel embeddingLevel; }; /** Loading @@ -63,7 +63,7 @@ struct LogicalRun { class MOZ_STACK_CLASS LogicalRunIter { public: LogicalRunIter(Bidi& aBidi, Span<const char16_t> aParagraph, Bidi::EmbeddingLevel aLevel) BidiEmbeddingLevel aLevel) : mBidi(aBidi), mParagraph(aParagraph) { // Crash in case of errors by calling unwrap. If this were a real API, this // would be a TryCreate call. Loading @@ -78,7 +78,7 @@ class MOZ_STACK_CLASS LogicalRunIter { int32_t logicalLimit; Bidi::EmbeddingLevel embeddingLevel; BidiEmbeddingLevel embeddingLevel; mBidi.GetLogicalRun(mRunIndex, &logicalLimit, &embeddingLevel); Span<const char16_t> string(mParagraph.Elements() + mRunIndex, Loading @@ -98,7 +98,7 @@ TEST(IntlBidi, SimpleLTR) { Bidi bidi{}; LogicalRunIter logicalRunIter(bidi, MakeStringSpan(u"this is a paragraph"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 0); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::LTR); Loading @@ -107,7 +107,7 @@ TEST(IntlBidi, SimpleLTR) ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"this is a paragraph")); ASSERT_EQ(logicalRun->embeddingLevel, 0); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::LTR); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::LTR); } { Loading @@ -120,7 +120,7 @@ TEST(IntlBidi, SimpleRTL) { Bidi bidi{}; LogicalRunIter logicalRunIter(bidi, MakeStringSpan(u"فايرفوكس رائع"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 1); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::RTL); Loading @@ -128,7 +128,7 @@ TEST(IntlBidi, SimpleRTL) auto logicalRun = logicalRunIter.Next(); ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"فايرفوكس رائع")); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::RTL); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::RTL); ASSERT_EQ(logicalRun->embeddingLevel, 1); } Loading @@ -143,7 +143,7 @@ TEST(IntlBidi, MultiLevel) Bidi bidi{}; LogicalRunIter logicalRunIter( bidi, MakeStringSpan(u"Firefox is awesome: رائع Firefox"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 0); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::Mixed); Loading Loading @@ -180,7 +180,7 @@ TEST(IntlBidi, RtlOverride) // levels can be computed. LogicalRunIter logicalRunIter( bidi, MakeStringSpan(u"ltr\u202b___رائع___\u202a___ltr__"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); ASSERT_EQ(bidi.GetParagraphEmbeddingLevel(), 0); ASSERT_EQ(bidi.GetParagraphDirection(), Bidi::ParagraphDirection::Mixed); Loading @@ -189,21 +189,21 @@ TEST(IntlBidi, RtlOverride) ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"ltr")); ASSERT_EQ(logicalRun->embeddingLevel, 0); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::LTR); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::LTR); } { auto logicalRun = logicalRunIter.Next(); ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"\u202b___رائع___")); ASSERT_EQ(logicalRun->embeddingLevel, 1); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::RTL); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::RTL); } { auto logicalRun = logicalRunIter.Next(); ASSERT_TRUE(logicalRun.isSome()); ASSERT_EQ(logicalRun->string, MakeStringSpan(u"\u202a___ltr__")); ASSERT_EQ(logicalRun->embeddingLevel, 2); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), Bidi::Direction::LTR); ASSERT_EQ(logicalRun->embeddingLevel.Direction(), BidiDirection::LTR); } { auto logicalRun = logicalRunIter.Next(); Loading @@ -219,24 +219,24 @@ TEST(IntlBidi, VisualRuns) bidi, MakeStringSpan( u"first visual run التشغيل البصري الثاني third visual run"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"first visual run ")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"التشغيل البصري الثاني")); ASSERT_EQ(run->direction, Bidi::Direction::RTL); ASSERT_EQ(run->direction, BidiDirection::RTL); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u" third visual run")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); Loading @@ -250,24 +250,24 @@ TEST(IntlBidi, VisualRunsWithEmbeds) Bidi bidi{}; VisualRunIter visualRunIter( bidi, MakeStringSpan(u"ltr\u202b___رائع___\u202a___ltr___"), Bidi::EmbeddingLevel::DefaultLTR()); BidiEmbeddingLevel::DefaultLTR()); { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"ltr")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"\u202a___ltr___")); ASSERT_EQ(run->direction, Bidi::Direction::LTR); ASSERT_EQ(run->direction, BidiDirection::LTR); } { Maybe<VisualRun> run = visualRunIter.Next(); ASSERT_TRUE(run.isSome()); ASSERT_EQ(run->string, MakeStringSpan(u"\u202b___رائع___")); ASSERT_EQ(run->direction, Bidi::Direction::RTL); ASSERT_EQ(run->direction, BidiDirection::RTL); } { Maybe<VisualRun> run = visualRunIter.Next(); Loading