Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006 Lars Knoll <lars@trolltech.com> | 2 * Copyright (C) 2006 Lars Knoll <lars@trolltech.com> |
| 3 * Copyright (C) 2007, 2011, 2012 Apple Inc. All rights reserved. | 3 * Copyright (C) 2007, 2011, 2012 Apple Inc. All rights reserved. |
| 4 * | 4 * |
| 5 * This library is free software; you can redistribute it and/or | 5 * This library is free software; you can redistribute it and/or |
| 6 * modify it under the terms of the GNU Library General Public | 6 * modify it under the terms of the GNU Library General Public |
| 7 * License as published by the Free Software Foundation; either | 7 * License as published by the Free Software Foundation; either |
| 8 * version 2 of the License, or (at your option) any later version. | 8 * version 2 of the License, or (at your option) any later version. |
| 9 * | 9 * |
| 10 * This library is distributed in the hope that it will be useful, | 10 * This library is distributed in the hope that it will be useful, |
| (...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 ++priorContextLength; | 142 ++priorContextLength; |
| 143 } | 143 } |
| 144 return priorContextLength; | 144 return priorContextLength; |
| 145 } | 145 } |
| 146 | 146 |
| 147 // Obtain text break iterator, possibly previously cached, where this iterator | 147 // Obtain text break iterator, possibly previously cached, where this iterator |
| 148 // is (or has been) initialized to use the previously stored string as the | 148 // is (or has been) initialized to use the previously stored string as the |
| 149 // primary breaking context and using previously stored prior context if | 149 // primary breaking context and using previously stored prior context if |
| 150 // non-empty. | 150 // non-empty. |
| 151 TextBreakIterator* get(unsigned priorContextLength) { | 151 TextBreakIterator* get(unsigned priorContextLength) { |
| 152 ASSERT(priorContextLength <= priorContextCapacity); | 152 DCHECK(priorContextLength <= priorContextCapacity); |
|
tkent
2017/04/09 23:07:01
Use DCHECK_LE if it doesn't cause a compile failur
Hwanseung Lee
2017/04/11 03:29:38
it was cause compile failure.
| |
| 153 const UChar* priorContext = | 153 const UChar* priorContext = |
| 154 priorContextLength | 154 priorContextLength |
| 155 ? &m_priorContext[priorContextCapacity - priorContextLength] | 155 ? &m_priorContext[priorContextCapacity - priorContextLength] |
| 156 : 0; | 156 : 0; |
| 157 if (!m_iterator) { | 157 if (!m_iterator) { |
| 158 if (m_string.is8Bit()) | 158 if (m_string.is8Bit()) |
| 159 m_iterator = acquireLineBreakIterator(m_string.characters8(), | 159 m_iterator = acquireLineBreakIterator(m_string.characters8(), |
| 160 m_string.length(), m_locale, | 160 m_string.length(), m_locale, |
| 161 priorContext, priorContextLength); | 161 priorContext, priorContextLength); |
| 162 else | 162 else |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 237 bool isBreak(int offset) const; | 237 bool isBreak(int offset) const; |
| 238 int preceding(int offset) const; | 238 int preceding(int offset) const; |
| 239 int following(int offset) const; | 239 int following(int offset) const; |
| 240 | 240 |
| 241 bool operator!() const { return !m_is8Bit && !m_iterator; } | 241 bool operator!() const { return !m_is8Bit && !m_iterator; } |
| 242 | 242 |
| 243 private: | 243 private: |
| 244 void createIteratorForBuffer(const UChar*, unsigned length); | 244 void createIteratorForBuffer(const UChar*, unsigned length); |
| 245 | 245 |
| 246 unsigned clusterLengthStartingAt(unsigned offset) const { | 246 unsigned clusterLengthStartingAt(unsigned offset) const { |
| 247 ASSERT(m_is8Bit); | 247 DCHECK(m_is8Bit); |
| 248 // The only Latin-1 Extended Grapheme Cluster is CR LF | 248 // The only Latin-1 Extended Grapheme Cluster is CR LF |
| 249 return isCRBeforeLF(offset) ? 2 : 1; | 249 return isCRBeforeLF(offset) ? 2 : 1; |
| 250 } | 250 } |
| 251 | 251 |
| 252 bool isCRBeforeLF(unsigned offset) const { | 252 bool isCRBeforeLF(unsigned offset) const { |
| 253 ASSERT(m_is8Bit); | 253 DCHECK(m_is8Bit); |
| 254 return m_charaters8[offset] == '\r' && offset + 1 < m_length && | 254 return m_charaters8[offset] == '\r' && offset + 1 < m_length && |
| 255 m_charaters8[offset + 1] == '\n'; | 255 m_charaters8[offset + 1] == '\n'; |
| 256 } | 256 } |
| 257 | 257 |
| 258 bool isLFAfterCR(unsigned offset) const { | 258 bool isLFAfterCR(unsigned offset) const { |
| 259 ASSERT(m_is8Bit); | 259 DCHECK(m_is8Bit); |
| 260 return m_charaters8[offset] == '\n' && offset >= 1 && | 260 return m_charaters8[offset] == '\n' && offset >= 1 && |
| 261 m_charaters8[offset - 1] == '\r'; | 261 m_charaters8[offset - 1] == '\r'; |
| 262 } | 262 } |
| 263 | 263 |
| 264 bool m_is8Bit; | 264 bool m_is8Bit; |
| 265 | 265 |
| 266 // For 8 bit strings, we implement the iterator ourselves. | 266 // For 8 bit strings, we implement the iterator ourselves. |
| 267 const LChar* m_charaters8; | 267 const LChar* m_charaters8; |
| 268 unsigned m_offset; | 268 unsigned m_offset; |
| 269 unsigned m_length; | 269 unsigned m_length; |
| 270 | 270 |
| 271 // For 16 bit strings, we use a TextBreakIterator. | 271 // For 16 bit strings, we use a TextBreakIterator. |
| 272 TextBreakIterator* m_iterator; | 272 TextBreakIterator* m_iterator; |
| 273 }; | 273 }; |
| 274 | 274 |
| 275 // Counts the number of grapheme clusters. A surrogate pair or a sequence | 275 // Counts the number of grapheme clusters. A surrogate pair or a sequence |
| 276 // of a non-combining character and following combining characters is | 276 // of a non-combining character and following combining characters is |
| 277 // counted as 1 grapheme cluster. | 277 // counted as 1 grapheme cluster. |
| 278 PLATFORM_EXPORT unsigned numGraphemeClusters(const String&); | 278 PLATFORM_EXPORT unsigned numGraphemeClusters(const String&); |
| 279 | 279 |
| 280 } // namespace blink | 280 } // namespace blink |
| 281 | 281 |
| 282 #endif | 282 #endif |
| OLD | NEW |