Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1577)

Unified Diff: third_party/WebKit/Source/platform/text/BidiResolver.h

Issue 1468103002: Add context information to BidiResolver.isolatedRuns() (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/layout/line/TrailingObjects.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/platform/text/BidiResolver.h
diff --git a/third_party/WebKit/Source/platform/text/BidiResolver.h b/third_party/WebKit/Source/platform/text/BidiResolver.h
index 0bc9220a84bf630d3e0cc85110ccff8b3c288f48..4bb3206c41afdbfb21249de8e25e3714bc16d51a 100644
--- a/third_party/WebKit/Source/platform/text/BidiResolver.h
+++ b/third_party/WebKit/Source/platform/text/BidiResolver.h
@@ -178,9 +178,12 @@ enum VisualDirectionOverride {
VisualRightToLeftOverride
};
+class NoIsolatedRun {
+};
+
// BidiResolver is WebKit's implementation of the Unicode Bidi Algorithm
// http://unicode.org/reports/tr9
-template <class Iterator, class Run> class BidiResolver {
+template <class Iterator, class Run, class IsolatedRun = NoIsolatedRun> class BidiResolver {
WTF_MAKE_NONCOPYABLE(BidiResolver);
public:
BidiResolver()
@@ -243,7 +246,7 @@ public:
// It's unclear if this is still needed.
void markCurrentRunEmpty() { m_emptyRun = true; }
- Vector<Run*>& isolatedRuns() { return m_isolatedRuns; }
+ Vector<IsolatedRun>& isolatedRuns() { return m_isolatedRuns; }
bool isEndOfLine(const Iterator& end) { return m_current == end || m_current.atEnd(); }
@@ -258,8 +261,8 @@ public:
return determineDirectionalityInternal(breakOnParagraph, hasStrongDirectionality);
}
- void setMidpointStateForIsolatedRun(Run*, const MidpointState<Iterator>&);
- MidpointState<Iterator> midpointStateForIsolatedRun(Run*);
+ void setMidpointStateForIsolatedRun(Run&, const MidpointState<Iterator>&);
+ MidpointState<Iterator> midpointStateForIsolatedRun(Run&);
Iterator endOfLine() const { return m_endOfLine; }
@@ -294,7 +297,7 @@ protected:
MidpointState<Iterator> m_midpointState;
unsigned m_nestedIsolateCount;
- Vector<Run*> m_isolatedRuns;
+ Vector<IsolatedRun> m_isolatedRuns;
Run* m_trailingSpaceRun;
TextDirection m_paragraphDirectionality;
@@ -318,16 +321,16 @@ private:
};
#if ENABLE(ASSERT)
-template <class Iterator, class Run>
-BidiResolver<Iterator, Run>::~BidiResolver()
+template <class Iterator, class Run, class IsolatedRun>
+BidiResolver<Iterator, Run, IsolatedRun>::~BidiResolver()
{
// The owner of this resolver should have handled the isolated runs.
ASSERT(m_isolatedRuns.isEmpty());
}
#endif
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::appendRun(BidiRunList<Run>& runs)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::appendRun(BidiRunList<Run>& runs)
{
if (!m_emptyRun && !m_eor.atEnd()) {
unsigned startOffset = m_sor.offset();
@@ -361,8 +364,8 @@ void BidiResolver<Iterator, Run>::appendRun(BidiRunList<Run>& runs)
m_status.eor = WTF::Unicode::OtherNeutral;
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::embed(WTF::Unicode::Direction dir, BidiEmbeddingSource source)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::embed(WTF::Unicode::Direction dir, BidiEmbeddingSource source)
{
// Isolated spans compute base directionality during their own UBA run.
// Do not insert fake embed characters once we enter an isolated span.
@@ -373,8 +376,8 @@ void BidiResolver<Iterator, Run>::embed(WTF::Unicode::Direction dir, BidiEmbeddi
m_currentExplicitEmbeddingSequence.append(BidiEmbedding(dir, source));
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::checkDirectionInLowerRaiseEmbeddingLevel()
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::checkDirectionInLowerRaiseEmbeddingLevel()
{
using namespace WTF::Unicode;
@@ -390,8 +393,8 @@ void BidiResolver<Iterator, Run>::checkDirectionInLowerRaiseEmbeddingLevel()
m_direction = m_status.lastStrong == LeftToRight ? LeftToRight : RightToLeft;
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::lowerExplicitEmbeddingLevel(BidiRunList<Run>& runs, WTF::Unicode::Direction from)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::lowerExplicitEmbeddingLevel(BidiRunList<Run>& runs, WTF::Unicode::Direction from)
{
using namespace WTF::Unicode;
@@ -428,8 +431,8 @@ void BidiResolver<Iterator, Run>::lowerExplicitEmbeddingLevel(BidiRunList<Run>&
m_eor = Iterator();
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::raiseExplicitEmbeddingLevel(BidiRunList<Run>& runs, WTF::Unicode::Direction from, WTF::Unicode::Direction to)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::raiseExplicitEmbeddingLevel(BidiRunList<Run>& runs, WTF::Unicode::Direction from, WTF::Unicode::Direction to)
{
using namespace WTF::Unicode;
@@ -467,8 +470,8 @@ void BidiResolver<Iterator, Run>::raiseExplicitEmbeddingLevel(BidiRunList<Run>&
m_eor = Iterator();
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::applyL1Rule(BidiRunList<Run>& runs)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::applyL1Rule(BidiRunList<Run>& runs)
{
ASSERT(runs.runCount());
if (!needsToApplyL1Rule(runs))
@@ -506,8 +509,8 @@ void BidiResolver<Iterator, Run>::applyL1Rule(BidiRunList<Run>& runs)
m_trailingSpaceRun = trailingSpaceRun;
}
-template <class Iterator, class Run>
-bool BidiResolver<Iterator, Run>::commitExplicitEmbedding(BidiRunList<Run>& runs)
+template <class Iterator, class Run, class IsolatedRun>
+bool BidiResolver<Iterator, Run, IsolatedRun>::commitExplicitEmbedding(BidiRunList<Run>& runs)
{
// When we're "inIsolate()" we're resolving the parent context which
// ignores (skips over) the isolated content, including embedding levels.
@@ -551,8 +554,8 @@ bool BidiResolver<Iterator, Run>::commitExplicitEmbedding(BidiRunList<Run>& runs
return fromLevel != toLevel;
}
-template <class Iterator, class Run>
-inline void BidiResolver<Iterator, Run>::updateStatusLastFromCurrentDirection(WTF::Unicode::Direction dirCurrent)
+template <class Iterator, class Run, class IsolatedRun>
+inline void BidiResolver<Iterator, Run, IsolatedRun>::updateStatusLastFromCurrentDirection(WTF::Unicode::Direction dirCurrent)
{
using namespace WTF::Unicode;
switch (dirCurrent) {
@@ -593,8 +596,8 @@ inline void BidiResolver<Iterator, Run>::updateStatusLastFromCurrentDirection(WT
}
}
-template <class Iterator, class Run>
-inline void BidiResolver<Iterator, Run>::reorderRunsFromLevels(BidiRunList<Run>& runs) const
+template <class Iterator, class Run, class IsolatedRun>
+inline void BidiResolver<Iterator, Run, IsolatedRun>::reorderRunsFromLevels(BidiRunList<Run>& runs) const
{
unsigned char levelLow = BidiContext::kMaxLevel;
unsigned char levelHigh = 0;
@@ -630,8 +633,8 @@ inline void BidiResolver<Iterator, Run>::reorderRunsFromLevels(BidiRunList<Run>&
}
}
-template <class Iterator, class Run>
-TextDirection BidiResolver<Iterator, Run>::determineDirectionalityInternal(
+template <class Iterator, class Run, class IsolatedRun>
+TextDirection BidiResolver<Iterator, Run, IsolatedRun>::determineDirectionalityInternal(
bool breakOnParagraph, bool* hasStrongDirectionality)
{
while (!m_current.atEnd()) {
@@ -682,8 +685,8 @@ inline TextDirection directionForCharacter(UChar32 character)
return LTR;
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, VisualDirectionOverride override, bool hardLineBreak, bool reorderRuns)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::createBidiRunsForLine(const Iterator& end, VisualDirectionOverride override, bool hardLineBreak, bool reorderRuns)
{
using namespace WTF::Unicode;
@@ -714,7 +717,7 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
m_last = m_current;
bool lastLineEnded = false;
- BidiResolver<Iterator, Run> stateAtEnd;
+ BidiResolver<Iterator, Run, IsolatedRun> stateAtEnd;
while (true) {
if (inIsolate() && m_emptyRun) {
@@ -1091,20 +1094,19 @@ void BidiResolver<Iterator, Run>::createBidiRunsForLine(const Iterator& end, Vis
applyL1Rule(m_runs);
}
-template <class Iterator, class Run>
-void BidiResolver<Iterator, Run>::setMidpointStateForIsolatedRun(Run* run, const MidpointState<Iterator>& midpoint)
+template <class Iterator, class Run, class IsolatedRun>
+void BidiResolver<Iterator, Run, IsolatedRun>::setMidpointStateForIsolatedRun(Run& run, const MidpointState<Iterator>& midpoint)
{
- ASSERT(!m_midpointStateForIsolatedRun.contains(run));
- m_midpointStateForIsolatedRun.add(run, midpoint);
+ ASSERT(!m_midpointStateForIsolatedRun.contains(&run));
+ m_midpointStateForIsolatedRun.add(&run, midpoint);
}
-template<class Iterator, class Run>
-MidpointState<Iterator> BidiResolver<Iterator, Run>::midpointStateForIsolatedRun(Run* run)
+template<class Iterator, class Run, class IsolatedRun>
+MidpointState<Iterator> BidiResolver<Iterator, Run, IsolatedRun>::midpointStateForIsolatedRun(Run& run)
{
- return m_midpointStateForIsolatedRun.take(run);
+ return m_midpointStateForIsolatedRun.take(&run);
}
-
} // namespace blink
#endif // BidiResolver_h
« no previous file with comments | « third_party/WebKit/Source/core/layout/line/TrailingObjects.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698