Skip to content

Commit

Permalink
[leading-trim] Add support for parsing "text-edge" CSS property
Browse files Browse the repository at this point in the history
https://bugs.webkit.org/show_bug.cgi?id=248448

Reviewed by Antti Koivisto.

This patch add support for parsing "text-edge" (https://www.w3.org/TR/css-inline-3/#text-edges). This property is behind the "CSS leading-trim" run-time flag which is off by default.
(will WPTify the test cases soon after the expected behavior is confirmed -not so much about parsing, but more about how they interact with leading-trim.)

* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/css/CSSPrimitiveValueMappings.h:
(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator TextEdge const):
* Source/WebCore/css/CSSProperties.json:
* Source/WebCore/css/CSSValueKeywords.in:
* Source/WebCore/css/ComputedStyleExtractor.cpp:
(WebCore::valueForTextEdge):
(WebCore::ComputedStyleExtractor::valueForPropertyInStyle):
* Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp:
(WebCore::CSSPropertyParserHelpers::consumeTextEdge):
* Source/WebCore/css/parser/CSSPropertyParserHelpers.h:
* Source/WebCore/rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::textEdge const):
(WebCore::RenderStyle::setTextEdge):
(WebCore::RenderStyle::initialTextEdge):
* Source/WebCore/rendering/style/RenderStyle.h:
* Source/WebCore/rendering/style/RenderStyleConstants.cpp:
(WebCore::operator<<):
* Source/WebCore/rendering/style/RenderStyleConstants.h:
* Source/WebCore/rendering/style/StyleRareInheritedData.cpp:
(WebCore::StyleRareInheritedData::StyleRareInheritedData):
(WebCore::StyleRareInheritedData::operator== const):
* Source/WebCore/rendering/style/StyleRareInheritedData.h:
* Source/WebCore/rendering/style/StyleTextEdge.h: Added.
(WebCore::operator==):
(WebCore::operator!=):
* Source/WebCore/style/StyleBuilderConverter.h:
(WebCore::Style::BuilderConverter::convertTextEdge):

Canonical link: https://commits.webkit.org/257233@main
  • Loading branch information
alanbaradlay committed Dec 1, 2022
1 parent d3ed347 commit 5cecbfb
Show file tree
Hide file tree
Showing 21 changed files with 387 additions and 1 deletion.
51 changes: 51 additions & 0 deletions LayoutTests/fast/text/text-edge-property-parsing-expected.txt
@@ -0,0 +1,51 @@
Test parsing of the CSS text-edge property.

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS test("text-edge: leading") is "leading"
PASS test("text-edge: text") is "text"
PASS test("text-edge: cap") is "cap"
PASS test("text-edge: ex") is "ex"
PASS test("text-edge: ideographic") is "ideographic"
PASS test("text-edge: ideographic-ink") is "ideographic-ink"
PASS test("text-edge: alphabetic") is ""
PASS test("text-edge: text text") is "text text"
PASS test("text-edge: text alphabetic") is "text alphabetic"
PASS test("text-edge: text ideographic") is "text ideographic"
PASS test("text-edge: text ideographic-ink") is "text ideographic-ink"
PASS test("text-edge: cap text") is "cap text"
PASS test("text-edge: cap alphabetic") is "cap alphabetic"
PASS test("text-edge: cap ideographic") is "cap ideographic"
PASS test("text-edge: cap ideographic-ink") is "cap ideographic-ink"
PASS test("text-edge: ex text") is "ex text"
PASS test("text-edge: ex alphabetic") is "ex alphabetic"
PASS test("text-edge: ex ideographic") is "ex ideographic"
PASS test("text-edge: ex ideographic-ink") is "ex ideographic-ink"
PASS test("text-edge: ideographic text") is "ideographic text"
PASS test("text-edge: ideographic alphabetic") is "ideographic alphabetic"
PASS test("text-edge: ideographic ideographic") is "ideographic ideographic"
PASS test("text-edge: ideographic ideographic-ink") is "ideographic ideographic-ink"
PASS test("text-edge: ideographic-ink text") is "ideographic-ink text"
PASS test("text-edge: ideographic-ink alphabetic") is "ideographic-ink alphabetic"
PASS test("text-edge: ideographic-ink ideographic") is "ideographic-ink ideographic"
PASS test("text-edge: ideographic-ink ideographic-ink") is "ideographic-ink ideographic-ink"
PASS test("text-edge: leading leading") is ""
PASS test("text-edge: leading text") is ""
PASS test("text-edge: leading cap") is ""
PASS test("text-edge: leading ex") is ""
PASS test("text-edge: leading ideographic") is ""
PASS test("text-edge: leading ideographic-ink") is ""
PASS test("text-edge: text leading") is ""
PASS test("text-edge: cap leading") is ""
PASS test("text-edge: ex leading") is ""
PASS test("text-edge: ideographic leading") is ""
PASS test("text-edge: ideographic-ink leading") is ""
PASS test("text-edge: text cap") is ""
PASS test("text-edge: text ex") is ""
PASS test("text-edge: alphabetic") is ""
PASS test("text-edge: alphabetic text") is ""
PASS successfullyParsed is true

