Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Update .NET 5 Unicode data to version 13.0.0 - #33538

Merged
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13
Mar 15, 2020
Merged

Update .NET 5 Unicode data to version 13.0.0#33538
GrabYourPitchforks merged 4 commits into
dotnet:masterfrom
GrabYourPitchforks:unicode_13

Conversation

@GrabYourPitchforks

Copy link
Copy Markdown
Member

Fixes#2378. See that issue for the steps taken to generate these files.

Note to reviewers: This PR is marked as NO MERGE because it's based on top of #33511. Once that PR is committed I can rebase this on top of master, remove the label, and commit. Ignore the changes in the eng/ directory since they ultimately won't be part of this PR. The rest of the PR is ready for review.

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced. I ran the tool in that directory against the latest UnicodeData.txt file to regenerate this file's contents. Feel free to review commit 12ef246 in isolation.

@ericstj I added you since I updated the third party copyrights file at the repo root to point to Unicode's new license URL and wanted to make sure everything was ok. Feel free to review commit f9dc373 in isolation.

@GrabYourPitchforksGrabYourPitchforks added NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) area-System.Globalization labels Mar 13, 2020
@GrabYourPitchforksGrabYourPitchforks added this to the 5.0 milestone Mar 13, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

The following is an incomplete list of types which are affected by this PR (list taken from #2378) since they ultimately rely on the underlying Unicode data.

  • System.Globalization.StringInfo
  • System.Globalization.CharUnicodeInfo
  • System.Text.Encodings.Web.*
  • System.Text.Json.* (since it depends on System.Text.Encodings.Web)

Other types hich call into the above (examples: System.Char, System.Uri, System.Text.Rune, System.RegularExpressions.Regex) will also see the new data plumbed through.

See http://blog.unicode.org/2020/03/announcing-unicode-standard-version-130.html for more information on the changes made to Unicode 13.0. Note that since Unicode 13.0 adds no new blocks to the Basic Multilingual Plane, there are no public API changes required to the existing System.Text.Unicode.UnicodeRanges type.

For letter characters which were introduced into existing blocks in the Basic Multilingual Plane (e.g., U+31BD BOPOMOFO LETTER KW), the UnsafeRelaxedJavaScriptEncoder will now detect these as valid characters and allow them to pass through unescaped.

@tarekgh

Copy link
Copy Markdown
Member

LGTM. any idea how much increase in the data size? just curious :-)

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

GenUnicodeProp run output follows. Looks like around a 320 byte increase, give or take some padding?

Unicode 12.1 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 97 [ 6208]*
level 3: 690 [11040]
Total: 19424
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 76 [ 4864]*
level 3: 378 [ 6048]
Total: 13088

Unicode 13.0 UCD

CategoryCasingMap contains 56 entries.
NumericGraphemeMap contains 177 entries.
Process 11:5:4 table CategoryCasingTable.
level 1: 2176 [ 2176]
level 2: 98 [ 6272]*
level 3: 699 [11184]
Total: 19632
Process 11:5:4 table NumericGraphemeTable.
level 1: 2176 [ 2176]
level 2: 77 [ 4928]*
level 3: 381 [ 6096]
Total: 13200

@MichalStrehovsky

Copy link
Copy Markdown
Member

@MichalStrehovsky I added you since this PR touches unicodedata.cpp, which you introduced

Whoa, that brings back some repressed memories. LGTM.

@stephentoub

Copy link
Copy Markdown
Member

@GrabYourPitchforks, should I feel good or bad that no tests had to be modified anywhere?

@GrabYourPitchforks

GrabYourPitchforks commented Mar 13, 2020

Copy link
Copy Markdown
MemberAuthor

@stephentoub I verified that updating the runtime caused unit tests to fail until the test .csproj files were also updated to reference v13.0. So the unit test projects were updated, just not the unit test code. :)

(The unit tests in System.Text.Encodings.Web, System.Runtime, and System.Globalization all parse the Unicode files themselves and generate the appropriate test cases on-the-fly, validating that the runtime has the expected behavior.)

@stephentoub

Copy link
Copy Markdown
Member

Thanks, understood. What I meant was, you didn't have to change any tests, which means there aren't any tests directly expecting certain values that may have changed here. I'm wondering if we're happy about that or sad about that.

@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

Got confirmation offline that the third party license file changes are ok.

Comment threadsrc/libraries/System.Text.Encodings.Web/tools/updating-encodings.md Outdated

@am11am11Mar 14, 2020

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@MichalStrehovsky, could this be a header-only or does adding .cpp in addition to .h file give some advantage? I realize that it is an auto-generated code file, UnicodeData[] can still can be packed in the header (i.e. .h file can be auto-generated with some glued structs which are currently declared there).
just wondering about your thoughts on .cpp vs. header-only approach in this case. :)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there an advantage of header-only besides having one less file?

I generally prefer .h/.cpp split because long time ago when I did a lot of C++, precompiled headers were a PITA to deal with and from observing where C++ is heading with modules and all, people still didn't figure it out. This is a big data structure to re-parse every time the file is included. I now try to stay away from C++ as much as possible so I might not be up to date.

@GrabYourPitchforksGrabYourPitchforks added the blocked Issue/PR is blocked on something - see comments label Mar 14, 2020
@GrabYourPitchforks

GrabYourPitchforks commented Mar 14, 2020

Copy link
Copy Markdown
MemberAuthor

Force-pushing with a rebase atop b22719b. No code changes since the initial PR other than the rebase.

@GrabYourPitchforksGrabYourPitchforks removed NO-MERGE The PR is not ready for merge yet (see discussion for detailed reasons) blocked Issue/PR is blocked on something - see comments labels Mar 14, 2020
@GrabYourPitchforks

Copy link
Copy Markdown
MemberAuthor

/azp run runtime

@dotnetdotnet deleted a comment from azure-pipelinesBotMar 15, 2020
@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@GrabYourPitchforks
GrabYourPitchforks merged commit 30fd787 into dotnet:masterMar 15, 2020
@GrabYourPitchforks
GrabYourPitchforks deleted the unicode_13 branch March 15, 2020 06:53
@ghostghost locked as resolved and limited conversation to collaborators Dec 10, 2020
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Update .NET 5 Unicode data to version 13.0.0

6 participants

@GrabYourPitchforks@tarekgh@MichalStrehovsky@stephentoub@lpereira@am11