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 <string> | 7 #include <string> |
8 #include "platform/wtf/Assertions.h" | 8 #include "platform/wtf/Assertions.h" |
9 #include "platform/wtf/Threading.h" | 9 #include "platform/wtf/Threading.h" |
10 #include "platform/wtf/text/WTFString.h" | 10 #include "platform/wtf/text/WTFString.h" |
(...skipping 19 matching lines...) Expand all Loading... | |
30 ~MockScriptData() override {} | 30 ~MockScriptData() override {} |
31 | 31 |
32 static const MockScriptData* instance() { | 32 static const MockScriptData* instance() { |
33 DEFINE_THREAD_SAFE_STATIC_LOCAL(const MockScriptData, mockScriptData, | 33 DEFINE_THREAD_SAFE_STATIC_LOCAL(const MockScriptData, mockScriptData, |
34 (new MockScriptData())); | 34 (new MockScriptData())); |
35 | 35 |
36 return &mockScriptData; | 36 return &mockScriptData; |
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 DCHECK_GE(ch, kMockCharMin); |
41 ASSERT(ch < kMockCharLimit); | 41 DCHECK_LT(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.push_back(USCRIPT_COMMON); | 47 dst.push_back(USCRIPT_COMMON); |
48 break; | 48 break; |
49 case kCodeSpecialInherited: | 49 case kCodeSpecialInherited: |
50 dst.push_back(USCRIPT_INHERITED); | 50 dst.push_back(USCRIPT_INHERITED); |
51 break; | 51 break; |
(...skipping 28 matching lines...) Expand all Loading... | |
80 case PairedBracketType::BracketTypeClose: | 80 case PairedBracketType::BracketTypeClose: |
81 return ch - kBracketDelta; | 81 return ch - kBracketDelta; |
82 case PairedBracketType::BracketTypeOpen: | 82 case PairedBracketType::BracketTypeOpen: |
83 return ch + kBracketDelta; | 83 return ch + kBracketDelta; |
84 default: | 84 default: |
85 return ch; | 85 return ch; |
86 } | 86 } |
87 } | 87 } |
88 | 88 |
89 PairedBracketType getPairedBracketType(UChar32 ch) const override { | 89 PairedBracketType getPairedBracketType(UChar32 ch) const override { |
90 ASSERT(ch >= kMockCharMin && ch < kMockCharLimit); | 90 DCHECK(ch >= kMockCharMin && ch < kMockCharLimit); |
tkent
2017/04/09 23:13:23
Split this into two DCHECKs
Hwanseung Lee
2017/04/11 22:25:09
Done.
| |
91 int code = ch - kMockCharMin; | 91 int code = ch - kMockCharMin; |
92 if ((code & kCodeBracketBit) == 0) { | 92 if ((code & kCodeBracketBit) == 0) { |
93 return PairedBracketType::BracketTypeNone; | 93 return PairedBracketType::BracketTypeNone; |
94 } | 94 } |
95 if (code & kCodeBracketCloseBit) { | 95 if (code & kCodeBracketCloseBit) { |
96 return PairedBracketType::BracketTypeClose; | 96 return PairedBracketType::BracketTypeClose; |
97 } | 97 } |
98 return PairedBracketType::BracketTypeOpen; | 98 return PairedBracketType::BracketTypeOpen; |
99 } | 99 } |
100 | 100 |
(...skipping 11 matching lines...) Expand all Loading... | |
112 String result(emptyString16Bit); | 112 String result(emptyString16Bit); |
113 bool inSet = false; | 113 bool inSet = false; |
114 int seen = 0; | 114 int seen = 0; |
115 int code = 0; | 115 int code = 0; |
116 int list = 0; | 116 int list = 0; |
117 int currentShift = 0; | 117 int currentShift = 0; |
118 for (char c : input) { | 118 for (char c : input) { |
119 if (inSet) { | 119 if (inSet) { |
120 switch (c) { | 120 switch (c) { |
121 case '(': | 121 case '(': |
122 ASSERT(seen == 0); | 122 DCHECK_EQ(seen, 0); |
123 seen |= kSawBracket; | 123 seen |= kSawBracket; |
124 code |= kCodeBracketBit; | 124 code |= kCodeBracketBit; |
125 break; | 125 break; |
126 case '[': | 126 case '[': |
127 ASSERT(seen == 0); | 127 DCHECK_EQ(seen, 0); |
128 seen |= kSawBracket; | 128 seen |= kSawBracket; |
129 code |= kCodeBracketBit | kCodeSquareBracketBit; | 129 code |= kCodeBracketBit | kCodeSquareBracketBit; |
130 break; | 130 break; |
131 case ')': | 131 case ')': |
132 ASSERT(seen == 0); | 132 DCHECK_EQ(seen, 0); |
133 seen |= kSawBracket; | 133 seen |= kSawBracket; |
134 code |= kCodeBracketBit | kCodeBracketCloseBit; | 134 code |= kCodeBracketBit | kCodeBracketCloseBit; |
135 break; | 135 break; |
136 case ']': | 136 case ']': |
137 ASSERT(seen == 0); | 137 DCHECK_EQ(seen, 0); |
138 seen |= kSawBracket; | 138 seen |= kSawBracket; |
139 code |= | 139 code |= |
140 kCodeBracketBit | kCodeSquareBracketBit | kCodeBracketCloseBit; | 140 kCodeBracketBit | kCodeSquareBracketBit | kCodeBracketCloseBit; |
141 break; | 141 break; |
142 case 'i': | 142 case 'i': |
143 ASSERT(seen == 0); // brackets can't be inherited | 143 DCHECK_EQ(seen, 0); // brackets can't be inherited |
144 seen |= kSawSpecial; | 144 seen |= kSawSpecial; |
145 code |= kCodeSpecialInherited; | 145 code |= kCodeSpecialInherited; |
146 break; | 146 break; |
147 case 'c': | 147 case 'c': |
148 ASSERT((seen & ~kSawBracket) == 0); | 148 DCHECK_EQ((seen & ~kSawBracket), 0); |
149 seen |= kSawSpecial; | 149 seen |= kSawSpecial; |
150 code |= kCodeSpecialCommon; | 150 code |= kCodeSpecialCommon; |
151 break; | 151 break; |
152 case 'l': | 152 case 'l': |
153 ASSERT((seen & kSawLatin) == 0); | 153 DCHECK_EQ((seen & kSawLatin), 0); |
154 ASSERT(currentShift < 3); | 154 DCHECK_LT(currentShift, 3); |
155 seen |= kSawLatin; | 155 seen |= kSawLatin; |
156 list |= kLatin << (2 * currentShift++); | 156 list |= kLatin << (2 * currentShift++); |
157 break; | 157 break; |
158 case 'h': | 158 case 'h': |
159 ASSERT((seen & kSawHan) == 0); | 159 DCHECK_EQ((seen & kSawHan), 0); |
160 ASSERT(currentShift < 3); | 160 DCHECK_LT(currentShift, 3); |
161 seen |= kSawHan; | 161 seen |= kSawHan; |
162 list |= kHan << (2 * currentShift++); | 162 list |= kHan << (2 * currentShift++); |
163 break; | 163 break; |
164 case 'g': | 164 case 'g': |
165 ASSERT((seen & kSawGreek) == 0); | 165 DCHECK_EQ((seen & kSawGreek), 0); |
166 ASSERT(currentShift < 3); | 166 DCHECK_LT(currentShift, 3); |
167 seen |= kSawGreek; | 167 seen |= kSawGreek; |
168 list |= kGreek << (2 * currentShift++); | 168 list |= kGreek << (2 * currentShift++); |
169 break; | 169 break; |
170 case '>': | 170 case '>': |
171 ASSERT(seen != 0); | 171 DCHECK_NE(seen, 0); |
172 code |= TableLookup(list); | 172 code |= TableLookup(list); |
173 result.append(static_cast<UChar>(kMockCharMin + code)); | 173 result.append(static_cast<UChar>(kMockCharMin + code)); |
174 inSet = false; | 174 inSet = false; |
175 break; | 175 break; |
176 default: | 176 default: |
177 DLOG(ERROR) << "Illegal mock string set char: '" << c << "'"; | 177 DLOG(ERROR) << "Illegal mock string set char: '" << c << "'"; |
178 break; | 178 break; |
179 } | 179 } |
180 continue; | 180 continue; |
181 } | 181 } |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
326 } | 326 } |
327 ASSERT_EQ(expect.size(), runCount); | 327 ASSERT_EQ(expect.size(), runCount); |
328 } | 328 } |
329 }; | 329 }; |
330 | 330 |
331 TEST_F(ScriptRunIteratorTest, Empty) { | 331 TEST_F(ScriptRunIteratorTest, Empty) { |
332 String empty(emptyString16Bit); | 332 String empty(emptyString16Bit); |
333 ScriptRunIterator scriptRunIterator(empty.characters16(), empty.length()); | 333 ScriptRunIterator scriptRunIterator(empty.characters16(), empty.length()); |
334 unsigned limit = 0; | 334 unsigned limit = 0; |
335 UScriptCode code = USCRIPT_INVALID_CODE; | 335 UScriptCode code = USCRIPT_INVALID_CODE; |
336 ASSERT(!scriptRunIterator.consume(limit, code)); | 336 DCHECK(!scriptRunIterator.consume(limit, code)); |
337 ASSERT_EQ(limit, 0u); | 337 ASSERT_EQ(limit, 0u); |
338 ASSERT_EQ(code, USCRIPT_INVALID_CODE); | 338 ASSERT_EQ(code, USCRIPT_INVALID_CODE); |
339 } | 339 } |
340 | 340 |
341 // Some of our compilers cannot initialize a vector from an array yet. | 341 // Some of our compilers cannot initialize a vector from an array yet. |
342 #define DECLARE_RUNSVECTOR(...) \ | 342 #define DECLARE_RUNSVECTOR(...) \ |
343 static const TestRun runsArray[] = __VA_ARGS__; \ | 343 static const TestRun runsArray[] = __VA_ARGS__; \ |
344 Vector<TestRun> runs; \ | 344 Vector<TestRun> runs; \ |
345 runs.append(runsArray, sizeof(runsArray) / sizeof(*runsArray)); | 345 runs.append(runsArray, sizeof(runsArray) / sizeof(*runsArray)); |
346 | 346 |
(...skipping 332 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 |