TEST COMPLETE

71 changes: 71 additions & 0 deletions LayoutTests/fast/text/text-edge-property-parsing.html
@@ -0,0 +1,71 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<html>
<head>
<script src="../../resources/js-test-pre.js"></script>
</head>
<body>
<script>
description('Test parsing of the CSS text-edge property.');

function test(declaration) {
var div = document.createElement("div");
div.setAttribute("style", declaration);
return div.style.textEdge;
}

shouldBeEqualToString('test("text-edge: leading")', "leading");

shouldBeEqualToString('test("text-edge: text")', "text");
shouldBeEqualToString('test("text-edge: cap")', "cap");
shouldBeEqualToString('test("text-edge: ex")', "ex");
shouldBeEqualToString('test("text-edge: ideographic")', "ideographic");
shouldBeEqualToString('test("text-edge: ideographic-ink")', "ideographic-ink");
shouldBeEqualToString('test("text-edge: alphabetic")', "");

shouldBeEqualToString('test("text-edge: text text")', "text text");
shouldBeEqualToString('test("text-edge: text alphabetic")', "text alphabetic");
shouldBeEqualToString('test("text-edge: text ideographic")', "text ideographic");
shouldBeEqualToString('test("text-edge: text ideographic-ink")', "text ideographic-ink");

shouldBeEqualToString('test("text-edge: cap text")', "cap text");
shouldBeEqualToString('test("text-edge: cap alphabetic")', "cap alphabetic");
shouldBeEqualToString('test("text-edge: cap ideographic")', "cap ideographic");
shouldBeEqualToString('test("text-edge: cap ideographic-ink")', "cap ideographic-ink");

shouldBeEqualToString('test("text-edge: ex text")', "ex text");
shouldBeEqualToString('test("text-edge: ex alphabetic")', "ex alphabetic");
shouldBeEqualToString('test("text-edge: ex ideographic")', "ex ideographic");
shouldBeEqualToString('test("text-edge: ex ideographic-ink")', "ex ideographic-ink");

shouldBeEqualToString('test("text-edge: ideographic text")', "ideographic text");
shouldBeEqualToString('test("text-edge: ideographic alphabetic")', "ideographic alphabetic");
shouldBeEqualToString('test("text-edge: ideographic ideographic")', "ideographic ideographic");
shouldBeEqualToString('test("text-edge: ideographic ideographic-ink")', "ideographic ideographic-ink");

shouldBeEqualToString('test("text-edge: ideographic-ink text")', "ideographic-ink text");
shouldBeEqualToString('test("text-edge: ideographic-ink alphabetic")', "ideographic-ink alphabetic");
shouldBeEqualToString('test("text-edge: ideographic-ink ideographic")', "ideographic-ink ideographic");
shouldBeEqualToString('test("text-edge: ideographic-ink ideographic-ink")', "ideographic-ink ideographic-ink");

shouldBeEqualToString('test("text-edge: leading leading")', "");
shouldBeEqualToString('test("text-edge: leading text")', "");
shouldBeEqualToString('test("text-edge: leading cap")', "");
shouldBeEqualToString('test("text-edge: leading ex")', "");
shouldBeEqualToString('test("text-edge: leading ideographic")', "");
shouldBeEqualToString('test("text-edge: leading ideographic-ink")', "");

