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

Side by Side Diff: third_party/WebKit/Source/core/css/resolver/StyleBuilderConverter.cpp

Issue 1306823004: Split out String, URI and CustomIdent from CSSPrimitiveValue (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@split_out_attr_values
Patch Set: Rebase Created 5 years, 2 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * * Redistributions of source code must retain the above copyright 4 * * Redistributions of source code must retain the above copyright
5 * notice, this list of conditions and the following disclaimer. 5 * notice, this list of conditions and the following disclaimer.
6 * * Redistributions in binary form must reproduce the above 6 * * Redistributions in binary form must reproduce the above
7 * copyright notice, this list of conditions and the following disclaimer 7 * copyright notice, this list of conditions and the following disclaimer
8 * in the documentation and/or other materials provided with the 8 * in the documentation and/or other materials provided with the
9 * distribution. 9 * distribution.
10 * * Neither the name of Google Inc. nor the names of its 10 * * Neither the name of Google Inc. nor the names of its
(...skipping 19 matching lines...) Expand all
30 #include "core/css/BasicShapeFunctions.h" 30 #include "core/css/BasicShapeFunctions.h"
31 #include "core/css/CSSBasicShapeValues.h" 31 #include "core/css/CSSBasicShapeValues.h"
32 #include "core/css/CSSContentDistributionValue.h" 32 #include "core/css/CSSContentDistributionValue.h"
33 #include "core/css/CSSFontFeatureValue.h" 33 #include "core/css/CSSFontFeatureValue.h"
34 #include "core/css/CSSFunctionValue.h" 34 #include "core/css/CSSFunctionValue.h"
35 #include "core/css/CSSGridLineNamesValue.h" 35 #include "core/css/CSSGridLineNamesValue.h"
36 #include "core/css/CSSPrimitiveValueMappings.h" 36 #include "core/css/CSSPrimitiveValueMappings.h"
37 #include "core/css/CSSQuadValue.h" 37 #include "core/css/CSSQuadValue.h"
38 #include "core/css/CSSReflectValue.h" 38 #include "core/css/CSSReflectValue.h"
39 #include "core/css/CSSShadowValue.h" 39 #include "core/css/CSSShadowValue.h"
40 #include "core/css/CSSStringValue.h"
41 #include "core/css/CSSURIValue.h"
40 #include "core/css/CSSValuePair.h" 42 #include "core/css/CSSValuePair.h"
41 #include "core/svg/SVGElement.h" 43 #include "core/svg/SVGElement.h"
42 #include "core/svg/SVGURIReference.h" 44 #include "core/svg/SVGURIReference.h"
43 #include "platform/transforms/RotateTransformOperation.h" 45 #include "platform/transforms/RotateTransformOperation.h"
44 #include "platform/transforms/ScaleTransformOperation.h" 46 #include "platform/transforms/ScaleTransformOperation.h"
45 #include "platform/transforms/TranslateTransformOperation.h" 47 #include "platform/transforms/TranslateTransformOperation.h"
46 48
47 namespace blink { 49 namespace blink {
48 50
49 namespace { 51 namespace {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
88 } 90 }
89 91
90 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue* v alue, bool forVisitedLink) 92 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue* v alue, bool forVisitedLink)
91 { 93 {
92 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 94 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
93 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink); 95 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa lue, state.style()->color(), forVisitedLink);
94 } 96 }
95 97
96 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue* value) 98 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState & state, CSSValue* value)
97 { 99 {
98 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 100 if (value->isURIValue())
99 if (primitiveValue->isURI()) 101 return SVGURIReference::fragmentIdentifierFromIRIString(toCSSURIValue(va lue)->value(), state.element()->treeScope());
100 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue-> getStringValue(), state.element()->treeScope());
101 return nullAtom; 102 return nullAtom;
102 } 103 }
103 104
104 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue * value) 105 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue * value)
105 { 106 {
106 RefPtrWillBeRawPtr<CSSQuadValue> rect = toCSSQuadValue(value); 107 RefPtrWillBeRawPtr<CSSQuadValue> rect = toCSSQuadValue(value);
107 108
108 return LengthBox(convertLengthOrAuto(state, rect->top()), 109 return LengthBox(convertLengthOrAuto(state, rect->top()),
109 convertLengthOrAuto(state, rect->right()), 110 convertLengthOrAuto(state, rect->right()),
110 convertLengthOrAuto(state, rect->bottom()), 111 convertLengthOrAuto(state, rect->bottom()),
(...skipping 15 matching lines...) Expand all
126 return FontDescription::FantasyFamily; 127 return FontDescription::FantasyFamily;
127 case CSSValueMonospace: 128 case CSSValueMonospace:
128 return FontDescription::MonospaceFamily; 129 return FontDescription::MonospaceFamily;
129 case CSSValueWebkitPictograph: 130 case CSSValueWebkitPictograph:
130 return FontDescription::PictographFamily; 131 return FontDescription::PictographFamily;
131 default: 132 default:
132 return FontDescription::NoFamily; 133 return FontDescription::NoFamily;
133 } 134 }
134 } 135 }
135 136
136 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue* primitiveValue, 137 static bool convertFontFamilyName(StyleResolverState& state, CSSValue& value,
137 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) 138 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName)
138 { 139 {
139 if (primitiveValue->isCustomIdent()) { 140 if (value.isCustomIdentValue()) {
140 genericFamily = FontDescription::NoFamily; 141 genericFamily = FontDescription::NoFamily;
141 familyName = AtomicString(primitiveValue->getStringValue()); 142 familyName = AtomicString(toCSSCustomIdentValue(value).value());
142 } else if (state.document().settings()) { 143 } else if (state.document().settings()) {
143 genericFamily = convertGenericFamily(primitiveValue->getValueID()); 144 genericFamily = convertGenericFamily(toCSSPrimitiveValue(value).getValue ID());
144 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); 145 familyName = state.fontBuilder().genericFontFamilyName(genericFamily);
145 } 146 }
146 147
147 return !familyName.isEmpty(); 148 return !familyName.isEmpty();
148 } 149 }
149 150
150 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl eResolverState& state, CSSValue* value) 151 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl eResolverState& state, CSSValue* value)
151 { 152 {
152 ASSERT(value->isValueList()); 153 ASSERT(value->isValueList());
153 154
154 FontDescription::FamilyDescription desc(FontDescription::NoFamily); 155 FontDescription::FamilyDescription desc(FontDescription::NoFamily);
155 FontFamily* currFamily = nullptr; 156 FontFamily* currFamily = nullptr;
156 157
157 for (auto& family : toCSSValueList(*value)) { 158 for (auto& family : toCSSValueList(*value)) {
158 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa mily; 159 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa mily;
159 AtomicString familyName; 160 AtomicString familyName;
160 161
161 if (!convertFontFamilyName(state, toCSSPrimitiveValue(family.get()), gen ericFamily, familyName)) 162 if (!convertFontFamilyName(state, *family, genericFamily, familyName))
162 continue; 163 continue;
163 164
164 if (!currFamily) { 165 if (!currFamily) {
165 currFamily = &desc.family; 166 currFamily = &desc.family;
166 } else { 167 } else {
167 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create(); 168 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create();
168 currFamily->appendFamily(newFamily); 169 currFamily->appendFamily(newFamily);
169 currFamily = newFamily.get(); 170 currFamily = newFamily.get();
170 } 171 }
171 172
(...skipping 239 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 } 412 }
412 } 413 }
413 414
414 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value* value) 415 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS Value* value)
415 { 416 {
416 // We accept the specification's grammar: 417 // We accept the specification's grammar:
417 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident> 418 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust om-ident> ] ] | <custom-ident>
418 419
419 GridPosition position; 420 GridPosition position;
420 421
421 if (value->isPrimitiveValue()) { 422 if (value->isCustomIdentValue()) {
422 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
423 // We translate <custom-ident> to <string> during parsing as it 423 // We translate <custom-ident> to <string> during parsing as it
424 // makes handling it more simple. 424 // makes handling it more simple.
425 if (primitiveValue->isCustomIdent()) { 425 position.setNamedGridArea(toCSSCustomIdentValue(value)->value());
426 position.setNamedGridArea(primitiveValue->getStringValue());
427 return position;
428 }
429
430 ASSERT(primitiveValue->getValueID() == CSSValueAuto);
431 return position; 426 return position;
432 } 427 }
433 428
429 if (value->isPrimitiveValue()) {
430 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueAuto);
431 return position;
432 }
433
434 CSSValueList* values = toCSSValueList(value); 434 CSSValueList* values = toCSSValueList(value);
435 ASSERT(values->length()); 435 ASSERT(values->length());
436 436
437 bool isSpanPosition = false; 437 bool isSpanPosition = false;
438 // The specification makes the <integer> optional, in which case it default to '1'. 438 // The specification makes the <integer> optional, in which case it default to '1'.
439 int gridLineNumber = 1; 439 int gridLineNumber = 1;
440 String gridLineName; 440 String gridLineName;
441 441
442 auto it = values->begin(); 442 auto it = values->begin();
443 CSSPrimitiveValue* currentValue = toCSSPrimitiveValue(it->get()); 443 CSSValue* currentValue = it->get();
444 if (currentValue->getValueID() == CSSValueSpan) { 444 if (currentValue->isPrimitiveValue() && toCSSPrimitiveValue(currentValue)->g etValueID() == CSSValueSpan) {
445 isSpanPosition = true; 445 isSpanPosition = true;
446 ++it; 446 ++it;
447 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : nu llptr; 447 currentValue = it != values->end() ? it->get() : nullptr;
448 } 448 }
449 449
450 if (currentValue && currentValue->isNumber()) { 450 if (currentValue && currentValue->isPrimitiveValue() && toCSSPrimitiveValue( currentValue)->isNumber()) {
451 gridLineNumber = currentValue->getIntValue(); 451 gridLineNumber = toCSSPrimitiveValue(currentValue)->getIntValue();
452 ++it; 452 ++it;
453 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : nu llptr; 453 currentValue = it != values->end() ? it->get() : nullptr;
454 } 454 }
455 455
456 if (currentValue && currentValue->isCustomIdent()) { 456 if (currentValue && currentValue->isCustomIdentValue()) {
457 gridLineName = currentValue->getStringValue(); 457 gridLineName = toCSSCustomIdentValue(currentValue)->value();
458 ++it; 458 ++it;
459 } 459 }
460 460
461 ASSERT(it == values->end()); 461 ASSERT(it == values->end());
462 if (isSpanPosition) 462 if (isSpanPosition)
463 position.setSpanPosition(gridLineNumber, gridLineName); 463 position.setSpanPosition(gridLineNumber, gridLineName);
464 else 464 else
465 position.setExplicitPosition(gridLineNumber, gridLineName); 465 position.setExplicitPosition(gridLineNumber, gridLineName);
466 466
467 return position; 467 return position;
(...skipping 15 matching lines...) Expand all
483 { 483 {
484 if (value->isPrimitiveValue()) { 484 if (value->isPrimitiveValue()) {
485 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 485 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone);
486 return; 486 return;
487 } 487 }
488 488
489 size_t currentNamedGridLine = 0; 489 size_t currentNamedGridLine = 0;
490 for (auto& currValue : *toCSSValueList(value)) { 490 for (auto& currValue : *toCSSValueList(value)) {
491 if (currValue->isGridLineNamesValue()) { 491 if (currValue->isGridLineNamesValue()) {
492 for (auto& namedGridLineValue : toCSSGridLineNamesValue(*currValue)) { 492 for (auto& namedGridLineValue : toCSSGridLineNamesValue(*currValue)) {
493 ASSERT(toCSSPrimitiveValue(namedGridLineValue.get())->isCustomId ent()); 493 String namedGridLine = toCSSCustomIdentValue(*namedGridLineValue ).value();
494 String namedGridLine = toCSSPrimitiveValue(namedGridLineValue.ge t())->getStringValue();
495 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr idLine, Vector<size_t>()); 494 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr idLine, Vector<size_t>());
496 result.storedValue->value.append(currentNamedGridLine); 495 result.storedValue->value.append(currentNamedGridLine);
497 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere dNamedGridLines.add(currentNamedGridLine, Vector<String>()); 496 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere dNamedGridLines.add(currentNamedGridLine, Vector<String>());
498 orderedInsertionResult.storedValue->value.append(namedGridLine); 497 orderedInsertionResult.storedValue->value.append(namedGridLine);
499 } 498 }
500 continue; 499 continue;
501 } 500 }
502 501
503 ++currentNamedGridLine; 502 ++currentNamedGridLine;
504 trackSizes.append(convertGridTrackSize(state, currValue.get())); 503 trackSizes.append(convertGridTrackSize(state, currValue.get()));
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
743 length.setQuirk(toCSSPrimitiveValue(value)->isQuirkyEms()); 742 length.setQuirk(toCSSPrimitiveValue(value)->isQuirkyEms());
744 return length; 743 return length;
745 } 744 }
746 745
747 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&, CSSValue* value) 746 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&, CSSValue* value)
748 { 747 {
749 if (value->isValueList()) { 748 if (value->isValueList()) {
750 CSSValueList* list = toCSSValueList(value); 749 CSSValueList* list = toCSSValueList(value);
751 RefPtr<QuotesData> quotes = QuotesData::create(); 750 RefPtr<QuotesData> quotes = QuotesData::create();
752 for (size_t i = 0; i < list->length(); i += 2) { 751 for (size_t i = 0; i < list->length(); i += 2) {
753 CSSValue* first = list->item(i); 752 String startQuote = toCSSStringValue(list->item(i))->value();
754 CSSValue* second = list->item(i + 1); 753 String endQuote = toCSSStringValue(list->item(i + 1))->value();
755 ASSERT(toCSSPrimitiveValue(first)->isString());
756 ASSERT(toCSSPrimitiveValue(second)->isString());
757 String startQuote = toCSSPrimitiveValue(first)->getStringValue();
758 String endQuote = toCSSPrimitiveValue(second)->getStringValue();
759 quotes->addPair(std::make_pair(startQuote, endQuote)); 754 quotes->addPair(std::make_pair(startQuote, endQuote));
760 } 755 }
761 return quotes.release(); 756 return quotes.release();
762 } 757 }
763 ASSERT(value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 758 ASSERT(value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID() == CSSValueNone);
764 return QuotesData::create(); 759 return QuotesData::create();
765 } 760 }
766 761
767 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue* value) 762 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa lue* value)
768 { 763 {
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after
970 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale 3D); 965 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale 3D);
971 } 966 }
972 967
973 RespectImageOrientationEnum StyleBuilderConverter::convertImageOrientation(Style ResolverState& state, CSSValue* value) 968 RespectImageOrientationEnum StyleBuilderConverter::convertImageOrientation(Style ResolverState& state, CSSValue* value)
974 { 969 {
975 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 970 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
976 return primitiveValue->getValueID() == CSSValueFromImage ? RespectImageOrien tation : DoNotRespectImageOrientation; 971 return primitiveValue->getValueID() == CSSValueFromImage ? RespectImageOrien tation : DoNotRespectImageOrientation;
977 } 972 }
978 973
979 } // namespace blink 974 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698