| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "platform/fonts/ScriptRunIterator.h" | 5 #include "platform/fonts/ScriptRunIterator.h" |
| 6 | 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "wtf/Assertions.h" | 8 #include "wtf/Assertions.h" |
| 9 #include "wtf/Threading.h" | 9 #include "wtf/Threading.h" |
| 10 #include "wtf/text/WTFString.h" | 10 #include "wtf/text/WTFString.h" |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 } | 37 } |
| 38 | 38 |
| 39 void getScripts(UChar32 ch, Vector<UScriptCode>& dst) const override { | 39 void getScripts(UChar32 ch, Vector<UScriptCode>& dst) const override { |
| 40 ASSERT(ch >= kMockCharMin); | 40 ASSERT(ch >= kMockCharMin); |
| 41 ASSERT(ch < kMockCharLimit); | 41 ASSERT(ch < kMockCharLimit); |
| 42 | 42 |
| 43 int code = ch - kMockCharMin; | 43 int code = ch - kMockCharMin; |
| 44 dst.clear(); | 44 dst.clear(); |
| 45 switch (code & kCodeSpecialMask) { | 45 switch (code & kCodeSpecialMask) { |
| 46 case kCodeSpecialCommon: | 46 case kCodeSpecialCommon: |
| 47 dst.append(USCRIPT_COMMON); | 47 dst.push_back(USCRIPT_COMMON); |
| 48 break; | 48 break; |
| 49 case kCodeSpecialInherited: | 49 case kCodeSpecialInherited: |
| 50 dst.append(USCRIPT_INHERITED); | 50 dst.push_back(USCRIPT_INHERITED); |
| 51 break; | 51 break; |
| 52 default: | 52 default: |
| 53 break; | 53 break; |
| 54 } | 54 } |
| 55 int listBits = kTable[code & kCodeListIndexMask]; | 55 int listBits = kTable[code & kCodeListIndexMask]; |
| 56 if (dst.isEmpty() && listBits == 0) { | 56 if (dst.isEmpty() && listBits == 0) { |
| 57 dst.append(USCRIPT_UNKNOWN); | 57 dst.push_back(USCRIPT_UNKNOWN); |
| 58 return; | 58 return; |
| 59 } | 59 } |
| 60 while (listBits) { | 60 while (listBits) { |
| 61 switch (listBits & kListMask) { | 61 switch (listBits & kListMask) { |
| 62 case 0: | 62 case 0: |
| 63 break; | 63 break; |
| 64 case kLatin: | 64 case kLatin: |
| 65 dst.append(USCRIPT_LATIN); | 65 dst.push_back(USCRIPT_LATIN); |
| 66 break; | 66 break; |
| 67 case kHan: | 67 case kHan: |
| 68 dst.append(USCRIPT_HAN); | 68 dst.push_back(USCRIPT_HAN); |
| 69 break; | 69 break; |
| 70 case kGreek: | 70 case kGreek: |
| 71 dst.append(USCRIPT_GREEK); | 71 dst.push_back(USCRIPT_GREEK); |
| 72 break; | 72 break; |
| 73 } | 73 } |
| 74 listBits >>= kListShift; | 74 listBits >>= kListShift; |
| 75 } | 75 } |
| 76 } | 76 } |
| 77 | 77 |
| 78 UChar32 getPairedBracket(UChar32 ch) const override { | 78 UChar32 getPairedBracket(UChar32 ch) const override { |
| 79 switch (getPairedBracketType(ch)) { | 79 switch (getPairedBracketType(ch)) { |
| 80 case PairedBracketType::BracketTypeClose: | 80 case PairedBracketType::BracketTypeClose: |
| 81 return ch - kBracketDelta; | 81 return ch - kBracketDelta; |
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 285 kGreek3 + kHan2 + kLatin, | 285 kGreek3 + kHan2 + kLatin, |
| 286 }; | 286 }; |
| 287 | 287 |
| 288 class ScriptRunIteratorTest : public testing::Test { | 288 class ScriptRunIteratorTest : public testing::Test { |
| 289 protected: | 289 protected: |
| 290 void CheckRuns(const Vector<TestRun>& runs) { | 290 void CheckRuns(const Vector<TestRun>& runs) { |
| 291 String text(emptyString16Bit()); | 291 String text(emptyString16Bit()); |
| 292 Vector<ExpectedRun> expect; | 292 Vector<ExpectedRun> expect; |
| 293 for (auto& run : runs) { | 293 for (auto& run : runs) { |
| 294 text.append(String::fromUTF8(run.text.c_str())); | 294 text.append(String::fromUTF8(run.text.c_str())); |
| 295 expect.append(ExpectedRun(text.length(), run.code)); | 295 expect.push_back(ExpectedRun(text.length(), run.code)); |
| 296 } | 296 } |
| 297 ScriptRunIterator scriptRunIterator(text.characters16(), text.length()); | 297 ScriptRunIterator scriptRunIterator(text.characters16(), text.length()); |
| 298 VerifyRuns(&scriptRunIterator, expect); | 298 VerifyRuns(&scriptRunIterator, expect); |
| 299 } | 299 } |
| 300 | 300 |
| 301 // FIXME crbug.com/527329 - CheckMockRuns should be replaced by finding | 301 // FIXME crbug.com/527329 - CheckMockRuns should be replaced by finding |
| 302 // suitable equivalent real codepoint sequences instead. | 302 // suitable equivalent real codepoint sequences instead. |
| 303 void CheckMockRuns(const Vector<TestRun>& runs) { | 303 void CheckMockRuns(const Vector<TestRun>& runs) { |
| 304 String text(emptyString16Bit()); | 304 String text(emptyString16Bit()); |
| 305 Vector<ExpectedRun> expect; | 305 Vector<ExpectedRun> expect; |
| 306 for (const TestRun& run : runs) { | 306 for (const TestRun& run : runs) { |
| 307 text.append(MockScriptData::ToTestString(run.text)); | 307 text.append(MockScriptData::ToTestString(run.text)); |
| 308 expect.append(ExpectedRun(text.length(), run.code)); | 308 expect.push_back(ExpectedRun(text.length(), run.code)); |
| 309 } | 309 } |
| 310 | 310 |
| 311 ScriptRunIterator scriptRunIterator(text.characters16(), text.length(), | 311 ScriptRunIterator scriptRunIterator(text.characters16(), text.length(), |
| 312 MockScriptData::instance()); | 312 MockScriptData::instance()); |
| 313 VerifyRuns(&scriptRunIterator, expect); | 313 VerifyRuns(&scriptRunIterator, expect); |
| 314 } | 314 } |
| 315 | 315 |
| 316 void VerifyRuns(ScriptRunIterator* scriptRunIterator, | 316 void VerifyRuns(ScriptRunIterator* scriptRunIterator, |
| 317 const Vector<ExpectedRun>& expect) { | 317 const Vector<ExpectedRun>& expect) { |
| 318 unsigned limit; | 318 unsigned limit; |
| (...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 679 } | 679 } |
| 680 } | 680 } |
| 681 } | 681 } |
| 682 | 682 |
| 683 // ZWJ is \u200D Cf (Format, other) and its script is inherited. I'm going to | 683 // ZWJ is \u200D Cf (Format, other) and its script is inherited. I'm going to |
| 684 // ignore this for now, as I think it shouldn't matter which run it ends up | 684 // ignore this for now, as I think it shouldn't matter which run it ends up |
| 685 // in. HarfBuzz needs to be able to use it as context and shape each | 685 // in. HarfBuzz needs to be able to use it as context and shape each |
| 686 // neighboring character appropriately no matter what run it got assigned to. | 686 // neighboring character appropriately no matter what run it got assigned to. |
| 687 | 687 |
| 688 } // namespace blink | 688 } // namespace blink |
| OLD | NEW |