shouldBeEqualToString('test("text-edge: text leading")', "");
shouldBeEqualToString('test("text-edge: cap leading")', "");
shouldBeEqualToString('test("text-edge: ex leading")', "");
shouldBeEqualToString('test("text-edge: ideographic leading")', "");
shouldBeEqualToString('test("text-edge: ideographic-ink leading")', "");

shouldBeEqualToString('test("text-edge: text cap")', "");
shouldBeEqualToString('test("text-edge: text ex")', "");
shouldBeEqualToString('test("text-edge: alphabetic")', "");
shouldBeEqualToString('test("text-edge: alphabetic text")', "");

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
Expand Up @@ -303,6 +303,7 @@ PASS text-decoration-line
PASS text-decoration-skip-ink
PASS text-decoration-style
PASS text-decoration-thickness
PASS text-edge
PASS text-emphasis-color
PASS text-emphasis-position
PASS text-emphasis-style
Expand Down
@@ -1,6 +1,6 @@

FAIL All properties can serialize 'initial' assert_array_equals: lengths differ, expected array [] length 0, got [["grid", ""], ["grid-area", "initial / initial / initial / initial"], ["grid-column", "initial / initial"], ["grid-row", "initial / initial"], ["offset", ""]] length 5
FAIL All properties (except 'all') can serialize their initial value (computed) assert_array_equals: lengths differ, expected array [] length 0, got [["-webkit-line-clamp", "none"], ["-webkit-mask", ""], ["-webkit-perspective-origin-x", ""], ["-webkit-perspective-origin-y", ""], ["-webkit-text-stroke", ""], ["-webkit-transform-origin-x", ""], ["-webkit-transform-origin-y", ""], ["-webkit-transform-origin-z", ""], ["grid", "none / none / none / row / auto / auto"], ["grid-template", "none / none / none"], ["marker", ""], ["orphans", "auto"], ["page", ""], ["perspective-origin-x", ""], ["perspective-origin-y", ""], ["size", ""], ["transform-origin-x", ""], ["transform-origin-y", ""], ["transform-origin-z", ""], ["widows", "auto"]] length 20
FAIL All properties (except 'all') can serialize their initial value (computed) assert_array_equals: lengths differ, expected array [] length 0, got [["-webkit-line-clamp", "none"], ["-webkit-mask", ""], ["-webkit-perspective-origin-x", ""], ["-webkit-perspective-origin-y", ""], ["-webkit-text-stroke", ""], ["-webkit-transform-origin-x", ""], ["-webkit-transform-origin-y", ""], ["-webkit-transform-origin-z", ""], ["grid", "none / none / none / row / auto / auto"], ["grid-template", "none / none / none"], ["marker", ""], ["orphans", "auto"], ["page", ""], ["perspective-origin-x", ""], ["perspective-origin-y", ""], ["size", ""], ["text-edge", "leading leading"], ["transform-origin-x", ""], ["transform-origin-y", ""], ["transform-origin-z", ""], ["widows", "auto"]] length 21
PASS All properties (except 'all') can serialize their initial value (specified)
FAIL All shorthands can serialize their longhands set to 'initial' assert_array_equals: lengths differ, expected array [] length 0, got [["all", ""], ["grid", ""], ["grid-area", "initial / initial / initial / initial"], ["grid-column", "initial / initial"], ["grid-row", "initial / initial"], ["offset", ""]] length 6
PASS All shorthands (except 'all') can serialize their longhands set to their initial value
Expand Down
Expand Up @@ -303,6 +303,7 @@ PASS text-decoration-line
PASS text-decoration-skip-ink
PASS text-decoration-style
PASS text-decoration-thickness
PASS text-edge
PASS text-emphasis-color
PASS text-emphasis-position
PASS text-emphasis-style
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/Headers.cmake
Expand Up @@ -2050,6 +2050,7 @@ set(WebCore_PRIVATE_FRAMEWORK_HEADERS
rendering/style/StyleScrollSnapPoints.h
rendering/style/StyleSelfAlignmentData.h
rendering/style/StyleSurroundData.h
rendering/style/StyleTextEdge.h
rendering/style/StyleTransformData.h
rendering/style/StyleVisualData.h
rendering/style/TextDecorationThickness.h
Expand Down
4 changes: 4 additions & 0 deletions Source/WebCore/WebCore.xcodeproj/project.pbxproj
Expand Up @@ -4888,6 +4888,7 @@
DD17C082286EC57400D60B58 /* build in Copy PDF.js */ = {isa = PBXBuildFile; fileRef = DD17C07C286EC51900D60B58 /* build */; };
DD17C083286EC57700D60B58 /* LICENSE in Copy PDF.js */ = {isa = PBXBuildFile; fileRef = DD17C080286EC51B00D60B58 /* LICENSE */; };
DD17C084286EC57A00D60B58 /* web in Copy PDF.js */ = {isa = PBXBuildFile; fileRef = DD17C07E286EC51A00D60B58 /* web */; };
DD1C779029354C77003BD79B /* StyleTextEdge.h in Headers */ = {isa = PBXBuildFile; fileRef = DD1C778F29354C75003BD79B /* StyleTextEdge.h */; settings = {ATTRIBUTES = (Private, ); }; };
DD763BB20992C2C900740B8E /* libxml2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DD763BB10992C2C900740B8E /* libxml2.dylib */; };
DD7CDF250A23CF9800069928 /* CSSUnknownRule.h in Headers */ = {isa = PBXBuildFile; fileRef = A80E6CCE0A1989CA007FB8C5 /* CSSUnknownRule.h */; settings = {ATTRIBUTES = (Private, ); }; };
DD8A30B4291DFC8F00AD537C /* BlockLayoutState.h in Headers */ = {isa = PBXBuildFile; fileRef = DD8A30B3291DFC8F00AD537C /* BlockLayoutState.h */; settings = {ATTRIBUTES = (Private, ); }; };
Expand Down Expand Up @@ -17142,6 +17143,7 @@
DD17C07C286EC51900D60B58 /* build */ = {isa = PBXFileReference; lastKnownFileType = folder; name = build; path = ../../ThirdParty/pdfjs/build; sourceTree = "<group>"; };
DD17C07E286EC51A00D60B58 /* web */ = {isa = PBXFileReference; lastKnownFileType = folder; name = web; path = ../../ThirdParty/pdfjs/web; sourceTree = "<group>"; };
DD17C080286EC51B00D60B58 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE; path = ../../ThirdParty/pdfjs/LICENSE; sourceTree = "<group>"; };
DD1C778F29354C75003BD79B /* StyleTextEdge.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleTextEdge.h; sourceTree = "<group>"; };
DD763BB10992C2C900740B8E /* libxml2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libxml2.dylib; path = /usr/lib/libxml2.dylib; sourceTree = "<absolute>"; };
DD8A30B3291DFC8F00AD537C /* BlockLayoutState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BlockLayoutState.h; sourceTree = "<group>"; };
DDB04F37278E5527008D3678 /* libWTF.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libWTF.a; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -30619,6 +30621,7 @@
9D63800F1AF16E160031A15C /* StyleSelfAlignmentData.h */,
BC5EB5E60E81BFEF00B25965 /* StyleSurroundData.cpp */,
BC5EB5E40E81BF6D00B25965 /* StyleSurroundData.h */,
DD1C778F29354C75003BD79B /* StyleTextEdge.h */,
BC5EB80D0E81F2CE00B25965 /* StyleTransformData.cpp */,
BC5EB80E0E81F2CE00B25965 /* StyleTransformData.h */,
BC5EB6970E81DA6300B25965 /* StyleVisualData.cpp */,
Expand Down Expand Up @@ -38831,6 +38834,7 @@
E4F9EEF3156DA00700D23E7E /* StyleSheetContents.h in Headers */,
A8EA800A0A19516E00A8EF5F /* StyleSheetList.h in Headers */,
BC5EB5E50E81BF6D00B25965 /* StyleSurroundData.h in Headers */,
DD1C779029354C77003BD79B /* StyleTextEdge.h in Headers */,
BC5EB8100E81F2CE00B25965 /* StyleTransformData.h in Headers */,
E4DEAA1817A93DC3000E0430 /* StyleTreeResolver.h in Headers */,
E42E76DC1C7AF77600E3614D /* StyleUpdate.h in Headers */,
Expand Down
53 changes: 53 additions & 0 deletions Source/WebCore/css/CSSPrimitiveValueMappings.h
Expand Up @@ -5227,6 +5227,59 @@ template<> inline CSSPrimitiveValue::operator ScrollSnapStop() const
}
}

