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

Unified Diff: third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp

Issue 1613903003: Integrate SymbolsIterator into RunSegmenter (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebaseline likely due to different run segmentation Created 4 years, 11 months 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
Index: third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
diff --git a/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp b/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
index f2d89e6f1b1dbe2fdeb6e8060e7e1a28e5d9e06c..8d774f6468ae1db78d90c4a8e9ed3570cf8a2778 100644
--- a/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
+++ b/third_party/WebKit/Source/platform/fonts/shaping/RunSegmenter.cpp
@@ -7,6 +7,7 @@
#include "platform/fonts/Character.h"
#include "platform/fonts/ScriptRunIterator.h"
#include "platform/fonts/SmallCapsIterator.h"
+#include "platform/fonts/SymbolsIterator.h"
#include "platform/fonts/UTF16TextIterator.h"
#include "wtf/Assertions.h"
@@ -18,10 +19,12 @@ RunSegmenter::RunSegmenter(const UChar* buffer, unsigned bufferSize, FontOrienta
, m_scriptRunIterator(adoptPtr(new ScriptRunIterator(buffer, bufferSize)))
, m_orientationIterator(runOrientation == FontOrientation::VerticalMixed ? adoptPtr(new OrientationIterator(buffer, bufferSize, runOrientation)) : nullptr)
, m_smallCapsIterator(variant == FontVariantSmallCaps ? adoptPtr(new SmallCapsIterator(buffer, bufferSize)) : nullptr)
+ , m_symbolsIterator(adoptPtr(new SymbolsIterator(buffer, bufferSize)))
, m_lastSplit(0)
, m_scriptRunIteratorPosition(0)
, m_orientationIteratorPosition(runOrientation == FontOrientation::VerticalMixed ? 0 : m_bufferSize)
, m_smallCapsIteratorPosition(variant == FontVariantSmallCaps ? 0 : m_bufferSize)
+ , m_symbolsIteratorPosition(0)
, m_atEnd(false)
{
}
@@ -57,6 +60,17 @@ void RunSegmenter::consumeSmallCapsIteratorPastLastSplit()
}
}
+void RunSegmenter::consumeSymbolsIteratorPastLastSplit()
+{
+ ASSERT(m_symbolsIterator);
+ if (m_symbolsIteratorPosition <= m_lastSplit && m_symbolsIteratorPosition < m_bufferSize) {
+ while (m_symbolsIterator->consume(&m_symbolsIteratorPosition, &m_candidateRange.fontFallbackPriority)) {
+ if (m_symbolsIteratorPosition > m_lastSplit)
+ return;
+ }
+ }
+}
+
bool RunSegmenter::consume(RunSegmenterRange* nextRange)
{
if (m_atEnd || !m_bufferSize)
@@ -65,22 +79,32 @@ bool RunSegmenter::consume(RunSegmenterRange* nextRange)
consumeScriptIteratorPastLastSplit();
consumeOrientationIteratorPastLastSplit();
consumeSmallCapsIteratorPastLastSplit();
+ consumeSymbolsIteratorPastLastSplit();
if (m_scriptRunIteratorPosition <= m_orientationIteratorPosition
- && m_scriptRunIteratorPosition <= m_smallCapsIteratorPosition) {
+ && m_scriptRunIteratorPosition <= m_smallCapsIteratorPosition
+ && m_scriptRunIteratorPosition <= m_symbolsIteratorPosition) {
m_lastSplit = m_scriptRunIteratorPosition;
}
if (m_orientationIteratorPosition <= m_scriptRunIteratorPosition
- && m_orientationIteratorPosition <= m_smallCapsIteratorPosition) {
+ && m_orientationIteratorPosition <= m_smallCapsIteratorPosition
+ && m_orientationIteratorPosition <= m_symbolsIteratorPosition) {
m_lastSplit = m_orientationIteratorPosition;
}
if (m_smallCapsIteratorPosition <= m_scriptRunIteratorPosition
- && m_smallCapsIteratorPosition <= m_orientationIteratorPosition) {
+ && m_smallCapsIteratorPosition <= m_orientationIteratorPosition
+ && m_smallCapsIteratorPosition <= m_symbolsIteratorPosition) {
m_lastSplit = m_smallCapsIteratorPosition;
}
+ if (m_symbolsIteratorPosition <= m_scriptRunIteratorPosition
+ && m_symbolsIteratorPosition <= m_orientationIteratorPosition
+ && m_symbolsIteratorPosition <= m_smallCapsIteratorPosition) {
+ m_lastSplit = m_symbolsIteratorPosition;
+ }
+
m_candidateRange.start = m_candidateRange.end;
m_candidateRange.end = m_lastSplit;
*nextRange = m_candidateRange;

Powered by Google App Engine
This is Rietveld 408576698