From 35c74966799dd22a8cfe6f0a04ae8a7e25297309 Mon Sep 17 00:00:00 2001 From: Reilly Grant Date: Wed, 29 Jul 2026 14:20:09 -0700 Subject: [PATCH] Remove duplicate language availability definitions The definitions of the "computing language availability" and "getting the language availabilities partition" algorithms as well as the "language availabilities partition" concept are already present in the Writing Assistance APIs specification. This change removes them from the Prooferreader API specification. --- index.bs | 72 +++++++------------------------------------------------- 1 file changed, 8 insertions(+), 64 deletions(-) diff --git a/index.bs b/index.bs index 0e0f826..e095192 100644 --- a/index.bs +++ b/index.bs @@ -15,6 +15,13 @@ Assume Explicit For: yes Die On: warning + +
 urlPrefix: https://tc39.es/ecma402/; spec: ECMA-402
     type: dfn; text: [[AvailableLocales]]; url: sec-internal-slots
@@ -228,7 +235,7 @@ enum CorrectionType { "spelling", "punctuation", "capitalization", "grammar" };
 
A common setup seen in today's software is to support two types of written Chinese: "traditional Chinese" and "simplified Chinese". Let's suppose that the user agent supports proofreading text written in traditional Chinese with no downloads, and simplified Chinese after a download. - One way this could be implemented would be for [=proofreader language availabilities double=] to return that "`zh-Hant`" is in the [=language availabilities double/input languages=]["{{Availability/available}}"] set, and "`zh`" and "`zh-Hans`" are in the [=language availabilities double/input languages=]["{{Availability/downloadable}}"] set. This return value conforms to the requirements of the language tag set completeness rules, in ensuring that "`zh`" is present. Per the "should"-level guidance, the implementation has determined that "`zh`" belongs in the set of downloadable input languages, with "`zh-Hans`", instead of in the set of available input languages, with "`zh-Hant`". + One way this could be implemented would be for [=proofreader language availabilities double=] to return that "`zh-Hant`" is in the [=language availabilities double/input languages=]["{{Availability/available}}"] set, and "`zh`" and "`zh-Hans`" are in the [=language availabilities double/input languages=]["{{Availability/downloadable}}"] set. This return value conforms to the requirements of the language tag set completeness rules, in ensuring that "`zh`" is present. Per the [=get the language availabilities partition=] algorithm steps, the implementation has determined that "`zh`" belongs in the set of downloadable input languages, with "`zh-Hans`", instead of in the set of available input languages, with "`zh-Hant`". Combined with the use of [$LookupMatchingLocaleByBestFit$], this means {{Proofreader/availability()}} will give the following answers: @@ -254,73 +261,11 @@ enum CorrectionType { "spelling", "punctuation", "capitalization", "grammar" };

Language availability

-A language availabilities partition is a [=map=] whose [=map/keys=] are "{{Availability/downloading}}", "{{Availability/downloadable}}", or "{{Availability/available}}", and whose [=map/values=] are [=sets=] of strings representing [=Unicode canonicalized locale identifiers=]. [[!ECMA-402]] - A language availabilities double is a [=struct=] with the following [=struct/items=]: * input languages, a [=language availabilities partition=] * correction explanation languages, a [=language availabilities partition=] -
- To get the language availabilities partition given a description |purpose| of the purpose for which we're checking language availability: - - 1. Let |partition| be «[ "{{Availability/available}}" → an empty [=set=], "{{Availability/downloading}}" → an empty [=set=], "{{Availability/downloadable}}" → an empty [=set=] ]». - - 1. [=list/For each=] human language |languageTag|, represented as a [=Unicode canonicalized locale identifier=], for which the user agent [=model availability/currently supports=] |purpose|: - - 1. [=set/Append=] |languageTag| to |partition|["{{Availability/available}}"]. - - 1. [=list/For each=] human language |languageTag|, represented as a [=Unicode canonicalized locale identifier=], for which the user agent believes it will be able to [=model availability/support=] |purpose|, but only after finishing a download that is already ongoing: - - 1. [=set/Append=] |languageTag| to |partition|["{{Availability/downloading}}"]. - - 1. [=list/For each=] human language |languageTag|, represented as a [=Unicode canonicalized locale identifier=], for which the user agent believes it will be able to [=model availability/support=] |purpose|, but only after performing a not-currently-ongoing download: - - 1. [=set/Append=] |languageTag| to |partition|["{{Availability/downloadable}}"]. - - 1. [=Assert=]: |partition|["{{Availability/available}}"], |partition|["{{Availability/downloading}}"], and |partition|["{{Availability/downloadable}}"] are disjoint. - - 1. If the [=set/union=] of |partition|["{{Availability/available}}"], |partition|["{{Availability/downloading}}"], and |partition|["{{Availability/downloadable}}"] does not meet the language tag set completeness rules, then: - - 1. Let |missingLanguageTags| be the [=set=] of missing language tags necessary for that union to meet the language tag set completeness rules. - - 1. [=set/For each=] |languageTag| of |missingLanguageTags|: - - 1. [=set/Append=] |languageTag| to one of the three sets. Which of the sets to append to is [=implementation-defined=], and should be guided by considerations similar to that of [$LookupMatchingLocaleByBestFit$] in terms of keeping "best fallback languages" together. - - 1. Return |partition|. -
- -
- To compute language availability given an [=ordered set=] of strings |requestedLanguages| and a [=language availabilities partition=] |partition|, perform the following steps. They return an {{Availability}} value, and they mutate |requestedLanguages| in place to update language tags to their best-fit matches. - - 1. Let |availability| be "{{Availability/available}}". - - 1. [=set/For each=] |language| of |requestedLanguages|: - - 1. Let |unavailable| be true. - - 1. [=list/For each=] |availabilityToCheck| of « "{{Availability/available}}", "{{Availability/downloading}}", "{{Availability/downloadable}}" »: - - 1. Let |languagesWithThisAvailability| be |partition|[|availabilityToCheck|]. - - 1. Let |bestMatch| be [$LookupMatchingLocaleByBestFit$](|languagesWithThisAvailability|, « |language| »). - - 1. If |bestMatch| is not undefined, then: - - 1. [=list/Replace=] |language| with |bestMatch|.\[[locale]] in |requestedLanguages|. - - 1. Set |availability| to the [=Availability/minimum availability=] given |availability| and |availabilityToCheck|. - - 1. Set |unavailable| to false. - - 1. [=iteration/Break=]. - - 1. If |unavailable| is true, then return "{{Availability/unavailable}}". - - 1. Return |availability|. -
-

The {{Proofreader}} class

Every {{Proofreader}} has a include correction type, a [=boolean=] or default to false, set during creation. @@ -545,4 +490,3 @@ Please see [[WRITING-ASSISTANCE-APIS#privacy]] for a discussion of privacy consi

Security considerations

Please see [[WRITING-ASSISTANCE-APIS#security]] for a discussion of security considerations for the translator and language detector APIs. That text was written to apply to all APIs sharing the same infrastructure, as noted in [[#dependencies]]. -