template<> inline CSSPrimitiveValue::CSSPrimitiveValue(TextEdgeType textEdgeType)
: CSSValue(PrimitiveClass)
{
setPrimitiveUnitType(CSSUnitType::CSS_VALUE_ID);
switch (textEdgeType) {
case TextEdgeType::Leading:
m_value.valueID = CSSValueLeading;
break;
case TextEdgeType::Text:
m_value.valueID = CSSValueText;
break;
case TextEdgeType::CapHeight:
m_value.valueID = CSSValueCap;
break;
case TextEdgeType::ExHeight:
m_value.valueID = CSSValueEx;
break;
case TextEdgeType::Alphabetic:
m_value.valueID = CSSValueAlphabetic;
break;
case TextEdgeType::CJKIdeographic:
m_value.valueID = CSSValueIdeographic;
break;
case TextEdgeType::CJKIdeographicInk:
m_value.valueID = CSSValueIdeographicInk;
break;
}
}

template<> inline CSSPrimitiveValue::operator TextEdgeType() const
{
ASSERT(isValueID());
switch (m_value.valueID) {
case CSSValueLeading:
return TextEdgeType::Leading;
case CSSValueText:
return TextEdgeType::Text;
case CSSValueCap:
return TextEdgeType::CapHeight;
case CSSValueEx:
return TextEdgeType::ExHeight;
case CSSValueAlphabetic:
return TextEdgeType::Alphabetic;
case CSSValueIdeographic:
return TextEdgeType::CJKIdeographic;
case CSSValueIdeographicInk:
return TextEdgeType::CJKIdeographicInk;
default:
ASSERT_NOT_REACHED();
return TextEdgeType::Leading;
}
}

