- Revision
- 288107
- Author
- [email protected]
- Date
- 2022-01-17 19:02:17 -0800 (Mon, 17 Jan 2022)
Log Message
REGRESSION(r281389): using font-variant-ligatures causes Unicode bidi isolation control characters to render
https://bugs.webkit.org/show_bug.cgi?id=235053
<rdar://problem/87425066>
Reviewed by Darin Adler.
LayoutTests/imported/w3c:
* web-platform-tests/css/css-text/white-space/default-ignorable-complex-expected.html: Added.
* web-platform-tests/css/css-text/white-space/default-ignorable-complex.html: Added.
* web-platform-tests/css/css-text/white-space/default-ignorable-expected.html: Added.
* web-platform-tests/css/css-text/white-space/default-ignorable.html: Added.
Source/WebCore:
The spec says (https://drafts.csswg.org/css-text-3/#white-space-processing)
> unsupported Default_ignorable characters must be ignored for text rendering.
Previously, we were handling this by mapping the characters to the zero width space character. r281389 changed
that to be more faithful to the original string (and not do the mapping). One somewhat unexpected result of
this patch was that, now that we're not mapping these code points to the zero width space character, fewer fonts
on the system will support those code points. It became much more common for no font at all to support the code
point in question. r281389 handled the situation where the code points were supported by a font but shouldn't be
rendered, but didn't handle the case where the code points *weren't* supported by any fonts (in the complex text
codepath). This patch updates that path to handle it.
This patch also replaces our previous hardcoded list of Default_ignorable characters with the proper call to ICU
to check the Unicode property. It does this in both the fast text codepath and the simple text codepath, to make
sure they match.
Tests: imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex.html
imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable.html
* platform/graphics/ComplexTextController.cpp:
(WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
* platform/graphics/WidthIterator.cpp:
(WebCore::WidthIterator::applyCSSVisibilityRules):
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (288106 => 288107)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2022-01-18 01:39:05 UTC (rev 288106)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2022-01-18 03:02:17 UTC (rev 288107)
@@ -1,3 +1,16 @@
+2022-01-17 Myles C. Maxfield <[email protected]>
+
+ REGRESSION(r281389): using font-variant-ligatures causes Unicode bidi isolation control characters to render
+ https://bugs.webkit.org/show_bug.cgi?id=235053
+ <rdar://problem/87425066>
+
+ Reviewed by Darin Adler.
+
+ * web-platform-tests/css/css-text/white-space/default-ignorable-complex-expected.html: Added.
+ * web-platform-tests/css/css-text/white-space/default-ignorable-complex.html: Added.
+ * web-platform-tests/css/css-text/white-space/default-ignorable-expected.html: Added.
+ * web-platform-tests/css/css-text/white-space/default-ignorable.html: Added.
+
2022-01-17 Youenn Fablet <[email protected]>
Make ServiceWorkerClient.id a UUID instead of a string derived from a ScriptExecutionContextIdentifier
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex-expected.html (0 => 288107)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex-expected.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex-expected.html 2022-01-18 03:02:17 UTC (rev 288107)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Default_ignorable must not be rendered</title>
+<link rel="help" href=""
+<link rel="author" title="Myles C. Maxfield" href=""
+<style>
+span.test {
+ display: inline-block;
+}
+</style>
+</head>
+<body>
+<p>This test makes sure that Default_ignorable code points are not rendered. The test passes if this text you're reading right now is the only thing on the page.</p>
+</body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex.html (0 => 288107)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex.html 2022-01-18 03:02:17 UTC (rev 288107)
@@ -0,0 +1,429 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Default_ignorable must not be rendered</title>
+<link rel="help" href=""
+<link rel="author" title="Myles C. Maxfield" href=""
+<link rel="match" href=""
+<style>
+span.test {
+ display: inline-block;
+ font-variant-ligatures: common-ligatures;
+}
+</style>
+</head>
+<body>
+<p>This test makes sure that Default_ignorable code points are not rendered. The test passes if this text you're reading right now is the only thing on the page.</p>
+
+<!-- These are all the code points which are assigned and are Default_ignorable, at time of writing. -->
+
+<!-- The spec says "unsupported Default_ignorable characters must be ignored for text rendering."
+The commented-out characters are *supported* Default_ignorable characters in some browser in some font. -->
+
+<!--span class="test">­</span--> <!-- U+00AD SOFT HYPHEN -->
+<span class="test">͏</span> <!-- U+0034F COMBINING GRAPHEME JOINER -->
+<span class="test">؜</span> <!-- U+0061C ARABIC LETTER MARK -->
+<!--span class="test">ᅟ</span--> <!-- U+115F HANGUL CHOSEONG FILLER -->
+<!--span class="test">ᅠ</span--> <!-- U+1160 HANGUL JUNGSEONG FILLER -->
+<!--span class="test">឴</span--> <!-- U+17B4 KHMER VOWEL INHERENT AQ -->
+<!--span class="test">឵</span--> <!-- U+17B5 KHMER VOWEL INHERENT AA -->
+<!--span class="test">᠋</span--> <!-- U+180B MONGOLIAN FREE VARIATION SELECTOR ONE -->
+<!--span class="test">᠌</span--> <!-- U+180C MONGOLIAN FREE VARIATION SELECTOR TWO -->
+<!--span class="test">᠍</span--> <!-- U+180D MONGOLIAN FREE VARIATION SELECTOR THREE -->
+<!--span class="test">᠎</span--> <!-- U+180E MONGOLIAN VOWEL SEPARATOR -->
+<!--span class="test">᠏</span--> <!-- U+180F MONGOLIAN FREE VARIATION SELECTOR FOUR -->
+<span class="test">​</span> <!-- U+200B ZERO WIDTH SPACE -->
+<span class="test">‌</span> <!-- U+200C ZERO WIDTH NON-JOINER -->
+<span class="test">‍</span> <!-- U+200D ZERO WIDTH JOINER -->
+<span class="test">‎</span> <!-- U+200E LEFT-TO-RIGHT MARK -->
+<span class="test">‏</span> <!-- U+200F RIGHT-TO-LEFT MARK -->
+<span class="test">‪</span> <!-- U+202A LEFT-TO-RIGHT EMBEDDING -->
+<span class="test">‫</span> <!-- U+202B RIGHT-TO-LEFT EMBEDDING -->
+<span class="test">‬</span> <!-- U+202C POP DIRECTIONAL FORMATTING -->
+<span class="test">‭</span> <!-- U+202D LEFT-TO-RIGHT OVERRIDE -->
+<span class="test">‮</span> <!-- U+202E RIGHT-TO-LEFT OVERRIDE -->
+<span class="test">⁠</span> <!-- U+2060 WORD JOINER -->
+<span class="test">⁡</span> <!-- U+2061 FUNCTION APPLICATION -->
+<span class="test">⁢</span> <!-- U+2062 INVISIBLE TIMES -->
+<span class="test">⁣</span> <!-- U+2063 INVISIBLE SEPARATOR -->
+<span class="test">⁤</span> <!-- U+2064 INVISIBLE PLUS -->
+<span class="test">⁦</span> <!-- U+2066 LEFT-TO-RIGHT ISOLATE -->
+<span class="test">⁧</span> <!-- U+2067 RIGHT-TO-LEFT ISOLATE -->
+<span class="test">⁨</span> <!-- U+2068 FIRST STRONG ISOLATE -->
+<span class="test">⁩</span> <!-- U+2069 POP DIRECTIONAL ISOLATE -->
+<span class="test"></span> <!-- U+206A INHIBIT SYMMETRIC SWAPPING -->
+<span class="test"></span> <!-- U+206B ACTIVATE SYMMETRIC SWAPPING -->
+<span class="test"></span> <!-- U+206C INHIBIT ARABIC FORM SHAPING -->
+<span class="test"></span> <!-- U+206D ACTIVATE ARABIC FORM SHAPING -->
+<span class="test"></span> <!-- U+206E NATIONAL DIGIT SHAPES -->
+<span class="test"></span> <!-- U+206F NOMINAL DIGIT SHAPES -->
+<!--span class="test">ㅤ</span--> <!-- U+3164 HANGUL FILLER -->
+<span class="test">︀</span> <!-- U+FE00 VARIATION SELECTOR-1 -->
+<span class="test">︁</span> <!-- U+FE01 VARIATION SELECTOR-2 -->
+<span class="test">︂</span> <!-- U+FE02 VARIATION SELECTOR-3 -->
+<span class="test">︃</span> <!-- U+FE03 VARIATION SELECTOR-4 -->
+<span class="test">︄</span> <!-- U+FE04 VARIATION SELECTOR-5 -->
+<span class="test">︅</span> <!-- U+FE05 VARIATION SELECTOR-6 -->
+<span class="test">︆</span> <!-- U+FE06 VARIATION SELECTOR-7 -->
+<span class="test">︇</span> <!-- U+FE07 VARIATION SELECTOR-8 -->
+<span class="test">︈</span> <!-- U+FE08 VARIATION SELECTOR-9 -->
+<span class="test">︉</span> <!-- U+FE09 VARIATION SELECTOR-10 -->
+<span class="test">︊</span> <!-- U+FE0A VARIATION SELECTOR-11 -->
+<span class="test">︋</span> <!-- U+FE0B VARIATION SELECTOR-12 -->
+<span class="test">︌</span> <!-- U+FE0C VARIATION SELECTOR-13 -->
+<span class="test">︍</span> <!-- U+FE0D VARIATION SELECTOR-14 -->
+<span class="test">︎</span> <!-- U+FE0E VARIATION SELECTOR-15 -->
+<span class="test">️</span> <!-- U+FE0F VARIATION SELECTOR-16 -->
+<span class="test"></span> <!-- U+FEFF ZERO WIDTH NO-BREAK SPACE -->
+<span class="test">ᅠ</span> <!-- U+FFA0 HALFWIDTH HANGUL FILLER -->
+<!--span class="test">𛲠</span--> <!-- U+1BCA0 SHORTHAND FORMAT LETTER OVERLAP -->
+<!--span class="test">𛲡</span--> <!-- U+1BCA1 SHORTHAND FORMAT CONTINUING OVERLAP -->
+<!--span class="test">𛲢</span--> <!-- U+1BCA2 SHORTHAND FORMAT DOWN STEP -->
+<!--span class="test">𛲣</span--> <!-- U+1BCA3 SHORTHAND FORMAT UP STEP -->
+<span class="test">𝅳</span> <!-- U+1D173 MUSICAL SYMBOL BEGIN BEAM -->
+<span class="test">𝅴</span> <!-- U+1D174 MUSICAL SYMBOL END BEAM -->
+<span class="test">𝅵</span> <!-- U+1D175 MUSICAL SYMBOL BEGIN TIE -->
+<span class="test">𝅶</span> <!-- U+1D176 MUSICAL SYMBOL END TIE -->
+<span class="test">𝅷</span> <!-- U+1D177 MUSICAL SYMBOL BEGIN SLUR -->
+<span class="test">𝅸</span> <!-- U+1D178 MUSICAL SYMBOL END SLUR -->
+<span class="test">𝅹</span> <!-- U+1D179 MUSICAL SYMBOL BEGIN PHRASE -->
+<span class="test">𝅺</span> <!-- U+1D17A MUSICAL SYMBOL END PHRASE -->
+<span class="test">󠀁</span> <!-- U+E0001 LANGUAGE TAG -->
+<span class="test">󠀠</span> <!-- U+E0020 TAG SPACE -->
+<span class="test">󠀡</span> <!-- U+E0021 TAG EXCLAMATION MARK -->
+<span class="test">󠀢</span> <!-- U+E0022 TAG QUOTATION MARK -->
+<span class="test">󠀣</span> <!-- U+E0023 TAG NUMBER SIGN -->
+<span class="test">󠀤</span> <!-- U+E0024 TAG DOLLAR SIGN -->
+<span class="test">󠀥</span> <!-- U+E0025 TAG PERCENT SIGN -->
+<span class="test">󠀦</span> <!-- U+E0026 TAG AMPERSAND -->
+<span class="test">󠀧</span> <!-- U+E0027 TAG APOSTROPHE -->
+<span class="test">󠀨</span> <!-- U+E0028 TAG LEFT PARENTHESIS -->
+<span class="test">󠀩</span> <!-- U+E0029 TAG RIGHT PARENTHESIS -->
+<span class="test">󠀪</span> <!-- U+E002A TAG ASTERISK -->
+<span class="test">󠀫</span> <!-- U+E002B TAG PLUS SIGN -->
+<span class="test">󠀬</span> <!-- U+E002C TAG COMMA -->
+<span class="test">󠀭</span> <!-- U+E002D TAG HYPHEN-MINUS -->
+<span class="test">󠀮</span> <!-- U+E002E TAG FULL STOP -->
+<span class="test">󠀯</span> <!-- U+E002F TAG SOLIDUS -->
+<span class="test">󠀰</span> <!-- U+E0030 TAG DIGIT ZERO -->
+<span class="test">󠀱</span> <!-- U+E0031 TAG DIGIT ONE -->
+<span class="test">󠀲</span> <!-- U+E0032 TAG DIGIT TWO -->
+<span class="test">󠀳</span> <!-- U+E0033 TAG DIGIT THREE -->
+<span class="test">󠀴</span> <!-- U+E0034 TAG DIGIT FOUR -->
+<span class="test">󠀵</span> <!-- U+E0035 TAG DIGIT FIVE -->
+<span class="test">󠀶</span> <!-- U+E0036 TAG DIGIT SIX -->
+<span class="test">󠀷</span> <!-- U+E0037 TAG DIGIT SEVEN -->
+<span class="test">󠀸</span> <!-- U+E0038 TAG DIGIT EIGHT -->
+<span class="test">󠀹</span> <!-- U+E0039 TAG DIGIT NINE -->
+<span class="test">󠀺</span> <!-- U+E003A TAG COLON -->
+<span class="test">󠀻</span> <!-- U+E003B TAG SEMICOLON -->
+<span class="test">󠀼</span> <!-- U+E003C TAG LESS-THAN SIGN -->
+<span class="test">󠀽</span> <!-- U+E003D TAG EQUALS SIGN -->
+<span class="test">󠀾</span> <!-- U+E003E TAG GREATER-THAN SIGN -->
+<span class="test">󠀿</span> <!-- U+E003F TAG QUESTION MARK -->
+<span class="test">󠁀</span> <!-- U+E0040 TAG COMMERCIAL AT -->
+<span class="test">󠁁</span> <!-- U+E0041 TAG LATIN CAPITAL LETTER A -->
+<span class="test">󠁂</span> <!-- U+E0042 TAG LATIN CAPITAL LETTER B -->
+<span class="test">󠁃</span> <!-- U+E0043 TAG LATIN CAPITAL LETTER C -->
+<span class="test">󠁄</span> <!-- U+E0044 TAG LATIN CAPITAL LETTER D -->
+<span class="test">󠁅</span> <!-- U+E0045 TAG LATIN CAPITAL LETTER E -->
+<span class="test">󠁆</span> <!-- U+E0046 TAG LATIN CAPITAL LETTER F -->
+<span class="test">󠁇</span> <!-- U+E0047 TAG LATIN CAPITAL LETTER G -->
+<span class="test">󠁈</span> <!-- U+E0048 TAG LATIN CAPITAL LETTER H -->
+<span class="test">󠁉</span> <!-- U+E0049 TAG LATIN CAPITAL LETTER I -->
+<span class="test">󠁊</span> <!-- U+E004A TAG LATIN CAPITAL LETTER J -->
+<span class="test">󠁋</span> <!-- U+E004B TAG LATIN CAPITAL LETTER K -->
+<span class="test">󠁌</span> <!-- U+E004C TAG LATIN CAPITAL LETTER L -->
+<span class="test">󠁍</span> <!-- U+E004D TAG LATIN CAPITAL LETTER M -->
+<span class="test">󠁎</span> <!-- U+E004E TAG LATIN CAPITAL LETTER N -->
+<span class="test">󠁏</span> <!-- U+E004F TAG LATIN CAPITAL LETTER O -->
+<span class="test">󠁐</span> <!-- U+E0050 TAG LATIN CAPITAL LETTER P -->
+<span class="test">󠁑</span> <!-- U+E0051 TAG LATIN CAPITAL LETTER Q -->
+<span class="test">󠁒</span> <!-- U+E0052 TAG LATIN CAPITAL LETTER R -->
+<span class="test">󠁓</span> <!-- U+E0053 TAG LATIN CAPITAL LETTER S -->
+<span class="test">󠁔</span> <!-- U+E0054 TAG LATIN CAPITAL LETTER T -->
+<span class="test">󠁕</span> <!-- U+E0055 TAG LATIN CAPITAL LETTER U -->
+<span class="test">󠁖</span> <!-- U+E0056 TAG LATIN CAPITAL LETTER V -->
+<span class="test">󠁗</span> <!-- U+E0057 TAG LATIN CAPITAL LETTER W -->
+<span class="test">󠁘</span> <!-- U+E0058 TAG LATIN CAPITAL LETTER X -->
+<span class="test">󠁙</span> <!-- U+E0059 TAG LATIN CAPITAL LETTER Y -->
+<span class="test">󠁚</span> <!-- U+E005A TAG LATIN CAPITAL LETTER Z -->
+<span class="test">󠁛</span> <!-- U+E005B TAG LEFT SQUARE BRACKET -->
+<span class="test">󠁜</span> <!-- U+E005C TAG REVERSE SOLIDUS -->
+<span class="test">󠁝</span> <!-- U+E005D TAG RIGHT SQUARE BRACKET -->
+<span class="test">󠁞</span> <!-- U+E005E TAG CIRCUMFLEX ACCENT -->
+<span class="test">󠁟</span> <!-- U+E005F TAG LOW LINE -->
+<span class="test">󠁠</span> <!-- U+E0060 TAG GRAVE ACCENT -->
+<span class="test">󠁡</span> <!-- U+E0061 TAG LATIN SMALL LETTER A -->
+<span class="test">󠁢</span> <!-- U+E0062 TAG LATIN SMALL LETTER B -->
+<span class="test">󠁣</span> <!-- U+E0063 TAG LATIN SMALL LETTER C -->
+<span class="test">󠁤</span> <!-- U+E0064 TAG LATIN SMALL LETTER D -->
+<span class="test">󠁥</span> <!-- U+E0065 TAG LATIN SMALL LETTER E -->
+<span class="test">󠁦</span> <!-- U+E0066 TAG LATIN SMALL LETTER F -->
+<span class="test">󠁧</span> <!-- U+E0067 TAG LATIN SMALL LETTER G -->
+<span class="test">󠁨</span> <!-- U+E0068 TAG LATIN SMALL LETTER H -->
+<span class="test">󠁩</span> <!-- U+E0069 TAG LATIN SMALL LETTER I -->
+<span class="test">󠁪</span> <!-- U+E006A TAG LATIN SMALL LETTER J -->
+<span class="test">󠁫</span> <!-- U+E006B TAG LATIN SMALL LETTER K -->
+<span class="test">󠁬</span> <!-- U+E006C TAG LATIN SMALL LETTER L -->
+<span class="test">󠁭</span> <!-- U+E006D TAG LATIN SMALL LETTER M -->
+<span class="test">󠁮</span> <!-- U+E006E TAG LATIN SMALL LETTER N -->
+<span class="test">󠁯</span> <!-- U+E006F TAG LATIN SMALL LETTER O -->
+<span class="test">󠁰</span> <!-- U+E0070 TAG LATIN SMALL LETTER P -->
+<span class="test">󠁱</span> <!-- U+E0071 TAG LATIN SMALL LETTER Q -->
+<span class="test">󠁲</span> <!-- U+E0072 TAG LATIN SMALL LETTER R -->
+<span class="test">󠁳</span> <!-- U+E0073 TAG LATIN SMALL LETTER S -->
+<span class="test">󠁴</span> <!-- U+E0074 TAG LATIN SMALL LETTER T -->
+<span class="test">󠁵</span> <!-- U+E0075 TAG LATIN SMALL LETTER U -->
+<span class="test">󠁶</span> <!-- U+E0076 TAG LATIN SMALL LETTER V -->
+<span class="test">󠁷</span> <!-- U+E0077 TAG LATIN SMALL LETTER W -->
+<span class="test">󠁸</span> <!-- U+E0078 TAG LATIN SMALL LETTER X -->
+<span class="test">󠁹</span> <!-- U+E0079 TAG LATIN SMALL LETTER Y -->
+<span class="test">󠁺</span> <!-- U+E007A TAG LATIN SMALL LETTER Z -->
+<span class="test">󠁻</span> <!-- U+E007B TAG LEFT CURLY BRACKET -->
+<span class="test">󠁼</span> <!-- U+E007C TAG VERTICAL LINE -->
+<span class="test">󠁽</span> <!-- U+E007D TAG RIGHT CURLY BRACKET -->
+<span class="test">󠁾</span> <!-- U+E007E TAG TILDE -->
+<span class="test">󠁿</span> <!-- U+E007F CANCEL TAG -->
+<span class="test">󠄀</span> <!-- U+E0100 VARIATION SELECTOR-17 -->
+<span class="test">󠄁</span> <!-- U+E0101 VARIATION SELECTOR-18 -->
+<span class="test">󠄂</span> <!-- U+E0102 VARIATION SELECTOR-19 -->
+<span class="test">󠄃</span> <!-- U+E0103 VARIATION SELECTOR-20 -->
+<span class="test">󠄄</span> <!-- U+E0104 VARIATION SELECTOR-21 -->
+<span class="test">󠄅</span> <!-- U+E0105 VARIATION SELECTOR-22 -->
+<span class="test">󠄆</span> <!-- U+E0106 VARIATION SELECTOR-23 -->
+<span class="test">󠄇</span> <!-- U+E0107 VARIATION SELECTOR-24 -->
+<span class="test">󠄈</span> <!-- U+E0108 VARIATION SELECTOR-25 -->
+<span class="test">󠄉</span> <!-- U+E0109 VARIATION SELECTOR-26 -->
+<span class="test">󠄊</span> <!-- U+E010A VARIATION SELECTOR-27 -->
+<span class="test">󠄋</span> <!-- U+E010B VARIATION SELECTOR-28 -->
+<span class="test">󠄌</span> <!-- U+E010C VARIATION SELECTOR-29 -->
+<span class="test">󠄍</span> <!-- U+E010D VARIATION SELECTOR-30 -->
+<span class="test">󠄎</span> <!-- U+E010E VARIATION SELECTOR-31 -->
+<span class="test">󠄏</span> <!-- U+E010F VARIATION SELECTOR-32 -->
+<span class="test">󠄐</span> <!-- U+E0110 VARIATION SELECTOR-33 -->
+<span class="test">󠄑</span> <!-- U+E0111 VARIATION SELECTOR-34 -->
+<span class="test">󠄒</span> <!-- U+E0112 VARIATION SELECTOR-35 -->
+<span class="test">󠄓</span> <!-- U+E0113 VARIATION SELECTOR-36 -->
+<span class="test">󠄔</span> <!-- U+E0114 VARIATION SELECTOR-37 -->
+<span class="test">󠄕</span> <!-- U+E0115 VARIATION SELECTOR-38 -->
+<span class="test">󠄖</span> <!-- U+E0116 VARIATION SELECTOR-39 -->
+<span class="test">󠄗</span> <!-- U+E0117 VARIATION SELECTOR-40 -->
+<span class="test">󠄘</span> <!-- U+E0118 VARIATION SELECTOR-41 -->
+<span class="test">󠄙</span> <!-- U+E0119 VARIATION SELECTOR-42 -->
+<span class="test">󠄚</span> <!-- U+E011A VARIATION SELECTOR-43 -->
+<span class="test">󠄛</span> <!-- U+E011B VARIATION SELECTOR-44 -->
+<span class="test">󠄜</span> <!-- U+E011C VARIATION SELECTOR-45 -->
+<span class="test">󠄝</span> <!-- U+E011D VARIATION SELECTOR-46 -->
+<span class="test">󠄞</span> <!-- U+E011E VARIATION SELECTOR-47 -->
+<span class="test">󠄟</span> <!-- U+E011F VARIATION SELECTOR-48 -->
+<span class="test">󠄠</span> <!-- U+E0120 VARIATION SELECTOR-49 -->
+<span class="test">󠄡</span> <!-- U+E0121 VARIATION SELECTOR-50 -->
+<span class="test">󠄢</span> <!-- U+E0122 VARIATION SELECTOR-51 -->
+<span class="test">󠄣</span> <!-- U+E0123 VARIATION SELECTOR-52 -->
+<span class="test">󠄤</span> <!-- U+E0124 VARIATION SELECTOR-53 -->
+<span class="test">󠄥</span> <!-- U+E0125 VARIATION SELECTOR-54 -->
+<span class="test">󠄦</span> <!-- U+E0126 VARIATION SELECTOR-55 -->
+<span class="test">󠄧</span> <!-- U+E0127 VARIATION SELECTOR-56 -->
+<span class="test">󠄨</span> <!-- U+E0128 VARIATION SELECTOR-57 -->
+<span class="test">󠄩</span> <!-- U+E0129 VARIATION SELECTOR-58 -->
+<span class="test">󠄪</span> <!-- U+E012A VARIATION SELECTOR-59 -->
+<span class="test">󠄫</span> <!-- U+E012B VARIATION SELECTOR-60 -->
+<span class="test">󠄬</span> <!-- U+E012C VARIATION SELECTOR-61 -->
+<span class="test">󠄭</span> <!-- U+E012D VARIATION SELECTOR-62 -->
+<span class="test">󠄮</span> <!-- U+E012E VARIATION SELECTOR-63 -->
+<span class="test">󠄯</span> <!-- U+E012F VARIATION SELECTOR-64 -->
+<span class="test">󠄰</span> <!-- U+E0130 VARIATION SELECTOR-65 -->
+<span class="test">󠄱</span> <!-- U+E0131 VARIATION SELECTOR-66 -->
+<span class="test">󠄲</span> <!-- U+E0132 VARIATION SELECTOR-67 -->
+<span class="test">󠄳</span> <!-- U+E0133 VARIATION SELECTOR-68 -->
+<span class="test">󠄴</span> <!-- U+E0134 VARIATION SELECTOR-69 -->
+<span class="test">󠄵</span> <!-- U+E0135 VARIATION SELECTOR-70 -->
+<span class="test">󠄶</span> <!-- U+E0136 VARIATION SELECTOR-71 -->
+<span class="test">󠄷</span> <!-- U+E0137 VARIATION SELECTOR-72 -->
+<span class="test">󠄸</span> <!-- U+E0138 VARIATION SELECTOR-73 -->
+<span class="test">󠄹</span> <!-- U+E0139 VARIATION SELECTOR-74 -->
+<span class="test">󠄺</span> <!-- U+E013A VARIATION SELECTOR-75 -->
+<span class="test">󠄻</span> <!-- U+E013B VARIATION SELECTOR-76 -->
+<span class="test">󠄼</span> <!-- U+E013C VARIATION SELECTOR-77 -->
+<span class="test">󠄽</span> <!-- U+E013D VARIATION SELECTOR-78 -->
+<span class="test">󠄾</span> <!-- U+E013E VARIATION SELECTOR-79 -->
+<span class="test">󠄿</span> <!-- U+E013F VARIATION SELECTOR-80 -->
+<span class="test">󠅀</span> <!-- U+E0140 VARIATION SELECTOR-81 -->
+<span class="test">󠅁</span> <!-- U+E0141 VARIATION SELECTOR-82 -->
+<span class="test">󠅂</span> <!-- U+E0142 VARIATION SELECTOR-83 -->
+<span class="test">󠅃</span> <!-- U+E0143 VARIATION SELECTOR-84 -->
+<span class="test">󠅄</span> <!-- U+E0144 VARIATION SELECTOR-85 -->
+<span class="test">󠅅</span> <!-- U+E0145 VARIATION SELECTOR-86 -->
+<span class="test">󠅆</span> <!-- U+E0146 VARIATION SELECTOR-87 -->
+<span class="test">󠅇</span> <!-- U+E0147 VARIATION SELECTOR-88 -->
+<span class="test">󠅈</span> <!-- U+E0148 VARIATION SELECTOR-89 -->
+<span class="test">󠅉</span> <!-- U+E0149 VARIATION SELECTOR-90 -->
+<span class="test">󠅊</span> <!-- U+E014A VARIATION SELECTOR-91 -->
+<span class="test">󠅋</span> <!-- U+E014B VARIATION SELECTOR-92 -->
+<span class="test">󠅌</span> <!-- U+E014C VARIATION SELECTOR-93 -->
+<span class="test">󠅍</span> <!-- U+E014D VARIATION SELECTOR-94 -->
+<span class="test">󠅎</span> <!-- U+E014E VARIATION SELECTOR-95 -->
+<span class="test">󠅏</span> <!-- U+E014F VARIATION SELECTOR-96 -->
+<span class="test">󠅐</span> <!-- U+E0150 VARIATION SELECTOR-97 -->
+<span class="test">󠅑</span> <!-- U+E0151 VARIATION SELECTOR-98 -->
+<span class="test">󠅒</span> <!-- U+E0152 VARIATION SELECTOR-99 -->
+<span class="test">󠅓</span> <!-- U+E0153 VARIATION SELECTOR-100 -->
+<span class="test">󠅔</span> <!-- U+E0154 VARIATION SELECTOR-101 -->
+<span class="test">󠅕</span> <!-- U+E0155 VARIATION SELECTOR-102 -->
+<span class="test">󠅖</span> <!-- U+E0156 VARIATION SELECTOR-103 -->
+<span class="test">󠅗</span> <!-- U+E0157 VARIATION SELECTOR-104 -->
+<span class="test">󠅘</span> <!-- U+E0158 VARIATION SELECTOR-105 -->
+<span class="test">󠅙</span> <!-- U+E0159 VARIATION SELECTOR-106 -->
+<span class="test">󠅚</span> <!-- U+E015A VARIATION SELECTOR-107 -->
+<span class="test">󠅛</span> <!-- U+E015B VARIATION SELECTOR-108 -->
+<span class="test">󠅜</span> <!-- U+E015C VARIATION SELECTOR-109 -->
+<span class="test">󠅝</span> <!-- U+E015D VARIATION SELECTOR-110 -->
+<span class="test">󠅞</span> <!-- U+E015E VARIATION SELECTOR-111 -->
+<span class="test">󠅟</span> <!-- U+E015F VARIATION SELECTOR-112 -->
+<span class="test">󠅠</span> <!-- U+E0160 VARIATION SELECTOR-113 -->
+<span class="test">󠅡</span> <!-- U+E0161 VARIATION SELECTOR-114 -->
+<span class="test">󠅢</span> <!-- U+E0162 VARIATION SELECTOR-115 -->
+<span class="test">󠅣</span> <!-- U+E0163 VARIATION SELECTOR-116 -->
+<span class="test">󠅤</span> <!-- U+E0164 VARIATION SELECTOR-117 -->
+<span class="test">󠅥</span> <!-- U+E0165 VARIATION SELECTOR-118 -->
+<span class="test">󠅦</span> <!-- U+E0166 VARIATION SELECTOR-119 -->
+<span class="test">󠅧</span> <!-- U+E0167 VARIATION SELECTOR-120 -->
+<span class="test">󠅨</span> <!-- U+E0168 VARIATION SELECTOR-121 -->
+<span class="test">󠅩</span> <!-- U+E0169 VARIATION SELECTOR-122 -->
+<span class="test">󠅪</span> <!-- U+E016A VARIATION SELECTOR-123 -->
+<span class="test">󠅫</span> <!-- U+E016B VARIATION SELECTOR-124 -->
+<span class="test">󠅬</span> <!-- U+E016C VARIATION SELECTOR-125 -->
+<span class="test">󠅭</span> <!-- U+E016D VARIATION SELECTOR-126 -->
+<span class="test">󠅮</span> <!-- U+E016E VARIATION SELECTOR-127 -->
+<span class="test">󠅯</span> <!-- U+E016F VARIATION SELECTOR-128 -->
+<span class="test">󠅰</span> <!-- U+E0170 VARIATION SELECTOR-129 -->
+<span class="test">󠅱</span> <!-- U+E0171 VARIATION SELECTOR-130 -->
+<span class="test">󠅲</span> <!-- U+E0172 VARIATION SELECTOR-131 -->
+<span class="test">󠅳</span> <!-- U+E0173 VARIATION SELECTOR-132 -->
+<span class="test">󠅴</span> <!-- U+E0174 VARIATION SELECTOR-133 -->
+<span class="test">󠅵</span> <!-- U+E0175 VARIATION SELECTOR-134 -->
+<span class="test">󠅶</span> <!-- U+E0176 VARIATION SELECTOR-135 -->
+<span class="test">󠅷</span> <!-- U+E0177 VARIATION SELECTOR-136 -->
+<span class="test">󠅸</span> <!-- U+E0178 VARIATION SELECTOR-137 -->
+<span class="test">󠅹</span> <!-- U+E0179 VARIATION SELECTOR-138 -->
+<span class="test">󠅺</span> <!-- U+E017A VARIATION SELECTOR-139 -->
+<span class="test">󠅻</span> <!-- U+E017B VARIATION SELECTOR-140 -->
+<span class="test">󠅼</span> <!-- U+E017C VARIATION SELECTOR-141 -->
+<span class="test">󠅽</span> <!-- U+E017D VARIATION SELECTOR-142 -->
+<span class="test">󠅾</span> <!-- U+E017E VARIATION SELECTOR-143 -->
+<span class="test">󠅿</span> <!-- U+E017F VARIATION SELECTOR-144 -->
+<span class="test">󠆀</span> <!-- U+E0180 VARIATION SELECTOR-145 -->
+<span class="test">󠆁</span> <!-- U+E0181 VARIATION SELECTOR-146 -->
+<span class="test">󠆂</span> <!-- U+E0182 VARIATION SELECTOR-147 -->
+<span class="test">󠆃</span> <!-- U+E0183 VARIATION SELECTOR-148 -->
+<span class="test">󠆄</span> <!-- U+E0184 VARIATION SELECTOR-149 -->
+<span class="test">󠆅</span> <!-- U+E0185 VARIATION SELECTOR-150 -->
+<span class="test">󠆆</span> <!-- U+E0186 VARIATION SELECTOR-151 -->
+<span class="test">󠆇</span> <!-- U+E0187 VARIATION SELECTOR-152 -->
+<span class="test">󠆈</span> <!-- U+E0188 VARIATION SELECTOR-153 -->
+<span class="test">󠆉</span> <!-- U+E0189 VARIATION SELECTOR-154 -->
+<span class="test">󠆊</span> <!-- U+E018A VARIATION SELECTOR-155 -->
+<span class="test">󠆋</span> <!-- U+E018B VARIATION SELECTOR-156 -->
+<span class="test">󠆌</span> <!-- U+E018C VARIATION SELECTOR-157 -->
+<span class="test">󠆍</span> <!-- U+E018D VARIATION SELECTOR-158 -->
+<span class="test">󠆎</span> <!-- U+E018E VARIATION SELECTOR-159 -->
+<span class="test">󠆏</span> <!-- U+E018F VARIATION SELECTOR-160 -->
+<span class="test">󠆐</span> <!-- U+E0190 VARIATION SELECTOR-161 -->
+<span class="test">󠆑</span> <!-- U+E0191 VARIATION SELECTOR-162 -->
+<span class="test">󠆒</span> <!-- U+E0192 VARIATION SELECTOR-163 -->
+<span class="test">󠆓</span> <!-- U+E0193 VARIATION SELECTOR-164 -->
+<span class="test">󠆔</span> <!-- U+E0194 VARIATION SELECTOR-165 -->
+<span class="test">󠆕</span> <!-- U+E0195 VARIATION SELECTOR-166 -->
+<span class="test">󠆖</span> <!-- U+E0196 VARIATION SELECTOR-167 -->
+<span class="test">󠆗</span> <!-- U+E0197 VARIATION SELECTOR-168 -->
+<span class="test">󠆘</span> <!-- U+E0198 VARIATION SELECTOR-169 -->
+<span class="test">󠆙</span> <!-- U+E0199 VARIATION SELECTOR-170 -->
+<span class="test">󠆚</span> <!-- U+E019A VARIATION SELECTOR-171 -->
+<span class="test">󠆛</span> <!-- U+E019B VARIATION SELECTOR-172 -->
+<span class="test">󠆜</span> <!-- U+E019C VARIATION SELECTOR-173 -->
+<span class="test">󠆝</span> <!-- U+E019D VARIATION SELECTOR-174 -->
+<span class="test">󠆞</span> <!-- U+E019E VARIATION SELECTOR-175 -->
+<span class="test">󠆟</span> <!-- U+E019F VARIATION SELECTOR-176 -->
+<span class="test">󠆠</span> <!-- U+E01A0 VARIATION SELECTOR-177 -->
+<span class="test">󠆡</span> <!-- U+E01A1 VARIATION SELECTOR-178 -->
+<span class="test">󠆢</span> <!-- U+E01A2 VARIATION SELECTOR-179 -->
+<span class="test">󠆣</span> <!-- U+E01A3 VARIATION SELECTOR-180 -->
+<span class="test">󠆤</span> <!-- U+E01A4 VARIATION SELECTOR-181 -->
+<span class="test">󠆥</span> <!-- U+E01A5 VARIATION SELECTOR-182 -->
+<span class="test">󠆦</span> <!-- U+E01A6 VARIATION SELECTOR-183 -->
+<span class="test">󠆧</span> <!-- U+E01A7 VARIATION SELECTOR-184 -->
+<span class="test">󠆨</span> <!-- U+E01A8 VARIATION SELECTOR-185 -->
+<span class="test">󠆩</span> <!-- U+E01A9 VARIATION SELECTOR-186 -->
+<span class="test">󠆪</span> <!-- U+E01AA VARIATION SELECTOR-187 -->
+<span class="test">󠆫</span> <!-- U+E01AB VARIATION SELECTOR-188 -->
+<span class="test">󠆬</span> <!-- U+E01AC VARIATION SELECTOR-189 -->
+<span class="test">󠆭</span> <!-- U+E01AD VARIATION SELECTOR-190 -->
+<span class="test">󠆮</span> <!-- U+E01AE VARIATION SELECTOR-191 -->
+<span class="test">󠆯</span> <!-- U+E01AF VARIATION SELECTOR-192 -->
+<span class="test">󠆰</span> <!-- U+E01B0 VARIATION SELECTOR-193 -->
+<span class="test">󠆱</span> <!-- U+E01B1 VARIATION SELECTOR-194 -->
+<span class="test">󠆲</span> <!-- U+E01B2 VARIATION SELECTOR-195 -->
+<span class="test">󠆳</span> <!-- U+E01B3 VARIATION SELECTOR-196 -->
+<span class="test">󠆴</span> <!-- U+E01B4 VARIATION SELECTOR-197 -->
+<span class="test">󠆵</span> <!-- U+E01B5 VARIATION SELECTOR-198 -->
+<span class="test">󠆶</span> <!-- U+E01B6 VARIATION SELECTOR-199 -->
+<span class="test">󠆷</span> <!-- U+E01B7 VARIATION SELECTOR-200 -->
+<span class="test">󠆸</span> <!-- U+E01B8 VARIATION SELECTOR-201 -->
+<span class="test">󠆹</span> <!-- U+E01B9 VARIATION SELECTOR-202 -->
+<span class="test">󠆺</span> <!-- U+E01BA VARIATION SELECTOR-203 -->
+<span class="test">󠆻</span> <!-- U+E01BB VARIATION SELECTOR-204 -->
+<span class="test">󠆼</span> <!-- U+E01BC VARIATION SELECTOR-205 -->
+<span class="test">󠆽</span> <!-- U+E01BD VARIATION SELECTOR-206 -->
+<span class="test">󠆾</span> <!-- U+E01BE VARIATION SELECTOR-207 -->
+<span class="test">󠆿</span> <!-- U+E01BF VARIATION SELECTOR-208 -->
+<span class="test">󠇀</span> <!-- U+E01C0 VARIATION SELECTOR-209 -->
+<span class="test">󠇁</span> <!-- U+E01C1 VARIATION SELECTOR-210 -->
+<span class="test">󠇂</span> <!-- U+E01C2 VARIATION SELECTOR-211 -->
+<span class="test">󠇃</span> <!-- U+E01C3 VARIATION SELECTOR-212 -->
+<span class="test">󠇄</span> <!-- U+E01C4 VARIATION SELECTOR-213 -->
+<span class="test">󠇅</span> <!-- U+E01C5 VARIATION SELECTOR-214 -->
+<span class="test">󠇆</span> <!-- U+E01C6 VARIATION SELECTOR-215 -->
+<span class="test">󠇇</span> <!-- U+E01C7 VARIATION SELECTOR-216 -->
+<span class="test">󠇈</span> <!-- U+E01C8 VARIATION SELECTOR-217 -->
+<span class="test">󠇉</span> <!-- U+E01C9 VARIATION SELECTOR-218 -->
+<span class="test">󠇊</span> <!-- U+E01CA VARIATION SELECTOR-219 -->
+<span class="test">󠇋</span> <!-- U+E01CB VARIATION SELECTOR-220 -->
+<span class="test">󠇌</span> <!-- U+E01CC VARIATION SELECTOR-221 -->
+<span class="test">󠇍</span> <!-- U+E01CD VARIATION SELECTOR-222 -->
+<span class="test">󠇎</span> <!-- U+E01CE VARIATION SELECTOR-223 -->
+<span class="test">󠇏</span> <!-- U+E01CF VARIATION SELECTOR-224 -->
+<span class="test">󠇐</span> <!-- U+E01D0 VARIATION SELECTOR-225 -->
+<span class="test">󠇑</span> <!-- U+E01D1 VARIATION SELECTOR-226 -->
+<span class="test">󠇒</span> <!-- U+E01D2 VARIATION SELECTOR-227 -->
+<span class="test">󠇓</span> <!-- U+E01D3 VARIATION SELECTOR-228 -->
+<span class="test">󠇔</span> <!-- U+E01D4 VARIATION SELECTOR-229 -->
+<span class="test">󠇕</span> <!-- U+E01D5 VARIATION SELECTOR-230 -->
+<span class="test">󠇖</span> <!-- U+E01D6 VARIATION SELECTOR-231 -->
+<span class="test">󠇗</span> <!-- U+E01D7 VARIATION SELECTOR-232 -->
+<span class="test">󠇘</span> <!-- U+E01D8 VARIATION SELECTOR-233 -->
+<span class="test">󠇙</span> <!-- U+E01D9 VARIATION SELECTOR-234 -->
+<span class="test">󠇚</span> <!-- U+E01DA VARIATION SELECTOR-235 -->
+<span class="test">󠇛</span> <!-- U+E01DB VARIATION SELECTOR-236 -->
+<span class="test">󠇜</span> <!-- U+E01DC VARIATION SELECTOR-237 -->
+<span class="test">󠇝</span> <!-- U+E01DD VARIATION SELECTOR-238 -->
+<span class="test">󠇞</span> <!-- U+E01DE VARIATION SELECTOR-239 -->
+<span class="test">󠇟</span> <!-- U+E01DF VARIATION SELECTOR-240 -->
+<span class="test">󠇠</span> <!-- U+E01E0 VARIATION SELECTOR-241 -->
+<span class="test">󠇡</span> <!-- U+E01E1 VARIATION SELECTOR-242 -->
+<span class="test">󠇢</span> <!-- U+E01E2 VARIATION SELECTOR-243 -->
+<span class="test">󠇣</span> <!-- U+E01E3 VARIATION SELECTOR-244 -->
+<span class="test">󠇤</span> <!-- U+E01E4 VARIATION SELECTOR-245 -->
+<span class="test">󠇥</span> <!-- U+E01E5 VARIATION SELECTOR-246 -->
+<span class="test">󠇦</span> <!-- U+E01E6 VARIATION SELECTOR-247 -->
+<span class="test">󠇧</span> <!-- U+E01E7 VARIATION SELECTOR-248 -->
+<span class="test">󠇨</span> <!-- U+E01E8 VARIATION SELECTOR-249 -->
+<span class="test">󠇩</span> <!-- U+E01E9 VARIATION SELECTOR-250 -->
+<span class="test">󠇪</span> <!-- U+E01EA VARIATION SELECTOR-251 -->
+<span class="test">󠇫</span> <!-- U+E01EB VARIATION SELECTOR-252 -->
+<span class="test">󠇬</span> <!-- U+E01EC VARIATION SELECTOR-253 -->
+<span class="test">󠇭</span> <!-- U+E01ED VARIATION SELECTOR-254 -->
+<span class="test">󠇮</span> <!-- U+E01EE VARIATION SELECTOR-255 -->
+<span class="test">󠇯</span> <!-- U+E01EF VARIATION SELECTOR-256 -->
+</body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-expected.html (0 => 288107)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-expected.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-expected.html 2022-01-18 03:02:17 UTC (rev 288107)
@@ -0,0 +1,16 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Default_ignorable must not be rendered</title>
+<link rel="help" href=""
+<link rel="author" title="Myles C. Maxfield" href=""
+<style>
+span.test {
+ display: inline-block;
+}
+</style>
+</head>
+<body>
+<p>This test makes sure that Default_ignorable code points are not rendered. The test passes if this text you're reading right now is the only thing on the page.</p>
+</body>
+</html>
Added: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable.html (0 => 288107)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable.html (rev 0)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable.html 2022-01-18 03:02:17 UTC (rev 288107)
@@ -0,0 +1,428 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>Default_ignorable must not be rendered</title>
+<link rel="help" href=""
+<link rel="author" title="Myles C. Maxfield" href=""
+<link rel="match" href=""
+<style>
+span.test {
+ display: inline-block;
+}
+</style>
+</head>
+<body>
+<p>This test makes sure that Default_ignorable code points are not rendered. The test passes if this text you're reading right now is the only thing on the page.</p>
+
+<!-- These are all the code points which are assigned and are Default_ignorable, at time of writing. -->
+
+<!-- The spec says "unsupported Default_ignorable characters must be ignored for text rendering."
+The commented-out characters are *supported* Default_ignorable characters in some browser in some font. -->
+
+<!--span class="test">­</span--> <!-- U+00AD SOFT HYPHEN -->
+<span class="test">͏</span> <!-- U+0034F COMBINING GRAPHEME JOINER -->
+<span class="test">؜</span> <!-- U+0061C ARABIC LETTER MARK -->
+<!--span class="test">ᅟ</span--> <!-- U+115F HANGUL CHOSEONG FILLER -->
+<!--span class="test">ᅠ</span--> <!-- U+1160 HANGUL JUNGSEONG FILLER -->
+<!--span class="test">឴</span--> <!-- U+17B4 KHMER VOWEL INHERENT AQ -->
+<!--span class="test">឵</span--> <!-- U+17B5 KHMER VOWEL INHERENT AA -->
+<!--span class="test">᠋</span--> <!-- U+180B MONGOLIAN FREE VARIATION SELECTOR ONE -->
+<!--span class="test">᠌</span--> <!-- U+180C MONGOLIAN FREE VARIATION SELECTOR TWO -->
+<!--span class="test">᠍</span--> <!-- U+180D MONGOLIAN FREE VARIATION SELECTOR THREE -->
+<!--span class="test">᠎</span--> <!-- U+180E MONGOLIAN VOWEL SEPARATOR -->
+<!--span class="test">᠏</span--> <!-- U+180F MONGOLIAN FREE VARIATION SELECTOR FOUR -->
+<span class="test">​</span> <!-- U+200B ZERO WIDTH SPACE -->
+<span class="test">‌</span> <!-- U+200C ZERO WIDTH NON-JOINER -->
+<span class="test">‍</span> <!-- U+200D ZERO WIDTH JOINER -->
+<span class="test">‎</span> <!-- U+200E LEFT-TO-RIGHT MARK -->
+<span class="test">‏</span> <!-- U+200F RIGHT-TO-LEFT MARK -->
+<span class="test">‪</span> <!-- U+202A LEFT-TO-RIGHT EMBEDDING -->
+<span class="test">‫</span> <!-- U+202B RIGHT-TO-LEFT EMBEDDING -->
+<span class="test">‬</span> <!-- U+202C POP DIRECTIONAL FORMATTING -->
+<span class="test">‭</span> <!-- U+202D LEFT-TO-RIGHT OVERRIDE -->
+<span class="test">‮</span> <!-- U+202E RIGHT-TO-LEFT OVERRIDE -->
+<span class="test">⁠</span> <!-- U+2060 WORD JOINER -->
+<span class="test">⁡</span> <!-- U+2061 FUNCTION APPLICATION -->
+<span class="test">⁢</span> <!-- U+2062 INVISIBLE TIMES -->
+<span class="test">⁣</span> <!-- U+2063 INVISIBLE SEPARATOR -->
+<span class="test">⁤</span> <!-- U+2064 INVISIBLE PLUS -->
+<span class="test">⁦</span> <!-- U+2066 LEFT-TO-RIGHT ISOLATE -->
+<span class="test">⁧</span> <!-- U+2067 RIGHT-TO-LEFT ISOLATE -->
+<span class="test">⁨</span> <!-- U+2068 FIRST STRONG ISOLATE -->
+<span class="test">⁩</span> <!-- U+2069 POP DIRECTIONAL ISOLATE -->
+<span class="test"></span> <!-- U+206A INHIBIT SYMMETRIC SWAPPING -->
+<span class="test"></span> <!-- U+206B ACTIVATE SYMMETRIC SWAPPING -->
+<span class="test"></span> <!-- U+206C INHIBIT ARABIC FORM SHAPING -->
+<span class="test"></span> <!-- U+206D ACTIVATE ARABIC FORM SHAPING -->
+<span class="test"></span> <!-- U+206E NATIONAL DIGIT SHAPES -->
+<span class="test"></span> <!-- U+206F NOMINAL DIGIT SHAPES -->
+<!--span class="test">ㅤ</span--> <!-- U+3164 HANGUL FILLER -->
+<span class="test">︀</span> <!-- U+FE00 VARIATION SELECTOR-1 -->
+<span class="test">︁</span> <!-- U+FE01 VARIATION SELECTOR-2 -->
+<span class="test">︂</span> <!-- U+FE02 VARIATION SELECTOR-3 -->
+<span class="test">︃</span> <!-- U+FE03 VARIATION SELECTOR-4 -->
+<span class="test">︄</span> <!-- U+FE04 VARIATION SELECTOR-5 -->
+<span class="test">︅</span> <!-- U+FE05 VARIATION SELECTOR-6 -->
+<span class="test">︆</span> <!-- U+FE06 VARIATION SELECTOR-7 -->
+<span class="test">︇</span> <!-- U+FE07 VARIATION SELECTOR-8 -->
+<span class="test">︈</span> <!-- U+FE08 VARIATION SELECTOR-9 -->
+<span class="test">︉</span> <!-- U+FE09 VARIATION SELECTOR-10 -->
+<span class="test">︊</span> <!-- U+FE0A VARIATION SELECTOR-11 -->
+<span class="test">︋</span> <!-- U+FE0B VARIATION SELECTOR-12 -->
+<span class="test">︌</span> <!-- U+FE0C VARIATION SELECTOR-13 -->
+<span class="test">︍</span> <!-- U+FE0D VARIATION SELECTOR-14 -->
+<span class="test">︎</span> <!-- U+FE0E VARIATION SELECTOR-15 -->
+<span class="test">️</span> <!-- U+FE0F VARIATION SELECTOR-16 -->
+<span class="test"></span> <!-- U+FEFF ZERO WIDTH NO-BREAK SPACE -->
+<span class="test">ᅠ</span> <!-- U+FFA0 HALFWIDTH HANGUL FILLER -->
+<!--span class="test">𛲠</span--> <!-- U+1BCA0 SHORTHAND FORMAT LETTER OVERLAP -->
+<!--span class="test">𛲡</span--> <!-- U+1BCA1 SHORTHAND FORMAT CONTINUING OVERLAP -->
+<!--span class="test">𛲢</span--> <!-- U+1BCA2 SHORTHAND FORMAT DOWN STEP -->
+<!--span class="test">𛲣</span--> <!-- U+1BCA3 SHORTHAND FORMAT UP STEP -->
+<span class="test">𝅳</span> <!-- U+1D173 MUSICAL SYMBOL BEGIN BEAM -->
+<span class="test">𝅴</span> <!-- U+1D174 MUSICAL SYMBOL END BEAM -->
+<span class="test">𝅵</span> <!-- U+1D175 MUSICAL SYMBOL BEGIN TIE -->
+<span class="test">𝅶</span> <!-- U+1D176 MUSICAL SYMBOL END TIE -->
+<span class="test">𝅷</span> <!-- U+1D177 MUSICAL SYMBOL BEGIN SLUR -->
+<span class="test">𝅸</span> <!-- U+1D178 MUSICAL SYMBOL END SLUR -->
+<span class="test">𝅹</span> <!-- U+1D179 MUSICAL SYMBOL BEGIN PHRASE -->
+<span class="test">𝅺</span> <!-- U+1D17A MUSICAL SYMBOL END PHRASE -->
+<span class="test">󠀁</span> <!-- U+E0001 LANGUAGE TAG -->
+<span class="test">󠀠</span> <!-- U+E0020 TAG SPACE -->
+<span class="test">󠀡</span> <!-- U+E0021 TAG EXCLAMATION MARK -->
+<span class="test">󠀢</span> <!-- U+E0022 TAG QUOTATION MARK -->
+<span class="test">󠀣</span> <!-- U+E0023 TAG NUMBER SIGN -->
+<span class="test">󠀤</span> <!-- U+E0024 TAG DOLLAR SIGN -->
+<span class="test">󠀥</span> <!-- U+E0025 TAG PERCENT SIGN -->
+<span class="test">󠀦</span> <!-- U+E0026 TAG AMPERSAND -->
+<span class="test">󠀧</span> <!-- U+E0027 TAG APOSTROPHE -->
+<span class="test">󠀨</span> <!-- U+E0028 TAG LEFT PARENTHESIS -->
+<span class="test">󠀩</span> <!-- U+E0029 TAG RIGHT PARENTHESIS -->
+<span class="test">󠀪</span> <!-- U+E002A TAG ASTERISK -->
+<span class="test">󠀫</span> <!-- U+E002B TAG PLUS SIGN -->
+<span class="test">󠀬</span> <!-- U+E002C TAG COMMA -->
+<span class="test">󠀭</span> <!-- U+E002D TAG HYPHEN-MINUS -->
+<span class="test">󠀮</span> <!-- U+E002E TAG FULL STOP -->
+<span class="test">󠀯</span> <!-- U+E002F TAG SOLIDUS -->
+<span class="test">󠀰</span> <!-- U+E0030 TAG DIGIT ZERO -->
+<span class="test">󠀱</span> <!-- U+E0031 TAG DIGIT ONE -->
+<span class="test">󠀲</span> <!-- U+E0032 TAG DIGIT TWO -->
+<span class="test">󠀳</span> <!-- U+E0033 TAG DIGIT THREE -->
+<span class="test">󠀴</span> <!-- U+E0034 TAG DIGIT FOUR -->
+<span class="test">󠀵</span> <!-- U+E0035 TAG DIGIT FIVE -->
+<span class="test">󠀶</span> <!-- U+E0036 TAG DIGIT SIX -->
+<span class="test">󠀷</span> <!-- U+E0037 TAG DIGIT SEVEN -->
+<span class="test">󠀸</span> <!-- U+E0038 TAG DIGIT EIGHT -->
+<span class="test">󠀹</span> <!-- U+E0039 TAG DIGIT NINE -->
+<span class="test">󠀺</span> <!-- U+E003A TAG COLON -->
+<span class="test">󠀻</span> <!-- U+E003B TAG SEMICOLON -->
+<span class="test">󠀼</span> <!-- U+E003C TAG LESS-THAN SIGN -->
+<span class="test">󠀽</span> <!-- U+E003D TAG EQUALS SIGN -->
+<span class="test">󠀾</span> <!-- U+E003E TAG GREATER-THAN SIGN -->
+<span class="test">󠀿</span> <!-- U+E003F TAG QUESTION MARK -->
+<span class="test">󠁀</span> <!-- U+E0040 TAG COMMERCIAL AT -->
+<span class="test">󠁁</span> <!-- U+E0041 TAG LATIN CAPITAL LETTER A -->
+<span class="test">󠁂</span> <!-- U+E0042 TAG LATIN CAPITAL LETTER B -->
+<span class="test">󠁃</span> <!-- U+E0043 TAG LATIN CAPITAL LETTER C -->
+<span class="test">󠁄</span> <!-- U+E0044 TAG LATIN CAPITAL LETTER D -->
+<span class="test">󠁅</span> <!-- U+E0045 TAG LATIN CAPITAL LETTER E -->
+<span class="test">󠁆</span> <!-- U+E0046 TAG LATIN CAPITAL LETTER F -->
+<span class="test">󠁇</span> <!-- U+E0047 TAG LATIN CAPITAL LETTER G -->
+<span class="test">󠁈</span> <!-- U+E0048 TAG LATIN CAPITAL LETTER H -->
+<span class="test">󠁉</span> <!-- U+E0049 TAG LATIN CAPITAL LETTER I -->
+<span class="test">󠁊</span> <!-- U+E004A TAG LATIN CAPITAL LETTER J -->
+<span class="test">󠁋</span> <!-- U+E004B TAG LATIN CAPITAL LETTER K -->
+<span class="test">󠁌</span> <!-- U+E004C TAG LATIN CAPITAL LETTER L -->
+<span class="test">󠁍</span> <!-- U+E004D TAG LATIN CAPITAL LETTER M -->
+<span class="test">󠁎</span> <!-- U+E004E TAG LATIN CAPITAL LETTER N -->
+<span class="test">󠁏</span> <!-- U+E004F TAG LATIN CAPITAL LETTER O -->
+<span class="test">󠁐</span> <!-- U+E0050 TAG LATIN CAPITAL LETTER P -->
+<span class="test">󠁑</span> <!-- U+E0051 TAG LATIN CAPITAL LETTER Q -->
+<span class="test">󠁒</span> <!-- U+E0052 TAG LATIN CAPITAL LETTER R -->
+<span class="test">󠁓</span> <!-- U+E0053 TAG LATIN CAPITAL LETTER S -->
+<span class="test">󠁔</span> <!-- U+E0054 TAG LATIN CAPITAL LETTER T -->
+<span class="test">󠁕</span> <!-- U+E0055 TAG LATIN CAPITAL LETTER U -->
+<span class="test">󠁖</span> <!-- U+E0056 TAG LATIN CAPITAL LETTER V -->
+<span class="test">󠁗</span> <!-- U+E0057 TAG LATIN CAPITAL LETTER W -->
+<span class="test">󠁘</span> <!-- U+E0058 TAG LATIN CAPITAL LETTER X -->
+<span class="test">󠁙</span> <!-- U+E0059 TAG LATIN CAPITAL LETTER Y -->
+<span class="test">󠁚</span> <!-- U+E005A TAG LATIN CAPITAL LETTER Z -->
+<span class="test">󠁛</span> <!-- U+E005B TAG LEFT SQUARE BRACKET -->
+<span class="test">󠁜</span> <!-- U+E005C TAG REVERSE SOLIDUS -->
+<span class="test">󠁝</span> <!-- U+E005D TAG RIGHT SQUARE BRACKET -->
+<span class="test">󠁞</span> <!-- U+E005E TAG CIRCUMFLEX ACCENT -->
+<span class="test">󠁟</span> <!-- U+E005F TAG LOW LINE -->
+<span class="test">󠁠</span> <!-- U+E0060 TAG GRAVE ACCENT -->
+<span class="test">󠁡</span> <!-- U+E0061 TAG LATIN SMALL LETTER A -->
+<span class="test">󠁢</span> <!-- U+E0062 TAG LATIN SMALL LETTER B -->
+<span class="test">󠁣</span> <!-- U+E0063 TAG LATIN SMALL LETTER C -->
+<span class="test">󠁤</span> <!-- U+E0064 TAG LATIN SMALL LETTER D -->
+<span class="test">󠁥</span> <!-- U+E0065 TAG LATIN SMALL LETTER E -->
+<span class="test">󠁦</span> <!-- U+E0066 TAG LATIN SMALL LETTER F -->
+<span class="test">󠁧</span> <!-- U+E0067 TAG LATIN SMALL LETTER G -->
+<span class="test">󠁨</span> <!-- U+E0068 TAG LATIN SMALL LETTER H -->
+<span class="test">󠁩</span> <!-- U+E0069 TAG LATIN SMALL LETTER I -->
+<span class="test">󠁪</span> <!-- U+E006A TAG LATIN SMALL LETTER J -->
+<span class="test">󠁫</span> <!-- U+E006B TAG LATIN SMALL LETTER K -->
+<span class="test">󠁬</span> <!-- U+E006C TAG LATIN SMALL LETTER L -->
+<span class="test">󠁭</span> <!-- U+E006D TAG LATIN SMALL LETTER M -->
+<span class="test">󠁮</span> <!-- U+E006E TAG LATIN SMALL LETTER N -->
+<span class="test">󠁯</span> <!-- U+E006F TAG LATIN SMALL LETTER O -->
+<span class="test">󠁰</span> <!-- U+E0070 TAG LATIN SMALL LETTER P -->
+<span class="test">󠁱</span> <!-- U+E0071 TAG LATIN SMALL LETTER Q -->
+<span class="test">󠁲</span> <!-- U+E0072 TAG LATIN SMALL LETTER R -->
+<span class="test">󠁳</span> <!-- U+E0073 TAG LATIN SMALL LETTER S -->
+<span class="test">󠁴</span> <!-- U+E0074 TAG LATIN SMALL LETTER T -->
+<span class="test">󠁵</span> <!-- U+E0075 TAG LATIN SMALL LETTER U -->
+<span class="test">󠁶</span> <!-- U+E0076 TAG LATIN SMALL LETTER V -->
+<span class="test">󠁷</span> <!-- U+E0077 TAG LATIN SMALL LETTER W -->
+<span class="test">󠁸</span> <!-- U+E0078 TAG LATIN SMALL LETTER X -->
+<span class="test">󠁹</span> <!-- U+E0079 TAG LATIN SMALL LETTER Y -->
+<span class="test">󠁺</span> <!-- U+E007A TAG LATIN SMALL LETTER Z -->
+<span class="test">󠁻</span> <!-- U+E007B TAG LEFT CURLY BRACKET -->
+<span class="test">󠁼</span> <!-- U+E007C TAG VERTICAL LINE -->
+<span class="test">󠁽</span> <!-- U+E007D TAG RIGHT CURLY BRACKET -->
+<span class="test">󠁾</span> <!-- U+E007E TAG TILDE -->
+<span class="test">󠁿</span> <!-- U+E007F CANCEL TAG -->
+<span class="test">󠄀</span> <!-- U+E0100 VARIATION SELECTOR-17 -->
+<span class="test">󠄁</span> <!-- U+E0101 VARIATION SELECTOR-18 -->
+<span class="test">󠄂</span> <!-- U+E0102 VARIATION SELECTOR-19 -->
+<span class="test">󠄃</span> <!-- U+E0103 VARIATION SELECTOR-20 -->
+<span class="test">󠄄</span> <!-- U+E0104 VARIATION SELECTOR-21 -->
+<span class="test">󠄅</span> <!-- U+E0105 VARIATION SELECTOR-22 -->
+<span class="test">󠄆</span> <!-- U+E0106 VARIATION SELECTOR-23 -->
+<span class="test">󠄇</span> <!-- U+E0107 VARIATION SELECTOR-24 -->
+<span class="test">󠄈</span> <!-- U+E0108 VARIATION SELECTOR-25 -->
+<span class="test">󠄉</span> <!-- U+E0109 VARIATION SELECTOR-26 -->
+<span class="test">󠄊</span> <!-- U+E010A VARIATION SELECTOR-27 -->
+<span class="test">󠄋</span> <!-- U+E010B VARIATION SELECTOR-28 -->
+<span class="test">󠄌</span> <!-- U+E010C VARIATION SELECTOR-29 -->
+<span class="test">󠄍</span> <!-- U+E010D VARIATION SELECTOR-30 -->
+<span class="test">󠄎</span> <!-- U+E010E VARIATION SELECTOR-31 -->
+<span class="test">󠄏</span> <!-- U+E010F VARIATION SELECTOR-32 -->
+<span class="test">󠄐</span> <!-- U+E0110 VARIATION SELECTOR-33 -->
+<span class="test">󠄑</span> <!-- U+E0111 VARIATION SELECTOR-34 -->
+<span class="test">󠄒</span> <!-- U+E0112 VARIATION SELECTOR-35 -->
+<span class="test">󠄓</span> <!-- U+E0113 VARIATION SELECTOR-36 -->
+<span class="test">󠄔</span> <!-- U+E0114 VARIATION SELECTOR-37 -->
+<span class="test">󠄕</span> <!-- U+E0115 VARIATION SELECTOR-38 -->
+<span class="test">󠄖</span> <!-- U+E0116 VARIATION SELECTOR-39 -->
+<span class="test">󠄗</span> <!-- U+E0117 VARIATION SELECTOR-40 -->
+<span class="test">󠄘</span> <!-- U+E0118 VARIATION SELECTOR-41 -->
+<span class="test">󠄙</span> <!-- U+E0119 VARIATION SELECTOR-42 -->
+<span class="test">󠄚</span> <!-- U+E011A VARIATION SELECTOR-43 -->
+<span class="test">󠄛</span> <!-- U+E011B VARIATION SELECTOR-44 -->
+<span class="test">󠄜</span> <!-- U+E011C VARIATION SELECTOR-45 -->
+<span class="test">󠄝</span> <!-- U+E011D VARIATION SELECTOR-46 -->
+<span class="test">󠄞</span> <!-- U+E011E VARIATION SELECTOR-47 -->
+<span class="test">󠄟</span> <!-- U+E011F VARIATION SELECTOR-48 -->
+<span class="test">󠄠</span> <!-- U+E0120 VARIATION SELECTOR-49 -->
+<span class="test">󠄡</span> <!-- U+E0121 VARIATION SELECTOR-50 -->
+<span class="test">󠄢</span> <!-- U+E0122 VARIATION SELECTOR-51 -->
+<span class="test">󠄣</span> <!-- U+E0123 VARIATION SELECTOR-52 -->
+<span class="test">󠄤</span> <!-- U+E0124 VARIATION SELECTOR-53 -->
+<span class="test">󠄥</span> <!-- U+E0125 VARIATION SELECTOR-54 -->
+<span class="test">󠄦</span> <!-- U+E0126 VARIATION SELECTOR-55 -->
+<span class="test">󠄧</span> <!-- U+E0127 VARIATION SELECTOR-56 -->
+<span class="test">󠄨</span> <!-- U+E0128 VARIATION SELECTOR-57 -->
+<span class="test">󠄩</span> <!-- U+E0129 VARIATION SELECTOR-58 -->
+<span class="test">󠄪</span> <!-- U+E012A VARIATION SELECTOR-59 -->
+<span class="test">󠄫</span> <!-- U+E012B VARIATION SELECTOR-60 -->
+<span class="test">󠄬</span> <!-- U+E012C VARIATION SELECTOR-61 -->
+<span class="test">󠄭</span> <!-- U+E012D VARIATION SELECTOR-62 -->
+<span class="test">󠄮</span> <!-- U+E012E VARIATION SELECTOR-63 -->
+<span class="test">󠄯</span> <!-- U+E012F VARIATION SELECTOR-64 -->
+<span class="test">󠄰</span> <!-- U+E0130 VARIATION SELECTOR-65 -->
+<span class="test">󠄱</span> <!-- U+E0131 VARIATION SELECTOR-66 -->
+<span class="test">󠄲</span> <!-- U+E0132 VARIATION SELECTOR-67 -->
+<span class="test">󠄳</span> <!-- U+E0133 VARIATION SELECTOR-68 -->
+<span class="test">󠄴</span> <!-- U+E0134 VARIATION SELECTOR-69 -->
+<span class="test">󠄵</span> <!-- U+E0135 VARIATION SELECTOR-70 -->
+<span class="test">󠄶</span> <!-- U+E0136 VARIATION SELECTOR-71 -->
+<span class="test">󠄷</span> <!-- U+E0137 VARIATION SELECTOR-72 -->
+<span class="test">󠄸</span> <!-- U+E0138 VARIATION SELECTOR-73 -->
+<span class="test">󠄹</span> <!-- U+E0139 VARIATION SELECTOR-74 -->
+<span class="test">󠄺</span> <!-- U+E013A VARIATION SELECTOR-75 -->
+<span class="test">󠄻</span> <!-- U+E013B VARIATION SELECTOR-76 -->
+<span class="test">󠄼</span> <!-- U+E013C VARIATION SELECTOR-77 -->
+<span class="test">󠄽</span> <!-- U+E013D VARIATION SELECTOR-78 -->
+<span class="test">󠄾</span> <!-- U+E013E VARIATION SELECTOR-79 -->
+<span class="test">󠄿</span> <!-- U+E013F VARIATION SELECTOR-80 -->
+<span class="test">󠅀</span> <!-- U+E0140 VARIATION SELECTOR-81 -->
+<span class="test">󠅁</span> <!-- U+E0141 VARIATION SELECTOR-82 -->
+<span class="test">󠅂</span> <!-- U+E0142 VARIATION SELECTOR-83 -->
+<span class="test">󠅃</span> <!-- U+E0143 VARIATION SELECTOR-84 -->
+<span class="test">󠅄</span> <!-- U+E0144 VARIATION SELECTOR-85 -->
+<span class="test">󠅅</span> <!-- U+E0145 VARIATION SELECTOR-86 -->
+<span class="test">󠅆</span> <!-- U+E0146 VARIATION SELECTOR-87 -->
+<span class="test">󠅇</span> <!-- U+E0147 VARIATION SELECTOR-88 -->
+<span class="test">󠅈</span> <!-- U+E0148 VARIATION SELECTOR-89 -->
+<span class="test">󠅉</span> <!-- U+E0149 VARIATION SELECTOR-90 -->
+<span class="test">󠅊</span> <!-- U+E014A VARIATION SELECTOR-91 -->
+<span class="test">󠅋</span> <!-- U+E014B VARIATION SELECTOR-92 -->
+<span class="test">󠅌</span> <!-- U+E014C VARIATION SELECTOR-93 -->
+<span class="test">󠅍</span> <!-- U+E014D VARIATION SELECTOR-94 -->
+<span class="test">󠅎</span> <!-- U+E014E VARIATION SELECTOR-95 -->
+<span class="test">󠅏</span> <!-- U+E014F VARIATION SELECTOR-96 -->
+<span class="test">󠅐</span> <!-- U+E0150 VARIATION SELECTOR-97 -->
+<span class="test">󠅑</span> <!-- U+E0151 VARIATION SELECTOR-98 -->
+<span class="test">󠅒</span> <!-- U+E0152 VARIATION SELECTOR-99 -->
+<span class="test">󠅓</span> <!-- U+E0153 VARIATION SELECTOR-100 -->
+<span class="test">󠅔</span> <!-- U+E0154 VARIATION SELECTOR-101 -->
+<span class="test">󠅕</span> <!-- U+E0155 VARIATION SELECTOR-102 -->
+<span class="test">󠅖</span> <!-- U+E0156 VARIATION SELECTOR-103 -->
+<span class="test">󠅗</span> <!-- U+E0157 VARIATION SELECTOR-104 -->
+<span class="test">󠅘</span> <!-- U+E0158 VARIATION SELECTOR-105 -->
+<span class="test">󠅙</span> <!-- U+E0159 VARIATION SELECTOR-106 -->
+<span class="test">󠅚</span> <!-- U+E015A VARIATION SELECTOR-107 -->
+<span class="test">󠅛</span> <!-- U+E015B VARIATION SELECTOR-108 -->
+<span class="test">󠅜</span> <!-- U+E015C VARIATION SELECTOR-109 -->
+<span class="test">󠅝</span> <!-- U+E015D VARIATION SELECTOR-110 -->
+<span class="test">󠅞</span> <!-- U+E015E VARIATION SELECTOR-111 -->
+<span class="test">󠅟</span> <!-- U+E015F VARIATION SELECTOR-112 -->
+<span class="test">󠅠</span> <!-- U+E0160 VARIATION SELECTOR-113 -->
+<span class="test">󠅡</span> <!-- U+E0161 VARIATION SELECTOR-114 -->
+<span class="test">󠅢</span> <!-- U+E0162 VARIATION SELECTOR-115 -->
+<span class="test">󠅣</span> <!-- U+E0163 VARIATION SELECTOR-116 -->
+<span class="test">󠅤</span> <!-- U+E0164 VARIATION SELECTOR-117 -->
+<span class="test">󠅥</span> <!-- U+E0165 VARIATION SELECTOR-118 -->
+<span class="test">󠅦</span> <!-- U+E0166 VARIATION SELECTOR-119 -->
+<span class="test">󠅧</span> <!-- U+E0167 VARIATION SELECTOR-120 -->
+<span class="test">󠅨</span> <!-- U+E0168 VARIATION SELECTOR-121 -->
+<span class="test">󠅩</span> <!-- U+E0169 VARIATION SELECTOR-122 -->
+<span class="test">󠅪</span> <!-- U+E016A VARIATION SELECTOR-123 -->
+<span class="test">󠅫</span> <!-- U+E016B VARIATION SELECTOR-124 -->
+<span class="test">󠅬</span> <!-- U+E016C VARIATION SELECTOR-125 -->
+<span class="test">󠅭</span> <!-- U+E016D VARIATION SELECTOR-126 -->
+<span class="test">󠅮</span> <!-- U+E016E VARIATION SELECTOR-127 -->
+<span class="test">󠅯</span> <!-- U+E016F VARIATION SELECTOR-128 -->
+<span class="test">󠅰</span> <!-- U+E0170 VARIATION SELECTOR-129 -->
+<span class="test">󠅱</span> <!-- U+E0171 VARIATION SELECTOR-130 -->
+<span class="test">󠅲</span> <!-- U+E0172 VARIATION SELECTOR-131 -->
+<span class="test">󠅳</span> <!-- U+E0173 VARIATION SELECTOR-132 -->
+<span class="test">󠅴</span> <!-- U+E0174 VARIATION SELECTOR-133 -->
+<span class="test">󠅵</span> <!-- U+E0175 VARIATION SELECTOR-134 -->
+<span class="test">󠅶</span> <!-- U+E0176 VARIATION SELECTOR-135 -->
+<span class="test">󠅷</span> <!-- U+E0177 VARIATION SELECTOR-136 -->
+<span class="test">󠅸</span> <!-- U+E0178 VARIATION SELECTOR-137 -->
+<span class="test">󠅹</span> <!-- U+E0179 VARIATION SELECTOR-138 -->
+<span class="test">󠅺</span> <!-- U+E017A VARIATION SELECTOR-139 -->
+<span class="test">󠅻</span> <!-- U+E017B VARIATION SELECTOR-140 -->
+<span class="test">󠅼</span> <!-- U+E017C VARIATION SELECTOR-141 -->
+<span class="test">󠅽</span> <!-- U+E017D VARIATION SELECTOR-142 -->
+<span class="test">󠅾</span> <!-- U+E017E VARIATION SELECTOR-143 -->
+<span class="test">󠅿</span> <!-- U+E017F VARIATION SELECTOR-144 -->
+<span class="test">󠆀</span> <!-- U+E0180 VARIATION SELECTOR-145 -->
+<span class="test">󠆁</span> <!-- U+E0181 VARIATION SELECTOR-146 -->
+<span class="test">󠆂</span> <!-- U+E0182 VARIATION SELECTOR-147 -->
+<span class="test">󠆃</span> <!-- U+E0183 VARIATION SELECTOR-148 -->
+<span class="test">󠆄</span> <!-- U+E0184 VARIATION SELECTOR-149 -->
+<span class="test">󠆅</span> <!-- U+E0185 VARIATION SELECTOR-150 -->
+<span class="test">󠆆</span> <!-- U+E0186 VARIATION SELECTOR-151 -->
+<span class="test">󠆇</span> <!-- U+E0187 VARIATION SELECTOR-152 -->
+<span class="test">󠆈</span> <!-- U+E0188 VARIATION SELECTOR-153 -->
+<span class="test">󠆉</span> <!-- U+E0189 VARIATION SELECTOR-154 -->
+<span class="test">󠆊</span> <!-- U+E018A VARIATION SELECTOR-155 -->
+<span class="test">󠆋</span> <!-- U+E018B VARIATION SELECTOR-156 -->
+<span class="test">󠆌</span> <!-- U+E018C VARIATION SELECTOR-157 -->
+<span class="test">󠆍</span> <!-- U+E018D VARIATION SELECTOR-158 -->
+<span class="test">󠆎</span> <!-- U+E018E VARIATION SELECTOR-159 -->
+<span class="test">󠆏</span> <!-- U+E018F VARIATION SELECTOR-160 -->
+<span class="test">󠆐</span> <!-- U+E0190 VARIATION SELECTOR-161 -->
+<span class="test">󠆑</span> <!-- U+E0191 VARIATION SELECTOR-162 -->
+<span class="test">󠆒</span> <!-- U+E0192 VARIATION SELECTOR-163 -->
+<span class="test">󠆓</span> <!-- U+E0193 VARIATION SELECTOR-164 -->
+<span class="test">󠆔</span> <!-- U+E0194 VARIATION SELECTOR-165 -->
+<span class="test">󠆕</span> <!-- U+E0195 VARIATION SELECTOR-166 -->
+<span class="test">󠆖</span> <!-- U+E0196 VARIATION SELECTOR-167 -->
+<span class="test">󠆗</span> <!-- U+E0197 VARIATION SELECTOR-168 -->
+<span class="test">󠆘</span> <!-- U+E0198 VARIATION SELECTOR-169 -->
+<span class="test">󠆙</span> <!-- U+E0199 VARIATION SELECTOR-170 -->
+<span class="test">󠆚</span> <!-- U+E019A VARIATION SELECTOR-171 -->
+<span class="test">󠆛</span> <!-- U+E019B VARIATION SELECTOR-172 -->
+<span class="test">󠆜</span> <!-- U+E019C VARIATION SELECTOR-173 -->
+<span class="test">󠆝</span> <!-- U+E019D VARIATION SELECTOR-174 -->
+<span class="test">󠆞</span> <!-- U+E019E VARIATION SELECTOR-175 -->
+<span class="test">󠆟</span> <!-- U+E019F VARIATION SELECTOR-176 -->
+<span class="test">󠆠</span> <!-- U+E01A0 VARIATION SELECTOR-177 -->
+<span class="test">󠆡</span> <!-- U+E01A1 VARIATION SELECTOR-178 -->
+<span class="test">󠆢</span> <!-- U+E01A2 VARIATION SELECTOR-179 -->
+<span class="test">󠆣</span> <!-- U+E01A3 VARIATION SELECTOR-180 -->
+<span class="test">󠆤</span> <!-- U+E01A4 VARIATION SELECTOR-181 -->
+<span class="test">󠆥</span> <!-- U+E01A5 VARIATION SELECTOR-182 -->
+<span class="test">󠆦</span> <!-- U+E01A6 VARIATION SELECTOR-183 -->
+<span class="test">󠆧</span> <!-- U+E01A7 VARIATION SELECTOR-184 -->
+<span class="test">󠆨</span> <!-- U+E01A8 VARIATION SELECTOR-185 -->
+<span class="test">󠆩</span> <!-- U+E01A9 VARIATION SELECTOR-186 -->
+<span class="test">󠆪</span> <!-- U+E01AA VARIATION SELECTOR-187 -->
+<span class="test">󠆫</span> <!-- U+E01AB VARIATION SELECTOR-188 -->
+<span class="test">󠆬</span> <!-- U+E01AC VARIATION SELECTOR-189 -->
+<span class="test">󠆭</span> <!-- U+E01AD VARIATION SELECTOR-190 -->
+<span class="test">󠆮</span> <!-- U+E01AE VARIATION SELECTOR-191 -->
+<span class="test">󠆯</span> <!-- U+E01AF VARIATION SELECTOR-192 -->
+<span class="test">󠆰</span> <!-- U+E01B0 VARIATION SELECTOR-193 -->
+<span class="test">󠆱</span> <!-- U+E01B1 VARIATION SELECTOR-194 -->
+<span class="test">󠆲</span> <!-- U+E01B2 VARIATION SELECTOR-195 -->
+<span class="test">󠆳</span> <!-- U+E01B3 VARIATION SELECTOR-196 -->
+<span class="test">󠆴</span> <!-- U+E01B4 VARIATION SELECTOR-197 -->
+<span class="test">󠆵</span> <!-- U+E01B5 VARIATION SELECTOR-198 -->
+<span class="test">󠆶</span> <!-- U+E01B6 VARIATION SELECTOR-199 -->
+<span class="test">󠆷</span> <!-- U+E01B7 VARIATION SELECTOR-200 -->
+<span class="test">󠆸</span> <!-- U+E01B8 VARIATION SELECTOR-201 -->
+<span class="test">󠆹</span> <!-- U+E01B9 VARIATION SELECTOR-202 -->
+<span class="test">󠆺</span> <!-- U+E01BA VARIATION SELECTOR-203 -->
+<span class="test">󠆻</span> <!-- U+E01BB VARIATION SELECTOR-204 -->
+<span class="test">󠆼</span> <!-- U+E01BC VARIATION SELECTOR-205 -->
+<span class="test">󠆽</span> <!-- U+E01BD VARIATION SELECTOR-206 -->
+<span class="test">󠆾</span> <!-- U+E01BE VARIATION SELECTOR-207 -->
+<span class="test">󠆿</span> <!-- U+E01BF VARIATION SELECTOR-208 -->
+<span class="test">󠇀</span> <!-- U+E01C0 VARIATION SELECTOR-209 -->
+<span class="test">󠇁</span> <!-- U+E01C1 VARIATION SELECTOR-210 -->
+<span class="test">󠇂</span> <!-- U+E01C2 VARIATION SELECTOR-211 -->
+<span class="test">󠇃</span> <!-- U+E01C3 VARIATION SELECTOR-212 -->
+<span class="test">󠇄</span> <!-- U+E01C4 VARIATION SELECTOR-213 -->
+<span class="test">󠇅</span> <!-- U+E01C5 VARIATION SELECTOR-214 -->
+<span class="test">󠇆</span> <!-- U+E01C6 VARIATION SELECTOR-215 -->
+<span class="test">󠇇</span> <!-- U+E01C7 VARIATION SELECTOR-216 -->
+<span class="test">󠇈</span> <!-- U+E01C8 VARIATION SELECTOR-217 -->
+<span class="test">󠇉</span> <!-- U+E01C9 VARIATION SELECTOR-218 -->
+<span class="test">󠇊</span> <!-- U+E01CA VARIATION SELECTOR-219 -->
+<span class="test">󠇋</span> <!-- U+E01CB VARIATION SELECTOR-220 -->
+<span class="test">󠇌</span> <!-- U+E01CC VARIATION SELECTOR-221 -->
+<span class="test">󠇍</span> <!-- U+E01CD VARIATION SELECTOR-222 -->
+<span class="test">󠇎</span> <!-- U+E01CE VARIATION SELECTOR-223 -->
+<span class="test">󠇏</span> <!-- U+E01CF VARIATION SELECTOR-224 -->
+<span class="test">󠇐</span> <!-- U+E01D0 VARIATION SELECTOR-225 -->
+<span class="test">󠇑</span> <!-- U+E01D1 VARIATION SELECTOR-226 -->
+<span class="test">󠇒</span> <!-- U+E01D2 VARIATION SELECTOR-227 -->
+<span class="test">󠇓</span> <!-- U+E01D3 VARIATION SELECTOR-228 -->
+<span class="test">󠇔</span> <!-- U+E01D4 VARIATION SELECTOR-229 -->
+<span class="test">󠇕</span> <!-- U+E01D5 VARIATION SELECTOR-230 -->
+<span class="test">󠇖</span> <!-- U+E01D6 VARIATION SELECTOR-231 -->
+<span class="test">󠇗</span> <!-- U+E01D7 VARIATION SELECTOR-232 -->
+<span class="test">󠇘</span> <!-- U+E01D8 VARIATION SELECTOR-233 -->
+<span class="test">󠇙</span> <!-- U+E01D9 VARIATION SELECTOR-234 -->
+<span class="test">󠇚</span> <!-- U+E01DA VARIATION SELECTOR-235 -->
+<span class="test">󠇛</span> <!-- U+E01DB VARIATION SELECTOR-236 -->
+<span class="test">󠇜</span> <!-- U+E01DC VARIATION SELECTOR-237 -->
+<span class="test">󠇝</span> <!-- U+E01DD VARIATION SELECTOR-238 -->
+<span class="test">󠇞</span> <!-- U+E01DE VARIATION SELECTOR-239 -->
+<span class="test">󠇟</span> <!-- U+E01DF VARIATION SELECTOR-240 -->
+<span class="test">󠇠</span> <!-- U+E01E0 VARIATION SELECTOR-241 -->
+<span class="test">󠇡</span> <!-- U+E01E1 VARIATION SELECTOR-242 -->
+<span class="test">󠇢</span> <!-- U+E01E2 VARIATION SELECTOR-243 -->
+<span class="test">󠇣</span> <!-- U+E01E3 VARIATION SELECTOR-244 -->
+<span class="test">󠇤</span> <!-- U+E01E4 VARIATION SELECTOR-245 -->
+<span class="test">󠇥</span> <!-- U+E01E5 VARIATION SELECTOR-246 -->
+<span class="test">󠇦</span> <!-- U+E01E6 VARIATION SELECTOR-247 -->
+<span class="test">󠇧</span> <!-- U+E01E7 VARIATION SELECTOR-248 -->
+<span class="test">󠇨</span> <!-- U+E01E8 VARIATION SELECTOR-249 -->
+<span class="test">󠇩</span> <!-- U+E01E9 VARIATION SELECTOR-250 -->
+<span class="test">󠇪</span> <!-- U+E01EA VARIATION SELECTOR-251 -->
+<span class="test">󠇫</span> <!-- U+E01EB VARIATION SELECTOR-252 -->
+<span class="test">󠇬</span> <!-- U+E01EC VARIATION SELECTOR-253 -->
+<span class="test">󠇭</span> <!-- U+E01ED VARIATION SELECTOR-254 -->
+<span class="test">󠇮</span> <!-- U+E01EE VARIATION SELECTOR-255 -->
+<span class="test">󠇯</span> <!-- U+E01EF VARIATION SELECTOR-256 -->
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (288106 => 288107)
--- trunk/Source/WebCore/ChangeLog 2022-01-18 01:39:05 UTC (rev 288106)
+++ trunk/Source/WebCore/ChangeLog 2022-01-18 03:02:17 UTC (rev 288107)
@@ -1,3 +1,35 @@
+2022-01-17 Myles C. Maxfield <[email protected]>
+
+ REGRESSION(r281389): using font-variant-ligatures causes Unicode bidi isolation control characters to render
+ https://bugs.webkit.org/show_bug.cgi?id=235053
+ <rdar://problem/87425066>
+
+ Reviewed by Darin Adler.
+
+ The spec says (https://drafts.csswg.org/css-text-3/#white-space-processing)
+
+ > unsupported Default_ignorable characters must be ignored for text rendering.
+
+ Previously, we were handling this by mapping the characters to the zero width space character. r281389 changed
+ that to be more faithful to the original string (and not do the mapping). One somewhat unexpected result of
+ this patch was that, now that we're not mapping these code points to the zero width space character, fewer fonts
+ on the system will support those code points. It became much more common for no font at all to support the code
+ point in question. r281389 handled the situation where the code points were supported by a font but shouldn't be
+ rendered, but didn't handle the case where the code points *weren't* supported by any fonts (in the complex text
+ codepath). This patch updates that path to handle it.
+
+ This patch also replaces our previous hardcoded list of Default_ignorable characters with the proper call to ICU
+ to check the Unicode property. It does this in both the fast text codepath and the simple text codepath, to make
+ sure they match.
+
+ Tests: imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable-complex.html
+ imported/w3c/web-platform-tests/css/css-text/white-space/default-ignorable.html
+
+ * platform/graphics/ComplexTextController.cpp:
+ (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
+ * platform/graphics/WidthIterator.cpp:
+ (WebCore::WidthIterator::applyCSSVisibilityRules):
+
2022-01-17 ChangSeok Oh <[email protected]>
[GTK] Implement form validation with gtk3 widgets in the UI process
Modified: trunk/Source/WebCore/platform/graphics/ComplexTextController.cpp (288106 => 288107)
--- trunk/Source/WebCore/platform/graphics/ComplexTextController.cpp 2022-01-18 01:39:05 UTC (rev 288106)
+++ trunk/Source/WebCore/platform/graphics/ComplexTextController.cpp 2022-01-18 03:02:17 UTC (rev 288107)
@@ -828,9 +828,13 @@
m_coreTextIndices.reserveInitialCapacity(runLengthInCodeUnits);
unsigned r = m_indexBegin;
while (r < m_indexEnd) {
- m_coreTextIndices.uncheckedAppend(r);
+ auto currentIndex = r;
UChar32 character;
U16_NEXT(m_characters, r, m_stringLength, character);
+ // https://drafts.csswg.org/css-text-3/#white-space-processing
+ // "Unsupported Default_ignorable characters must be ignored for text rendering."
+ if (!FontCascade::isCharacterWhoseGlyphsShouldBeDeletedForTextRendering(character))
+ m_coreTextIndices.uncheckedAppend(currentIndex);
}
m_glyphCount = m_coreTextIndices.size();
if (!ltr) {
Modified: trunk/Source/WebCore/platform/graphics/FontCascade.h (288106 => 288107)
--- trunk/Source/WebCore/platform/graphics/FontCascade.h 2022-01-18 01:39:05 UTC (rev 288106)
+++ trunk/Source/WebCore/platform/graphics/FontCascade.h 2022-01-18 03:02:17 UTC (rev 288107)
@@ -260,6 +260,16 @@
FontSelector* fontSelector() const;
static bool treatAsSpace(UChar32 c) { return c == space || c == tabCharacter || c == newlineCharacter || c == noBreakSpace; }
+ static bool isCharacterWhoseGlyphsShouldBeDeletedForTextRendering(UChar32 character)
+ {
+ // https://drafts.csswg.org/css-text-3/#white-space-processing
+ // "Unsupported Default_ignorable characters must be ignored for text rendering."
+ return (character >= nullCharacter && character < space)
+ || (character >= deleteCharacter && character < noBreakSpace)
+ || character == objectReplacementCharacter
+ || u_hasBinaryProperty(character, UCHAR_DEFAULT_IGNORABLE_CODE_POINT);
+ }
+ // FIXME: Callers of treatAsZeroWidthSpace() and treatAsZeroWidthSpaceInComplexScript() should probably be calling isCharacterWhoseGlyphsShouldBeDeletedForTextRendering() instead.
static bool treatAsZeroWidthSpace(UChar32 c) { return treatAsZeroWidthSpaceInComplexScript(c) || c == zeroWidthNonJoiner || c == zeroWidthJoiner; }
static bool treatAsZeroWidthSpaceInComplexScript(UChar32 c) { return c < space || (c >= deleteCharacter && c < noBreakSpace) || c == softHyphen || c == zeroWidthSpace || (c >= leftToRightMark && c <= rightToLeftMark) || (c >= leftToRightEmbed && c <= rightToLeftOverride) || c == zeroWidthNoBreakSpace || c == objectReplacementCharacter; }
static bool canReceiveTextEmphasis(UChar32);
Modified: trunk/Source/WebCore/platform/graphics/WidthIterator.cpp (288106 => 288107)
--- trunk/Source/WebCore/platform/graphics/WidthIterator.cpp 2022-01-18 01:39:05 UTC (rev 288106)
+++ trunk/Source/WebCore/platform/graphics/WidthIterator.cpp 2022-01-18 03:02:17 UTC (rev 288107)
@@ -616,32 +616,12 @@
adjustForSyntheticBold(i);
- if ((characterResponsibleForThisGlyph >= nullCharacter && characterResponsibleForThisGlyph < space)
- || (characterResponsibleForThisGlyph >= deleteCharacter && characterResponsibleForThisGlyph < noBreakSpace)) {
+ // https://drafts.csswg.org/css-text-3/#white-space-processing
+ // "Unsupported Default_ignorable characters must be ignored for text rendering."
+ if (FontCascade::isCharacterWhoseGlyphsShouldBeDeletedForTextRendering(characterResponsibleForThisGlyph)) {
deleteGlyph(i);
continue;
}
-
- switch (characterResponsibleForThisGlyph) {
- case softHyphen:
- case leftToRightMark:
- case rightToLeftMark:
- case leftToRightEmbed:
- case rightToLeftEmbed:
- case leftToRightOverride:
- case rightToLeftOverride:
- case leftToRightIsolate:
- case rightToLeftIsolate:
- case zeroWidthNonJoiner:
- case zeroWidthJoiner:
- case popDirectionalFormatting:
- case popDirectionalIsolate:
- case firstStrongIsolate:
- case objectReplacementCharacter:
- case zeroWidthNoBreakSpace:
- deleteGlyph(i);
- continue;
- }
}
}