| OLD | NEW |
| 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 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 } | 85 } |
| 86 | 86 |
| 87 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue* v
alue, bool forVisitedLink) | 87 Color StyleBuilderConverter::convertColor(StyleResolverState& state, CSSValue* v
alue, bool forVisitedLink) |
| 88 { | 88 { |
| 89 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 89 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 90 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, state.style()->color(), forVisitedLink); | 90 return state.document().textLinkColors().colorFromPrimitiveValue(primitiveVa
lue, state.style()->color(), forVisitedLink); |
| 91 } | 91 } |
| 92 | 92 |
| 93 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState
& state, CSSValue* value) | 93 AtomicString StyleBuilderConverter::convertFragmentIdentifier(StyleResolverState
& state, CSSValue* value) |
| 94 { | 94 { |
| 95 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 95 if (value->isURIValue()) |
| 96 if (primitiveValue->isURI()) | 96 return SVGURIReference::fragmentIdentifierFromIRIString(toCSSURIValue(va
lue)->value(), state.element()->treeScope()); |
| 97 return SVGURIReference::fragmentIdentifierFromIRIString(primitiveValue->
getStringValue(), state.element()->treeScope()); | |
| 98 return nullAtom; | 97 return nullAtom; |
| 99 } | 98 } |
| 100 | 99 |
| 101 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue
* value) | 100 LengthBox StyleBuilderConverter::convertClip(StyleResolverState& state, CSSValue
* value) |
| 102 { | 101 { |
| 103 RefPtrWillBeRawPtr<CSSQuadValue> rect = toCSSQuadValue(value); | 102 RefPtrWillBeRawPtr<CSSQuadValue> rect = toCSSQuadValue(value); |
| 104 | 103 |
| 105 return LengthBox(convertLengthOrAuto(state, rect->top()), | 104 return LengthBox(convertLengthOrAuto(state, rect->top()), |
| 106 convertLengthOrAuto(state, rect->right()), | 105 convertLengthOrAuto(state, rect->right()), |
| 107 convertLengthOrAuto(state, rect->bottom()), | 106 convertLengthOrAuto(state, rect->bottom()), |
| (...skipping 15 matching lines...) Expand all Loading... |
| 123 return FontDescription::FantasyFamily; | 122 return FontDescription::FantasyFamily; |
| 124 case CSSValueMonospace: | 123 case CSSValueMonospace: |
| 125 return FontDescription::MonospaceFamily; | 124 return FontDescription::MonospaceFamily; |
| 126 case CSSValueWebkitPictograph: | 125 case CSSValueWebkitPictograph: |
| 127 return FontDescription::PictographFamily; | 126 return FontDescription::PictographFamily; |
| 128 default: | 127 default: |
| 129 return FontDescription::NoFamily; | 128 return FontDescription::NoFamily; |
| 130 } | 129 } |
| 131 } | 130 } |
| 132 | 131 |
| 133 static bool convertFontFamilyName(StyleResolverState& state, CSSPrimitiveValue*
primitiveValue, | 132 static bool convertFontFamilyName(StyleResolverState& state, CSSValue* value, |
| 134 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) | 133 FontDescription::GenericFamilyType& genericFamily, AtomicString& familyName) |
| 135 { | 134 { |
| 136 if (primitiveValue->isCustomIdent()) { | 135 if (value->isCustomIdentValue()) { |
| 137 genericFamily = FontDescription::NoFamily; | 136 genericFamily = FontDescription::NoFamily; |
| 138 familyName = AtomicString(primitiveValue->getStringValue()); | 137 familyName = AtomicString(toCSSCustomIdentValue(value)->value()); |
| 139 } else if (state.document().settings()) { | 138 } else if (state.document().settings()) { |
| 140 genericFamily = convertGenericFamily(primitiveValue->getValueID()); | 139 genericFamily = convertGenericFamily(toCSSPrimitiveValue(value)->getValu
eID()); |
| 141 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); | 140 familyName = state.fontBuilder().genericFontFamilyName(genericFamily); |
| 142 } | 141 } |
| 143 | 142 |
| 144 return !familyName.isEmpty(); | 143 return !familyName.isEmpty(); |
| 145 } | 144 } |
| 146 | 145 |
| 147 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl
eResolverState& state, CSSValue* value) | 146 FontDescription::FamilyDescription StyleBuilderConverter::convertFontFamily(Styl
eResolverState& state, CSSValue* value) |
| 148 { | 147 { |
| 149 ASSERT(value->isValueList()); | 148 ASSERT(value->isValueList()); |
| 150 | 149 |
| 151 FontDescription::FamilyDescription desc(FontDescription::NoFamily); | 150 FontDescription::FamilyDescription desc(FontDescription::NoFamily); |
| 152 FontFamily* currFamily = nullptr; | 151 FontFamily* currFamily = nullptr; |
| 153 | 152 |
| 154 for (auto& family : toCSSValueList(*value)) { | 153 for (auto& family : toCSSValueList(*value)) { |
| 155 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa
mily; | 154 FontDescription::GenericFamilyType genericFamily = FontDescription::NoFa
mily; |
| 156 AtomicString familyName; | 155 AtomicString familyName; |
| 157 | 156 |
| 158 if (!convertFontFamilyName(state, toCSSPrimitiveValue(family.get()), gen
ericFamily, familyName)) | 157 if (!convertFontFamilyName(state, family.get(), genericFamily, familyNam
e)) |
| 159 continue; | 158 continue; |
| 160 | 159 |
| 161 if (!currFamily) { | 160 if (!currFamily) { |
| 162 currFamily = &desc.family; | 161 currFamily = &desc.family; |
| 163 } else { | 162 } else { |
| 164 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create(); | 163 RefPtr<SharedFontFamily> newFamily = SharedFontFamily::create(); |
| 165 currFamily->appendFamily(newFamily); | 164 currFamily->appendFamily(newFamily); |
| 166 currFamily = newFamily.get(); | 165 currFamily = newFamily.get(); |
| 167 } | 166 } |
| 168 | 167 |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 390 } | 389 } |
| 391 } | 390 } |
| 392 | 391 |
| 393 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS
Value* value) | 392 GridPosition StyleBuilderConverter::convertGridPosition(StyleResolverState&, CSS
Value* value) |
| 394 { | 393 { |
| 395 // We accept the specification's grammar: | 394 // We accept the specification's grammar: |
| 396 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust
om-ident> ] ] | <custom-ident> | 395 // 'auto' | [ <integer> || <custom-ident> ] | [ span && [ <integer> || <cust
om-ident> ] ] | <custom-ident> |
| 397 | 396 |
| 398 GridPosition position; | 397 GridPosition position; |
| 399 | 398 |
| 400 if (value->isPrimitiveValue()) { | 399 if (value->isCustomIdentValue()) { |
| 401 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | |
| 402 // We translate <custom-ident> to <string> during parsing as it | 400 // We translate <custom-ident> to <string> during parsing as it |
| 403 // makes handling it more simple. | 401 // makes handling it more simple. |
| 404 if (primitiveValue->isCustomIdent()) { | 402 position.setNamedGridArea(toCSSCustomIdentValue(value)->value()); |
| 405 position.setNamedGridArea(primitiveValue->getStringValue()); | |
| 406 return position; | |
| 407 } | |
| 408 | |
| 409 ASSERT(primitiveValue->getValueID() == CSSValueAuto); | |
| 410 return position; | 403 return position; |
| 411 } | 404 } |
| 412 | 405 |
| 406 if (value->isPrimitiveValue()) { |
| 407 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueAuto); |
| 408 return position; |
| 409 } |
| 410 |
| 413 CSSValueList* values = toCSSValueList(value); | 411 CSSValueList* values = toCSSValueList(value); |
| 414 ASSERT(values->length()); | 412 ASSERT(values->length()); |
| 415 | 413 |
| 416 bool isSpanPosition = false; | 414 bool isSpanPosition = false; |
| 417 // The specification makes the <integer> optional, in which case it default
to '1'. | 415 // The specification makes the <integer> optional, in which case it default
to '1'. |
| 418 int gridLineNumber = 1; | 416 int gridLineNumber = 1; |
| 419 String gridLineName; | 417 String gridLineName; |
| 420 | 418 |
| 421 auto it = values->begin(); | 419 auto it = values->begin(); |
| 422 CSSPrimitiveValue* currentValue = toCSSPrimitiveValue(it->get()); | 420 CSSValue* currentValue = it->get(); |
| 423 if (currentValue->getValueID() == CSSValueSpan) { | 421 if (currentValue->isPrimitiveValue() && toCSSPrimitiveValue(currentValue)->g
etValueID() == CSSValueSpan) { |
| 424 isSpanPosition = true; | 422 isSpanPosition = true; |
| 425 ++it; | 423 ++it; |
| 426 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : nu
llptr; | 424 currentValue = it != values->end() ? it->get() : nullptr; |
| 427 } | 425 } |
| 428 | 426 |
| 429 if (currentValue && currentValue->isNumber()) { | 427 if (currentValue && currentValue->isPrimitiveValue() && toCSSPrimitiveValue(
currentValue)->isNumber()) { |
| 430 gridLineNumber = currentValue->getIntValue(); | 428 gridLineNumber = toCSSPrimitiveValue(currentValue)->getIntValue(); |
| 431 ++it; | 429 ++it; |
| 432 currentValue = it != values->end() ? toCSSPrimitiveValue(it->get()) : nu
llptr; | 430 currentValue = it != values->end() ? it->get() : nullptr; |
| 433 } | 431 } |
| 434 | 432 |
| 435 if (currentValue && currentValue->isCustomIdent()) { | 433 if (currentValue && currentValue->isCustomIdentValue()) { |
| 436 gridLineName = currentValue->getStringValue(); | 434 gridLineName = toCSSCustomIdentValue(currentValue)->value(); |
| 437 ++it; | 435 ++it; |
| 438 } | 436 } |
| 439 | 437 |
| 440 ASSERT(it == values->end()); | 438 ASSERT(it == values->end()); |
| 441 if (isSpanPosition) | 439 if (isSpanPosition) |
| 442 position.setSpanPosition(gridLineNumber, gridLineName); | 440 position.setSpanPosition(gridLineNumber, gridLineName); |
| 443 else | 441 else |
| 444 position.setExplicitPosition(gridLineNumber, gridLineName); | 442 position.setExplicitPosition(gridLineNumber, gridLineName); |
| 445 | 443 |
| 446 return position; | 444 return position; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 462 { | 460 { |
| 463 if (value->isPrimitiveValue()) { | 461 if (value->isPrimitiveValue()) { |
| 464 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); | 462 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); |
| 465 return; | 463 return; |
| 466 } | 464 } |
| 467 | 465 |
| 468 size_t currentNamedGridLine = 0; | 466 size_t currentNamedGridLine = 0; |
| 469 for (auto& currValue : *toCSSValueList(value)) { | 467 for (auto& currValue : *toCSSValueList(value)) { |
| 470 if (currValue->isGridLineNamesValue()) { | 468 if (currValue->isGridLineNamesValue()) { |
| 471 for (auto& namedGridLineValue : toCSSGridLineNamesValue(*currValue))
{ | 469 for (auto& namedGridLineValue : toCSSGridLineNamesValue(*currValue))
{ |
| 472 ASSERT(toCSSPrimitiveValue(namedGridLineValue.get())->isCustomId
ent()); | 470 String namedGridLine = toCSSCustomIdentValue(namedGridLineValue.
get())->value(); |
| 473 String namedGridLine = toCSSPrimitiveValue(namedGridLineValue.ge
t())->getStringValue(); | |
| 474 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr
idLine, Vector<size_t>()); | 471 NamedGridLinesMap::AddResult result = namedGridLines.add(namedGr
idLine, Vector<size_t>()); |
| 475 result.storedValue->value.append(currentNamedGridLine); | 472 result.storedValue->value.append(currentNamedGridLine); |
| 476 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere
dNamedGridLines.add(currentNamedGridLine, Vector<String>()); | 473 OrderedNamedGridLines::AddResult orderedInsertionResult = ordere
dNamedGridLines.add(currentNamedGridLine, Vector<String>()); |
| 477 orderedInsertionResult.storedValue->value.append(namedGridLine); | 474 orderedInsertionResult.storedValue->value.append(namedGridLine); |
| 478 } | 475 } |
| 479 continue; | 476 continue; |
| 480 } | 477 } |
| 481 | 478 |
| 482 ++currentNamedGridLine; | 479 ++currentNamedGridLine; |
| 483 trackSizes.append(convertGridTrackSize(state, currValue.get())); | 480 trackSizes.append(convertGridTrackSize(state, currValue.get())); |
| (...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 724 } | 721 } |
| 725 | 722 |
| 726 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue* value) | 723 PassRefPtr<QuotesData> StyleBuilderConverter::convertQuotes(StyleResolverState&,
CSSValue* value) |
| 727 { | 724 { |
| 728 if (value->isValueList()) { | 725 if (value->isValueList()) { |
| 729 CSSValueList* list = toCSSValueList(value); | 726 CSSValueList* list = toCSSValueList(value); |
| 730 RefPtr<QuotesData> quotes = QuotesData::create(); | 727 RefPtr<QuotesData> quotes = QuotesData::create(); |
| 731 for (size_t i = 0; i < list->length(); i += 2) { | 728 for (size_t i = 0; i < list->length(); i += 2) { |
| 732 CSSValue* first = list->item(i); | 729 CSSValue* first = list->item(i); |
| 733 CSSValue* second = list->item(i + 1); | 730 CSSValue* second = list->item(i + 1); |
| 734 ASSERT(toCSSPrimitiveValue(first)->isString()); | 731 String startQuote = toCSSStringValue(first)->value(); |
| 735 ASSERT(toCSSPrimitiveValue(second)->isString()); | 732 String endQuote = toCSSStringValue(second)->value(); |
| 736 String startQuote = toCSSPrimitiveValue(first)->getStringValue(); | |
| 737 String endQuote = toCSSPrimitiveValue(second)->getStringValue(); | |
| 738 quotes->addPair(std::make_pair(startQuote, endQuote)); | 733 quotes->addPair(std::make_pair(startQuote, endQuote)); |
| 739 } | 734 } |
| 740 return quotes.release(); | 735 return quotes.release(); |
| 741 } | 736 } |
| 742 ASSERT(value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID()
== CSSValueNone); | 737 ASSERT(value->isPrimitiveValue() && toCSSPrimitiveValue(value)->getValueID()
== CSSValueNone); |
| 743 return QuotesData::create(); | 738 return QuotesData::create(); |
| 744 } | 739 } |
| 745 | 740 |
| 746 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue* value) | 741 LengthSize StyleBuilderConverter::convertRadius(StyleResolverState& state, CSSVa
lue* value) |
| 747 { | 742 { |
| (...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 948 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale
3D); | 943 return ScaleTransformOperation::create(sx, sy, sz, TransformOperation::Scale
3D); |
| 949 } | 944 } |
| 950 | 945 |
| 951 RespectImageOrientationEnum StyleBuilderConverter::convertImageOrientation(Style
ResolverState& state, CSSValue* value) | 946 RespectImageOrientationEnum StyleBuilderConverter::convertImageOrientation(Style
ResolverState& state, CSSValue* value) |
| 952 { | 947 { |
| 953 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); | 948 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); |
| 954 return primitiveValue->getValueID() == CSSValueFromImage ? RespectImageOrien
tation : DoNotRespectImageOrientation; | 949 return primitiveValue->getValueID() == CSSValueFromImage ? RespectImageOrien
tation : DoNotRespectImageOrientation; |
| 955 } | 950 } |
| 956 | 951 |
| 957 } // namespace blink | 952 } // namespace blink |
| OLD | NEW |