#if ENABLE(APPLE_PAY)
template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ApplePayButtonStyle e)
: CSSValue(PrimitiveClass)
Expand Down
11 changes: 11 additions & 0 deletions Source/WebCore/css/CSSProperties.json
Expand Up @@ -510,6 +510,17 @@
"url": "https://www.w3.org/TR/css-fonts-4/#font-stretch-prop"
}
},
"text-edge": {
"codegen-properties": {
"converter": "TextEdge",
"custom-parser": true,
"settings-flag": "cssLeadingTrimEnabled"
},
"specification": {
"category": "css-inline",
"url": "https://www.w3.org/TR/css-inline-3/#text-edges"
}
},
"text-rendering": {
"inherited": true,
"values": [
Expand Down
9 changes: 9 additions & 0 deletions Source/WebCore/css/CSSValueKeywords.in
Expand Up @@ -1040,6 +1040,15 @@ no-punctuation
antialiased
subpixel-antialiased

// text-edge
leading
// text
cap
ex
// ideographic
ideographic-ink
// alphabetic

// text-rendering
//auto
optimizeSpeed
Expand Down
10 changes: 10 additions & 0 deletions Source/WebCore/css/ComputedStyleExtractor.cpp
Expand Up @@ -1312,6 +1312,14 @@ static Ref<CSSValueList> valueForScrollSnapAlignment(const ScrollSnapAlign& alig
return value;
}

static Ref<CSSValueList> valueForTextEdge(const TextEdge& textEdge)
{
auto value = CSSValueList::createSpaceSeparated();
value->append(CSSPrimitiveValue::create(textEdge.over));
value->append(CSSPrimitiveValue::create(textEdge.under));
return value;
}

static Ref<CSSValue> willChangePropertyValue(const WillChangeData* willChangeData)
{
auto& cssValuePool = CSSValuePool::singleton();
Expand Down Expand Up @@ -4081,6 +4089,8 @@ RefPtr<CSSValue> ComputedStyleExtractor::valueForPropertyInStyle(const RenderSty
return valueForScrollSnapType(style.scrollSnapType());
case CSSPropertyOverflowAnchor:
return cssValuePool.createValue(style.overflowAnchor());
case CSSPropertyTextEdge:
return valueForTextEdge(style.textEdge());

#if ENABLE(APPLE_PAY)
case CSSPropertyApplePayButtonStyle:
Expand Down
21 changes: 21 additions & 0 deletions Source/WebCore/css/parser/CSSPropertyParserHelpers.cpp
Expand Up @@ -6608,6 +6608,27 @@ RefPtr<CSSValue> consumeScrollSnapType(CSSParserTokenRange& range)
return typeValue;
}

RefPtr<CSSValue> consumeTextEdge(CSSParserTokenRange& range)
{
auto typeValue = CSSValueList::createSpaceSeparated();
if (range.peek().id() == CSSValueLeading) {
typeValue->append(consumeIdent(range).releaseNonNull());
return typeValue;
}

auto firstGroupValue = consumeIdent<CSSValueText, CSSValueCap, CSSValueEx, CSSValueIdeographic, CSSValueIdeographicInk>(range);
if (!firstGroupValue)
return nullptr;
typeValue->append(firstGroupValue.releaseNonNull());

auto secondGroupValue = consumeIdent<CSSValueText, CSSValueAlphabetic, CSSValueIdeographic, CSSValueIdeographicInk>(range);
if (secondGroupValue)
typeValue->append(secondGroupValue.releaseNonNull());

return typeValue;
}


RefPtr<CSSValue> consumeBorderRadiusCorner(CSSParserTokenRange& range, CSSParserMode cssParserMode)
{
RefPtr<CSSPrimitiveValue> parsedValue1 = consumeLengthOrPercent(range, cssParserMode, ValueRange::NonNegative);
Expand Down
1 change: 1 addition & 0 deletions Source/WebCore/css/parser/CSSPropertyParserHelpers.h
Expand Up @@ -271,6 +271,7 @@ RefPtr<CSSValue> consumeContent(CSSParserTokenRange&, const CSSParserContext&);
RefPtr<CSSValue> consumePerspective(CSSParserTokenRange&, CSSParserMode);
RefPtr<CSSValue> consumeScrollSnapAlign(CSSParserTokenRange&);
RefPtr<CSSValue> consumeScrollSnapType(CSSParserTokenRange&);
RefPtr<CSSValue> consumeTextEdge(CSSParserTokenRange&);
RefPtr<CSSValue> consumeBorderRadiusCorner(CSSParserTokenRange&, CSSParserMode);
bool consumeRadii(RefPtr<CSSPrimitiveValue> horizontalRadii[4], RefPtr<CSSPrimitiveValue> verticalRadii[4], CSSParserTokenRange&, CSSParserMode, bool useLegacyParsing);
enum class ConsumeRay { Include, Exclude };
Expand Down
16 changes: 16 additions & 0 deletions Source/WebCore/rendering/style/RenderStyle.cpp
Expand Up @@ -49,6 +49,7 @@
#include "StyleResolver.h"
#include "StyleScrollSnapPoints.h"
#include "StyleSelfAlignmentData.h"
#include "StyleTextEdge.h"
#include "StyleTreeResolver.h"
#include "WillChangeData.h"
#include <wtf/MathExtras.h>
Expand Down Expand Up @@ -2805,6 +2806,21 @@ bool RenderStyle::hasSnapPosition() const
return alignment.blockAlign != ScrollSnapAxisAlignType::None || alignment.inlineAlign != ScrollSnapAxisAlignType::None;
}

TextEdge RenderStyle::textEdge() const
{
return m_rareInheritedData->textEdge;
}

void RenderStyle::setTextEdge(TextEdge textEdgeValue)
{
SET_VAR(m_rareInheritedData, textEdge, textEdgeValue);
}

TextEdge RenderStyle::initialTextEdge()
{
return { TextEdgeType::Leading, TextEdgeType::Leading };
}

bool RenderStyle::hasReferenceFilterOnly() const
{
if (!hasFilter())
Expand Down

0 comments on commit 5cecbfb

Please sign in to comment.