From 3199aeb33c1a1811e99bae71a217aeee28d20699 Mon Sep 17 00:00:00 2001 From: reffy-bot <> Date: Wed, 24 Jul 2024 01:47:17 +0000 Subject: [PATCH] Update of TR report from new reffy run Using reffy commit 16.1.2. --- tr/algorithms/FileAPI.json | 36 +- tr/algorithms/IndexedDB-3.json | 140 ++-- tr/algorithms/SVG2.json | 90 +-- tr/algorithms/clipboard-apis.json | 86 +- tr/algorithms/contact-picker.json | 14 +- tr/algorithms/credential-management-1.json | 4 +- tr/algorithms/css-anchor-position-1.json | 4 +- tr/algorithms/css-animation-worklet-1.json | 4 +- tr/algorithms/css-cascade-4.json | 2 +- tr/algorithms/css-color-4.json | 10 +- tr/algorithms/css-conditional-5.json | 46 ++ tr/algorithms/css-flexbox-1.json | 2 +- tr/algorithms/css-grid-1.json | 8 +- tr/algorithms/css-grid-2.json | 8 +- tr/algorithms/css-images-4.json | 4 +- tr/algorithms/css-layout-api-1.json | 38 +- tr/algorithms/css-nav-1.json | 12 +- tr/algorithms/css-paint-api-1.json | 12 +- .../css-properties-values-api-1.json | 2 +- tr/algorithms/css-scroll-anchoring-1.json | 2 +- tr/algorithms/css-syntax-3.json | 4 +- tr/algorithms/css-tables-3.json | 26 +- tr/algorithms/css-typed-om-1.json | 76 +- tr/algorithms/css-values-4.json | 28 +- tr/algorithms/css-view-transitions-1.json | 50 +- tr/algorithms/css-view-transitions-2.json | 4 +- tr/algorithms/device-posture.json | 2 +- tr/algorithms/event-timing.json | 44 +- tr/algorithms/fetch-metadata.json | 2 +- tr/algorithms/fill-stroke-3.json | 14 +- tr/algorithms/json-ld11-api.json | 22 +- tr/algorithms/largest-contentful-paint.json | 4 +- tr/algorithms/mediacapture-streams.json | 24 +- tr/algorithms/orientation-event.json | 40 +- tr/algorithms/permissions-policy-1.json | 2 +- tr/algorithms/permissions.json | 16 +- tr/algorithms/rdf-canon.json | 6 +- tr/algorithms/service-workers.json | 224 +++--- tr/algorithms/uievents-key.json | 6 +- tr/algorithms/uievents.json | 44 +- tr/algorithms/wasm-js-api-2.json | 160 ++-- tr/algorithms/wasm-web-api-2.json | 8 +- tr/algorithms/web-animations-1.json | 4 +- tr/algorithms/web-animations-2.json | 2 +- tr/algorithms/web-locks.json | 32 +- tr/algorithms/webaudio.json | 68 +- tr/algorithms/webauthn-3.json | 20 +- tr/algorithms/webdriver2.json | 14 +- tr/algorithms/webgpu.json | 434 +++++----- tr/algorithms/webnn.json | 100 +-- tr/algorithms/webrtc.json | 38 +- tr/algorithms/webtransport.json | 76 +- tr/algorithms/webvtt1.json | 2 +- tr/algorithms/webxr-depth-sensing-1.json | 12 +- tr/algorithms/webxr-hand-input-1.json | 12 +- tr/algorithms/webxr-hit-test-1.json | 12 +- .../webxr-lighting-estimation-1.json | 18 +- tr/algorithms/webxr.json | 112 +-- tr/algorithms/webxrlayers-1.json | 80 +- tr/algorithms/window-management.json | 6 +- tr/css/css-conditional-5.json | 222 +++++- tr/dfns/WGSL.json | 19 + tr/dfns/css-conditional-5.json | 751 +++++++++++++++++- tr/headings/css-conditional-5.json | 166 +++- .../mse-byte-stream-format-registry.json | 13 +- tr/idl/css-conditional-5.idl | 10 + tr/ids/WGSL.json | 548 ++++++------- tr/ids/css-conditional-5.json | 626 +++++++++++++-- tr/ids/mse-byte-stream-format-registry.json | 8 +- tr/ids/webdriver2.json | 12 +- tr/index.json | 64 +- tr/links/css-conditional-5.json | 310 ++++++-- tr/links/mse-byte-stream-format-registry.json | 5 +- tr/refs/css-conditional-5.json | 100 ++- tr/refs/mse-byte-stream-format-registry.json | 14 +- 75 files changed, 3565 insertions(+), 1675 deletions(-) create mode 100644 tr/algorithms/css-conditional-5.json create mode 100644 tr/idl/css-conditional-5.idl diff --git a/tr/algorithms/FileAPI.json b/tr/algorithms/FileAPI.json index 738b9540f130..4e59b0ab4cd6 100644 --- a/tr/algorithms/FileAPI.json +++ b/tr/algorithms/FileAPI.json @@ -14,7 +14,7 @@ "html": "
Let originalSize be blob’s size
.
Blob
blob, start, end, and contentType is used to refer to the following\nsteps and returns a new Blob
containing the bytes ranging from the start parameter\nup to but not including the end parameter. It must act as follows:",
+ "html": "The start parameter, if non-null, is a value for the start point of a slice blob call, and must be treated as a byte-order position, with the zeroth position representing the\n first byte. User agents must normalize start according to the following:",
"rationale": "if",
"steps": [
{
@@ -29,7 +29,7 @@
]
},
{
- "html": "The slice blob algorithm given a Blob
blob, start, end, and contentType is used to refer to the following\nsteps and returns a new Blob
containing the bytes ranging from the start parameter\nup to but not including the end parameter. It must act as follows:",
+ "html": "The end parameter, if non-null. is a value for the end point of a slice blob call. User agents must normalize end according to the following:",
"rationale": "if",
"steps": [
{
@@ -44,14 +44,14 @@
]
},
{
- "html": "The slice blob algorithm given a Blob
blob, start, end, and contentType is used to refer to the following\nsteps and returns a new Blob
containing the bytes ranging from the start parameter\nup to but not including the end parameter. It must act as follows:",
+ "html": "The contentType parameter, if non-null, is used to set the ASCII-encoded string in\n lower case representing the media type of the Blob
. User agents must normalize contentType according to the following:",
"rationale": "if",
"steps": [
{
"html": "If contentType is null, let relativeContentType be set to the empty\n string."
},
{
- "html": "The slice blob algorithm given a Blob
blob, start, end, and contentType is used to refer to the following\nsteps and returns a new Blob
containing the bytes ranging from the start parameter\nup to but not including the end parameter. It must act as follows:",
+ "html": "Otherwise, let relativeContentType be set to contentType and run the\n substeps below:",
"rationale": "if",
"steps": [
{
@@ -112,18 +112,18 @@
"html": "Set up stream with byte reading support.
" }, { - "html": "ABlob
blob has an associated get stream algorithm,\nwhich runs these steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "while",
"steps": [
{
- "html": "A Blob
blob has an associated get stream algorithm,\nwhich runs these steps:",
+ "html": "While not all bytes of blob have been read:",
"rationale": "let",
"steps": [
{
"html": "Let bytes be the byte sequence that results from reading a chunk from blob, or\n failure if a chunk cannot be read.
" }, { - "html": "ABlob
blob has an associated get stream algorithm,\nwhich runs these steps:",
+ "html": "Queue a global task on the file reading task source given blob’s relevant global object to perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -184,11 +184,11 @@
"html": "Let bytes be an empty sequence of bytes.
" }, { - "html": "To process blob parts given a sequence ofBlobPart
's parts and BlobPropertyBag
options,\nrun the following steps:",
+ "html": "For each element in parts:",
"rationale": "if",
"steps": [
{
- "html": "To process blob parts given a sequence of BlobPart
's parts and BlobPropertyBag
options,\nrun the following steps:",
+ "html": "If element is a USVString
, run the following substeps:",
"rationale": "let",
"steps": [
{
@@ -240,11 +240,11 @@
"html": "Append token to result.
" }, { - "html": "To convert line endings to native in a string s,\nrun the following steps:", + "html": "While position is not past the end of s:", "rationale": "if", "steps": [ { - "html": "To convert line endings to native in a string s,\nrun the following steps:", + "html": "If the code point at position within s equals U+000D CR:", "rationale": "append", "steps": [ { @@ -482,7 +482,7 @@ "html": "Let isFirstChunk be true.
" }, { - "html": "AFileReader
fr has an associated read operation algorithm,\nwhich given blob, a type and an optional encodingName,\nruns the following steps: \n \n Use the file reading task source for all these tasks.
", + "html": "In parallel, while true:", "rationale": "wait", "steps": [ { @@ -495,7 +495,7 @@ "html": "Set isFirstChunk to false.
" }, { - "html": "AFileReader
fr has an associated read operation algorithm,\nwhich given blob, a type and an optional encodingName,\nruns the following steps: \n \n Use the file reading task source for all these tasks.
", + "html": "If chunkPromise is fulfilled with an object whosedone
property is false and whose value
property is a Uint8Array
object, run these steps:",
"rationale": "let",
"steps": [
{
@@ -513,7 +513,7 @@
]
},
{
- "html": "A FileReader
fr has an associated read operation algorithm,\nwhich given blob, a type and an optional encodingName,\nruns the following steps: \n \n Use the file reading task source for all these tasks.
", + "html": "Otherwise, if chunkPromise is fulfilled with an object whosedone
property is true, queue a task to run the following steps and abort this algorithm:",
"rationale": "set",
"steps": [
{
@@ -523,7 +523,7 @@
"html": "Let result be the result of package data given bytes, type, blob’s type
, and encodingName.
FileReader
fr has an associated read operation algorithm,\nwhich given blob, a type and an optional encodingName,\nruns the following steps: \n \n Use the file reading task source for all these tasks.
", + "html": "If package data threw an exception error:", "rationale": "set", "steps": [ { @@ -535,7 +535,7 @@ ] }, { - "html": "AFileReader
fr has an associated read operation algorithm,\nwhich given blob, a type and an optional encodingName,\nruns the following steps: \n \n Use the file reading task source for all these tasks.
", + "html": "Else:", "rationale": "set", "steps": [ { @@ -552,7 +552,7 @@ ] }, { - "html": "AFileReader
fr has an associated read operation algorithm,\nwhich given blob, a type and an optional encodingName,\nruns the following steps: \n \n Use the file reading task source for all these tasks.
", + "html": "Otherwise, if chunkPromise is rejected with an error error, queue a task to run the following steps and abort this algorithm:", "rationale": "set", "steps": [ { @@ -612,7 +612,7 @@ "html": "If the encodingName is present, set encoding to the result of getting an encoding from encodingName.
" }, { - "html": "ABlob
has an associated package data algorithm,\ngiven bytes, a type, a optional mimeType, and a optional encodingName,\nwhich switches on type and runs the associated steps: \n Return bytes as a DataURL [RFC2397] subject to the considerations below:
\n \n \nReturn a new ArrayBuffer
whose contents are bytes.
Return bytes as a binary string,\n in which every byte is represented by a code unit of equal value [0..255].
\nLet tb be the type of b.
" }, { - "html": "To compare two keys a and b, run these steps:", + "html": "If ta does not equal tb, then run these steps:", "rationale": "if", "steps": [ { @@ -70,7 +70,7 @@ "html": "Let vb be the value of b.
" }, { - "html": "To compare two keys a and b, run these steps:", + "html": "Switch on ta:", "rationale": ".switch", "steps": [ { @@ -78,7 +78,7 @@ "steps": [ { "case": "number", - "html": "To compare two keys a and b, run these steps:", + "html": "", "rationale": "if", "steps": [ { @@ -94,7 +94,7 @@ }, { "case": "date", - "html": "To compare two keys a and b, run these steps:", + "html": "", "rationale": "if", "steps": [ { @@ -110,7 +110,7 @@ }, { "case": "string", - "html": "To compare two keys a and b, run these steps:", + "html": "", "rationale": "if", "steps": [ { @@ -126,7 +126,7 @@ }, { "case": "binary", - "html": "To compare two keys a and b, run these steps:", + "html": "", "rationale": "if", "steps": [ { @@ -142,7 +142,7 @@ }, { "case": "array", - "html": "To compare two keys a and b, run these steps:", + "html": "", "rationale": "let", "steps": [ { @@ -152,7 +152,7 @@ "html": "Let i be 0.
" }, { - "html": "To compare two keys a and b, run these steps:", + "html": "While i is less than length, then:", "rationale": "let", "steps": [ { @@ -219,7 +219,7 @@ "html": "If there are no transactions with cleanup\nevent loop matching the current event loop, return false.
" }, { - "html": "To cleanup Indexed Database transactions, run the following steps.\nThey will return true if any transactions were cleaned up, or false otherwise.", + "html": "For each transaction transaction with cleanup event loop matching the current event loop:", "rationale": "set", "steps": [ { @@ -386,18 +386,18 @@ "html": "Let request be a new open request.
" }, { - "html": "Theopen(name, version)
method steps are:",
+ "html": "Run these steps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let result be the result of opening a database connection, with storageKey, name, version if given and undefined\notherwise, and request.
" }, { - "html": "Theopen(name, version)
method steps are:",
+ "html": "Queue a task to run these steps:",
"rationale": "if",
"steps": [
{
- "html": "The open(name, version)
method steps are:",
+ "html": "If result is an error, then:",
"rationale": "set",
"steps": [
{
@@ -415,7 +415,7 @@
]
},
{
- "html": "The open(name, version)
method steps are:",
+ "html": "Otherwise:",
"rationale": "set",
"steps": [
{
@@ -454,7 +454,7 @@
"html": "Let request be a new open request.
" }, { - "html": "ThedeleteDatabase(name)
method steps are:",
+ "html": "Run these steps in parallel:",
"rationale": "let",
"steps": [
{
@@ -464,7 +464,7 @@
"html": "Set request’s processed flag to true.
" }, { - "html": "ThedeleteDatabase(name)
method steps are:",
+ "html": "Queue a task to run these steps:",
"rationale": "if",
"steps": [
{
@@ -498,7 +498,7 @@
"html": "Let p be a new promise.
" }, { - "html": "Thedatabases()
method steps are:",
+ "html": "Run these steps in parallel:",
"rationale": "let",
"steps": [
{
@@ -508,7 +508,7 @@
"html": "Let result be a new list.
" }, { - "html": "Thedatabases()
method steps are:",
+ "html": "For each db of databases:",
"rationale": "let",
"steps": [
{
@@ -764,7 +764,7 @@
"html": "If store uses out-of-line keys and has no key\ngenerator and key was not given, throw a\n\"DataError
\" DOMException
.
Let clone be a clone of value in targetRealm during transaction.\nRethrow any exceptions.
" }, { - "html": "To add or put with handle, value, key, and no-overwrite flag, run these steps:", + "html": "If store uses in-line keys, then:", "rationale": "let", "steps": [ { @@ -798,7 +798,7 @@ "html": "If kpk is not failure, let key be kpk.
" }, { - "html": "To add or put with handle, value, key, and no-overwrite flag, run these steps:", + "html": "Otherwise (kpk is failure):", "rationale": "if", "steps": [ { @@ -1618,7 +1618,7 @@ "html": "If this's got value flag is false, indicating that\nthe cursor is being iterated or has iterated past its end, throw an \"InvalidStateError
\" DOMException
.
continue(key)
method steps are:",
+ "html": "If key is given, then:",
"rationale": "let",
"steps": [
{
@@ -1763,7 +1763,7 @@
"html": "Let clone be a clone of value in targetRealm during transaction.\nRethrow any exceptions.
" }, { - "html": "Theupdate(value)
method steps are:",
+ "html": "If this's effective object store uses in-line\nkeys, then:",
"rationale": "let",
"steps": [
{
@@ -1907,7 +1907,7 @@
"html": "Set connection’s version to version.
" }, { - "html": "To open a database connection with storageKey which requested the database to be opened, a database name, a database version, and a request, run these steps:", + "html": "If db’s version is less than version, then:", "rationale": "let", "steps": [ { @@ -2015,7 +2015,7 @@ "html": "Set transaction’s state to committing.
" }, { - "html": "To commit a transaction with the transaction to commit, run these steps:", + "html": "Run the following steps in parallel:", "rationale": "wait", "steps": [ { @@ -2031,7 +2031,7 @@ "html": "If an error occurs while writing the changes to the database,\nthen run abort a transaction with transaction and an\nappropriate type for the error, for example \"QuotaExceededError
\" or\n\"UnknownError
\" DOMException
, and terminate these steps.
If error is not null, set transaction’s error to error.
" }, { - "html": "To abort a transaction with the transaction to abort, and error, run these steps:", + "html": "For each request of transaction’s request list,\nabort the steps to asynchronously execute a request for request,\nset request’s processed flag to true,\nand queue a task to run these steps:", "rationale": "set", "steps": [ { @@ -2089,7 +2089,7 @@ ] }, { - "html": "To abort a transaction with the transaction to abort, and error, run these steps:", + "html": "Queue a task to run these steps:", "rationale": "if", "steps": [ { @@ -2099,7 +2099,7 @@ "html": "Fire an event named abort
at transaction with its bubbles
attribute initialized to true.
Add request to the end of transaction’s request list.
" }, { - "html": "To asynchronously execute a request with the source object and an operation to perform on a database, and an optional request, run these steps:", + "html": "Run these steps in parallel:", "rationale": "wait", "steps": [ { @@ -2161,7 +2161,7 @@ "html": "Set request’s processed flag to true.
" }, { - "html": "To asynchronously execute a request with the source object and an operation to perform on a database, and an optional request, run these steps:", + "html": "Queue a task to run these steps:", "rationale": "remove", "steps": [ { @@ -2171,7 +2171,7 @@ "html": "Set request’s done flag to true.
" }, { - "html": "To asynchronously execute a request with the source object and an operation to perform on a database, and an optional request, run these steps:", + "html": "If result is an error, then:", "rationale": "set", "steps": [ { @@ -2186,7 +2186,7 @@ ] }, { - "html": "To asynchronously execute a request with the source object and an operation to perform on a database, and an optional request, run these steps:", + "html": "Otherwise:", "rationale": "set", "steps": [ { @@ -2243,7 +2243,7 @@ "html": "Set request’s processed flag to true.
" }, { - "html": "To upgrade a database with connection (a connection), a new version, and a request, run these steps:", + "html": "Queue a task to run these steps:", "rationale": "set", "steps": [ { @@ -2293,7 +2293,7 @@ "html": "Set connection’s object store set to the set of object stores in database if database previously\nexisted, or the empty set if database was newly created.
" }, { - "html": "To abort an upgrade transaction with transaction, run these steps:", + "html": "For each object store handle handle associated with transaction, including those for object stores that\nwere created or deleted during transaction:", "rationale": "if", "steps": [ { @@ -2305,7 +2305,7 @@ ] }, { - "html": "To abort an upgrade transaction with transaction, run these steps:", + "html": "For each index handle handle associated with transaction,\nincluding those for indexes that were created or deleted\nduring transaction:", "rationale": "if", "steps": [ { @@ -2343,7 +2343,7 @@ "html": "Dispatch event at request with legacyOutputDidListenersThrowFlag.
" }, { - "html": "To fire a success event at a request, run these steps:", + "html": "If transaction’s state is active,\nthen:", "rationale": "set", "steps": [ { @@ -2387,7 +2387,7 @@ "html": "Dispatch event at request with legacyOutputDidListenersThrowFlag.
" }, { - "html": "To fire an error event at a request, run these steps:", + "html": "If transaction’s state is active,\nthen:", "rationale": "set", "steps": [ { @@ -2439,11 +2439,11 @@ "rationale": ".algorithm", "steps": [ { - "html": "To store a record into an object store with store, value, an optional key, and a no-overwrite flag, run these steps:", + "html": "If store uses a key generator, then:", "rationale": "if", "steps": [ { - "html": "To store a record into an object store with store, value, an optional key, and a no-overwrite flag, run these steps:", + "html": "If key is undefined, then:", "rationale": "let", "steps": [ { @@ -2472,7 +2472,7 @@ "html": "Store a record in store containing key as its key and ! StructuredSerializeForStorage(value)\nas its value. The record is stored in the object store’s list of records such that the list is sorted\naccording to the key of the records in ascending order.
" }, { - "html": "To store a record into an object store with store, value, an optional key, and a no-overwrite flag, run these steps:", + "html": "For each index which references store:", "rationale": "let", "steps": [ { @@ -2536,7 +2536,7 @@ "html": "Let list be an empty list.
" }, { - "html": "To retrieve multiple values from an object\nstore with targetRealm, store, range and optional count, run these steps:", + "html": "For each record of records:", "rationale": "let", "steps": [ { @@ -2588,7 +2588,7 @@ "html": "Let list be an empty list.
" }, { - "html": "To retrieve multiple keys from an object store with store, range and optional count, run these steps:", + "html": "For each record of records:", "rationale": "let", "steps": [ { @@ -2640,7 +2640,7 @@ "html": "Let list be an empty list.
" }, { - "html": "To retrieve multiple referenced values from an\nindex with targetRealm, index, range and optional count, run these steps:", + "html": "For each record of records:", "rationale": "let", "steps": [ { @@ -2692,7 +2692,7 @@ "html": "Let list be an empty list.
" }, { - "html": "To retrieve multiple values from an index with index, range and optional count, run these steps:", + "html": "For each record of records:", "rationale": "let", "steps": [ { @@ -2787,11 +2787,11 @@ "html": "If count is not given, let count be 1.
" }, { - "html": "To iterate a cursor with targetRealm, cursor, an optional key and primaryKey to iterate to, and an optional count, run these steps:", + "html": "While count is greater than 0:", "rationale": "switch", "steps": [ { - "html": "To iterate a cursor with targetRealm, cursor, an optional key and primaryKey to iterate to, and an optional count, run these steps:", + "html": "Switch on direction:", "rationale": ".switch", "steps": [ { @@ -2818,7 +2818,7 @@ ] }, { - "html": "To iterate a cursor with targetRealm, cursor, an optional key and primaryKey to iterate to, and an optional count, run these steps:", + "html": "If found record is not defined, then:", "rationale": "set", "steps": [ { @@ -2856,7 +2856,7 @@ "html": "Set cursor’s key to found record’s key.
" }, { - "html": "To iterate a cursor with targetRealm, cursor, an optional key and primaryKey to iterate to, and an optional count, run these steps:", + "html": "If cursor’s key only flag is false, then:", "rationale": "let", "steps": [ { @@ -2905,7 +2905,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To evaluate a key path on a value with value and keyPath, run the following steps. The result of these steps is an\nECMAScript value or failure, or the steps may throw an exception.", + "html": "If keyPath is a list of strings, then:", "rationale": "let", "steps": [ { @@ -2915,7 +2915,7 @@ "html": "Let i be 0.
" }, { - "html": "To evaluate a key path on a value with value and keyPath, run the following steps. The result of these steps is an\nECMAScript value or failure, or the steps may throw an exception.", + "html": "For each item of keyPath:", "rationale": "let", "steps": [ { @@ -2953,7 +2953,7 @@ "html": "Let identifiers be the result of strictly splitting keyPath on U+002E FULL STOP characters (.).
" }, { - "html": "To evaluate a key path on a value with value and keyPath, run the following steps. The result of these steps is an\nECMAScript value or failure, or the steps may throw an exception.", + "html": "For each identifier of identifiers, jump to the appropriate step below:", "rationale": ".switch", "steps": [ { @@ -2985,7 +2985,7 @@ }, { "case": "Otherwise", - "html": "To evaluate a key path on a value with value and keyPath, run the following steps. The result of these steps is an\nECMAScript value or failure, or the steps may throw an exception.", + "html": "", "rationale": "if", "steps": [ { @@ -3033,7 +3033,7 @@ "html": "Remove the last item of identifiers.
" }, { - "html": "To check that a key could be injected into a value with value and a keyPath, run the following steps.\nThe result of these steps is either true or false.", + "html": "For each remaining identifier of identifiers, if any:", "rationale": "if", "steps": [ { @@ -3071,7 +3071,7 @@ "html": "Let last be the last item of identifiers and remove it from\nthe list.
" }, { - "html": "To inject a key into a value using a key path with value, a key and a keyPath, run these steps:", + "html": "For each remaining identifier of identifiers:", "rationale": "assert", "steps": [ { @@ -3081,7 +3081,7 @@ "html": "Let hop be ! HasOwnProperty(value, identifier).
" }, { - "html": "To inject a key into a value using a key path with value, a key and a keyPath, run these steps:", + "html": "If hop is false, then:", "rationale": "let", "steps": [ { @@ -3127,7 +3127,7 @@ "html": "Let value be key’s value.
" }, { - "html": "To convert a key to a value with key, run the following steps.\nThe steps return an ECMAScript value.", + "html": "Switch on type:", "rationale": ".switch", "steps": [ { @@ -3143,7 +3143,7 @@ }, { "case": "date", - "html": "To convert a key to a value with key, run the following steps.\nThe steps return an ECMAScript value.", + "html": "", "rationale": "let", "steps": [ { @@ -3159,7 +3159,7 @@ }, { "case": "binary", - "html": "To convert a key to a value with key, run the following steps.\nThe steps return an ECMAScript value.", + "html": "", "rationale": "let", "steps": [ { @@ -3181,7 +3181,7 @@ }, { "case": "array", - "html": "To convert a key to a value with key, run the following steps.\nThe steps return an ECMAScript value.", + "html": "", "rationale": "let", "steps": [ { @@ -3197,7 +3197,7 @@ "html": "Let index be 0.
" }, { - "html": "To convert a key to a value with key, run the following steps.\nThe steps return an ECMAScript value.", + "html": "While index is less than len:", "rationale": "let", "steps": [ { @@ -3238,7 +3238,7 @@ "html": "If seen contains input, then return invalid.
" }, { - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "Jump to the appropriate step below:", "rationale": ".switch", "steps": [ { @@ -3246,7 +3246,7 @@ "steps": [ { "case": "If Type(input) is Number", - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "", "rationale": "if", "steps": [ { @@ -3259,7 +3259,7 @@ }, { "case": "If input is a Date (has a [[DateValue]] internal slot)", - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "", "rationale": "let", "steps": [ { @@ -3275,7 +3275,7 @@ }, { "case": "If Type(input) is String", - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "", "rationale": "return", "steps": [ { @@ -3285,7 +3285,7 @@ }, { "case": "If input is a buffer source type", - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "", "rationale": "let", "steps": [ { @@ -3298,7 +3298,7 @@ }, { "case": "If input is an Array exotic object", - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "", "rationale": "let", "steps": [ { @@ -3314,7 +3314,7 @@ "html": "Let index be 0.
" }, { - "html": "To convert a value to a key with an ECMAScript value input, and an optional set seen, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "While index is less than len:", "rationale": "let", "steps": [ { @@ -3365,7 +3365,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To convert a value to a multiEntry key with an ECMAScript value input, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "If input is an Array exotic object, then:", "rationale": "let", "steps": [ { @@ -3381,14 +3381,14 @@ "html": "Let index be 0.
" }, { - "html": "To convert a value to a multiEntry key with an ECMAScript value input, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "While index is less than len:", "rationale": "let", "steps": [ { "html": "Let entry be Get(input, index).
" }, { - "html": "To convert a value to a multiEntry key with an ECMAScript value input, run the following steps.\nThe result of these steps is a key or invalid, or the\nsteps may throw an exception.", + "html": "If entry is not an abrupt completion, then:", "rationale": "let", "steps": [ { diff --git a/tr/algorithms/SVG2.json b/tr/algorithms/SVG2.json index 52ed5e8ce249..d448487b2fed 100644 --- a/tr/algorithms/SVG2.json +++ b/tr/algorithms/SVG2.json @@ -2672,11 +2672,11 @@ { "name": "resolved descendant node", "href": "https://www.w3.org/TR/SVG2/text.html#TermResolvedDescendantNode", - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "The SVG specific text layout algorithm is as follows:", "rationale": ".algorithm", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Setup", "rationale": "let", "steps": [ { @@ -2697,7 +2697,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each array element with index i in\n\tresult:", "rationale": "set", "steps": [ { @@ -2715,11 +2715,11 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Resolve character positioning", "rationale": "set", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Set up:", "rationale": "let", "steps": [ { @@ -2734,11 +2734,11 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "A recursive procedure that takes as input a node and\n\t whose steps are as follows:", "rationale": "if", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If node is a ‘text’ or ‘tspan’ node:", "rationale": "let", "steps": [ { @@ -2757,11 +2757,11 @@ "html": "Let i = 0 and j = 0." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "While j < length, do:", "rationale": "if", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the \"addressable\" flag of result[index +\n\t\t j] is true, then:", "rationale": "if", "steps": [ { @@ -2801,7 +2801,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If node is a ‘textPath’ node:", "rationale": "let", "steps": [ { @@ -2816,7 +2816,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each child node child of node:", "rationale": "resolve", "steps": [ { @@ -2825,7 +2825,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If node is a ‘textPath’ node:", "rationale": "set", "steps": [ { @@ -2838,14 +2838,14 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Adjust positions: dx, dy", "rationale": "let", "steps": [ { "html": "Let shift be the cumulative x and\n\t y shifts due to ‘x’ and ‘y’\n\t attributes, initialized to (0,0)." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each array element with index i in result:", "rationale": "if", "steps": [ { @@ -2862,11 +2862,11 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Apply ‘textLength’ attribute", "rationale": "set", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Set up:", "rationale": "define", "steps": [ { @@ -2878,11 +2878,11 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "A recursive procedure that takes as input\n\t a node and whose steps are as follows:", "rationale": "for", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each child node child of node:", "rationale": "resolve", "steps": [ { @@ -2891,7 +2891,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If node is a ‘text’ or ‘tspan’ node\n\t and if the node has a valid ‘textLength’ attribute value:", "rationale": "let", "steps": [ { @@ -2901,7 +2901,7 @@ "html": "Let i and j be the global\n\t\t index of the first character and last characters\n\t\t in node, respectively." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each index k in the range\n\t\t [i, j] where the \"addressable\" flag\n\t\t of result[k] is true:", "rationale": "if", "steps": [ { @@ -2922,7 +2922,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If a ≠ +∞ then:", "rationale": "find", "steps": [ { @@ -2941,7 +2941,7 @@ "html": "Let shift = 0." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each index k in the range [i,j]:", "rationale": "add", "steps": [ { @@ -2961,7 +2961,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Adjust positions: x, y", "rationale": "let", "steps": [ { @@ -2971,7 +2971,7 @@ "html": "Set index = 1." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "While index < count:", "rationale": "if", "steps": [ { @@ -2984,7 +2984,7 @@ "html": "Let result.x[index] =\n\t result.x[index] + shift.x\n\t and result.y[index] =\n\t\tresult.y[index] + shift.y." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the \"middle\" and \"anchored chunk\" flags\n\t of result[index] are both true, then:", "rationale": "set", "steps": [ { @@ -3003,18 +3003,18 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Apply anchoring", "rationale": "for", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each slice result[i..j]\n\t (inclusive of both i and j), where:\n\t\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each index k in the range\n\t [i, j] where the \"addressable\" flag\n\t of result[k] is true:", "rationale": "let", "steps": [ { @@ -3032,14 +3032,14 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If a ≠ +∞, then:", "rationale": "let", "steps": [ { "html": "Let shift be the x coordinate of\n\t\t result[i], if the \"horizontal\" flag\n\t\t is true, and the y coordinate otherwise." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Adjust shift based on the value of text-anchor\n\t\t and direction of the element the character at\n\t\t index i is in:", "rationale": ".switch", "steps": [ { @@ -3062,7 +3062,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "For each index k in the range [i, j]:", "rationale": "add", "steps": [ { @@ -3077,7 +3077,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Position on path", "rationale": "set", "steps": [ { @@ -3093,18 +3093,18 @@ "html": "Let path_end be an offset for characters that follow\n\t a ‘textPath’ element. Set path_end to (0,0)." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "While index < count:", "rationale": "if", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the character at index i is within a\n\t ‘textPath’ element and corresponds to a typographic character, then:", "rationale": "set", "steps": [ { "html": "Set \"in path\" flag to true." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the \"middle\" flag of\n\t\t result[index] is false, then:", "rationale": "let", "steps": [ { @@ -3126,7 +3126,7 @@ "html": "Let (x, y)\n\t\t and angle be the position and angle\n\t\t in result[index]." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Let mid be a coordinate value depending\n\t\t on the value of the \"horizontal\" flag:", "rationale": ".switch", "steps": [ { @@ -3148,7 +3148,7 @@ "html": "If path is not a closed subpath and\n\t\t mid < 0 or mid > length,\n\t\t set the \"hidden\" flag of result[index] to true." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If path is a closed subpath depending on\n\t\t the values of text-anchor and direction of\n\t\t the element the character at index is in:", "rationale": ".switch", "steps": [ { @@ -3171,14 +3171,14 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the hidden flag is false:", "rationale": "let", "steps": [ { "html": "Let point be the position and\n\t\t\t t be the unit vector tangent to\n\t\t\t the point mid distance\n\t\t\t along path." }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the \"horizontal\" flag is", "rationale": ".switch", "steps": [ { @@ -3186,7 +3186,7 @@ "steps": [ { "case": "true", - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "", "rationale": "let", "steps": [ { @@ -3208,7 +3208,7 @@ }, { "case": "false", - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "", "rationale": "let", "steps": [ { @@ -3237,7 +3237,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "Otherwise, the \"middle\" flag\n\t\t of result[index] is true:", "rationale": "set", "steps": [ { @@ -3248,11 +3248,11 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the character at index i is not within a\n\t ‘textPath’ element and corresponds to a typographic character, then:", "rationale": "if", "steps": [ { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the \"in path\" flag is true:", "rationale": "set", "steps": [ { @@ -3267,7 +3267,7 @@ ] }, { - "html": "\n Text layout begins by passing to a CSS-based text renderer the\n content of the ‘text’ element which includes text data\n along with styling information and a description of one or more\n shapes to be filled. The ‘text’ element is treated as a\n block element and its descendant ‘tspan’, ‘textPath’\n and ‘a’ elements are treated as inline elements. The CSS\n renderer returns a set of typographic characters with\n their positions resulting from laying out the text as if the text\n were absolutely positioned.\n
\n \n\n Once a content area has been defined, the following\n algorithm is used to determine the typographic characters\n and their positions for a given ‘text’ element:\n
\n\n\n A number of CSS properties have no or limited effect on SVG text\n layout:\n
\n\n\n Various SVG attributes and properties may reposition the\n typographic characters depending on how the content area is defined:\n
\n\n\n The following SVG text layout algorithm returns output information\n about each character in the DOM in the ‘text’ element's\n subtree. That information includes:\n
\n\n\n The SVG specific text layout algorithm is as follows:\n
", + "html": "If the \"after path\" is true.", "rationale": "if", "steps": [ { diff --git a/tr/algorithms/clipboard-apis.json b/tr/algorithms/clipboard-apis.json index 93acc00a6713..b1c48d7a0962 100644 --- a/tr/algorithms/clipboard-apis.json +++ b/tr/algorithms/clipboard-apis.json @@ -578,7 +578,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "The script-may-access-clipboard flag is set as follows:", + "html": "If action is copy or cut and the script thread\nis allowed to modify the clipboard, then", "rationale": "set", "steps": [ { @@ -587,7 +587,7 @@ ] }, { - "html": "The script-may-access-clipboard flag is set as follows:", + "html": "If action is paste and the script thread is allowed to\nread from clipboard, then", "rationale": "set", "steps": [ { @@ -793,7 +793,7 @@ "html": "Let hasGesture be true if the relevant global object of this has transient activation, false otherwise.
" }, { - "html": "Let hasGesture be true if the relevant global object of this has transient activation, false otherwise.
" }, { - "html": "items, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nClear the clipboard
" }, { - "html": "items, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nitems, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nitems, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nitems, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nitems, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nitems, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\nitems, a DataTransferItemList
list of items to write
clear-was-called, a boolean
\ntypes-to-clear, a list
\nNone
\npresentationStyle, a clipboard item's presentation style
\nNone
\nLet wellKnownFormat be a string.
" }, { - "html": "mimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nmimeType, a type
wellKnownFormat, a platform specific string type. On Mac it’s NSPasteboardType, on Windows it’s LPCWSTR and Linux it’s a const char*.
\nLet trusted be true if the event is generated by the\nuser agent, false otherwise
" }, { - "html": "e, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\nSet the clipboard-event-data’s\ninternal drag data store mode flag to read-only.
" }, { - "html": "e, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\nSet e’s composed
to true.
e, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\nclear()
and the DataTransfer
object’s internal drag data store mode flag is read/write, then",
"rationale": "set",
"steps": [
{
@@ -1254,11 +1254,11 @@
]
},
{
- "html": "e, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ne, the ClipboardEvent
to fire
None
\ntype
argument or\nthe new item’s drag data item type string is\nfound in the types-to-clear list, then",
"rationale": "remove",
"steps": [
{
@@ -1278,7 +1278,7 @@
]
},
{
- "html": "e, the ClipboardEvent
to fire
None
\nDataTransferItemList
and clipboard-entry is\nset, then",
"rationale": "check",
"steps": [
{
@@ -1306,11 +1306,11 @@
"html": "If the markup’s source URL is known, then resolve all relative URLs in\nHREF and SRC attributes using the source URL as base URL, and set the\nrespective attributes to the resolved absolute URL.
" }, { - "html": "clipboard-part, the clipboard part to process
\nclipboard-event-data, the DataTransfer
object for this event
None
\nclipboard-part, the clipboard part to process
\nclipboard-event-data, the DataTransfer
object for this event
None
\nitems
already\ncontains an entry for the referenced file or clipboard part, then",
"rationale": "set",
"steps": [
{
@@ -1319,7 +1319,7 @@
]
},
{
- "html": "clipboard-part, the clipboard part to process
\nclipboard-event-data, the DataTransfer
object for this event
None
\nLet promise be a new promise.
" }, { - "html": "ThegetProperties()
method, when invoked, runs these steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "resolve",
"steps": [
{
@@ -55,7 +55,7 @@
"html": "If properties is empty, then return a promise rejected with a TypeError
.
select(properties, options)
method, when invoked, runs these steps:",
+ "html": "For each property of properties:",
"rationale": "if",
"steps": [
{
@@ -70,15 +70,15 @@
"html": "Let promise be a new promise.
" }, { - "html": "Theselect(properties, options)
method, when invoked, runs these steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "let",
"steps": [
{
- "html": "The select(properties, options)
method, when invoked, runs these steps:",
+ "html": "Let selectedContacts be be the result of launching a contact picker with options’ multiple
member and properties. If this fails, then:",
"rationale": "queue",
"steps": [
{
- "html": "The select(properties, options)
method, when invoked, runs these steps:",
+ "html": "Queue a contact picker task to run these steps:",
"rationale": "reject",
"steps": [
{
@@ -98,14 +98,14 @@
"html": "Unset navigable’s contact picker is showing flag.
" }, { - "html": "Theselect(properties, options)
method, when invoked, runs these steps:",
+ "html": "Queue a contact picker task to run these steps:",
"rationale": "let",
"steps": [
{
"html": "Let contacts be an empty list.
" }, { - "html": "Theselect(properties, options)
method, when invoked, runs these steps:",
+ "html": "For each selectedContact in selectedContacts:",
"rationale": "let",
"steps": [
{
diff --git a/tr/algorithms/credential-management-1.json b/tr/algorithms/credential-management-1.json
index 1ac90785a7c0..638e2d2876fd 100644
--- a/tr/algorithms/credential-management-1.json
+++ b/tr/algorithms/credential-management-1.json
@@ -130,7 +130,7 @@
"html": "Let relevant interface objects be an empty set.
" }, { - "html": "The relevant credential interface objects for a givenCredentialCreationOptions
or CredentialRequestOptions
(options) is a set of interface objects, collected as follows:",
+ "html": "For each optionKey → optionValue of options:",
"rationale": "let",
"steps": [
{
@@ -156,7 +156,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "A given CredentialRequestOptions
(options) is matchable a priori if the following\n steps return true
:",
+ "html": "For each interface in options’ relevant credential interface objects:",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/css-anchor-position-1.json b/tr/algorithms/css-anchor-position-1.json
index b4bc146f4434..a8be78bbf9b5 100644
--- a/tr/algorithms/css-anchor-position-1.json
+++ b/tr/algorithms/css-anchor-position-1.json
@@ -14,7 +14,7 @@
"html": "If anchor spec was not passed,\nreturn the target anchor element for query el given the query el’s default anchor specifier.
" }, { - "html": "To determine the target anchor element given a querying element query el and an optional anchor specifier anchor spec:", + "html": "If anchor spec is implicit:", "rationale": "if", "steps": [ { @@ -54,7 +54,7 @@ "html": "Let base styles be the current used styles of el.
" }, { - "html": "To determine the position fallback styles of an element el:", + "html": "For each option in the position options list:", "rationale": "let", "steps": [ { diff --git a/tr/algorithms/css-animation-worklet-1.json b/tr/algorithms/css-animation-worklet-1.json index 7b8b3854842a..e5c7358abd5d 100644 --- a/tr/algorithms/css-animation-worklet-1.json +++ b/tr/algorithms/css-animation-worklet-1.json @@ -118,7 +118,7 @@ "html": "Let serializedState be undefined.
" }, { - "html": "To migrate an animator instance from oneWorkletGlobalScope
to another, given instance, sourceWorkletGlobalScope, destinationWorkletGlobalScope, the user agent must run the following steps :",
+ "html": "Queue a task on sourceWorkletGlobalScope to run the following steps:",
"rationale": "let",
"steps": [
{
@@ -151,7 +151,7 @@
"html": "Wait for the above task to complete. If the task is aborted, abort the following steps.
" }, { - "html": "To migrate an animator instance from oneWorkletGlobalScope
to another, given instance, sourceWorkletGlobalScope, destinationWorkletGlobalScope, the user agent must run the following steps :",
+ "html": "Queue a task on destinationWorkletGlobalScope to run the following steps:",
"rationale": "run",
"steps": [
{
diff --git a/tr/algorithms/css-cascade-4.json b/tr/algorithms/css-cascade-4.json
index 2c1957857639..46394d8019b2 100644
--- a/tr/algorithms/css-cascade-4.json
+++ b/tr/algorithms/css-cascade-4.json
@@ -20,7 +20,7 @@
"html": "Let parsedUrl be the result of the URL parser steps with rule’s URL and parentStylesheet’s location.\nIf the algorithm returns an error,\nreturn. [CSSOM]
" }, { - "html": "To fetch an @import, given an @import rule rule:", + "html": "Fetch a style resource from parsedUrl,\nwith stylesheet parentStylesheet,\ndestination \"style\",\nCORS mode \"no-cors\",\nand processResponse being the following steps given response response and\nbyte stream, null or failure byteStream:", "rationale": "if", "steps": [ { diff --git a/tr/algorithms/css-color-4.json b/tr/algorithms/css-color-4.json index d49c7d469290..9894f1ce8faa 100644 --- a/tr/algorithms/css-color-4.json +++ b/tr/algorithms/css-color-4.json @@ -208,7 +208,7 @@ "html": "set E to delta(clipped, current)" }, { - "html": "To CSS gamut map a color origin in color space origin color space to be in gamut of a destination color space destination:", + "html": "if E < JND", "rationale": "return", "steps": [ { @@ -226,7 +226,7 @@ "html": "let min_inGamut be a boolean that represents when min is still in gamut, and set it to true" }, { - "html": "To CSS gamut map a color origin in color space origin color space to be in gamut of a destination color space destination:", + "html": "while (max - min is greater than epsilon) repeat the following steps", "rationale": "set", "steps": [ { @@ -239,7 +239,7 @@ "html": "if min_inGamut is true and also if inGamut(current) is true, set min to chroma and continue to repeat these steps" }, { - "html": "To CSS gamut map a color origin in color space origin color space to be in gamut of a destination color space destination:", + "html": "otherwise, if inGamut(current) is false carry out these steps:", "rationale": "set", "steps": [ { @@ -249,14 +249,14 @@ "html": "set E to delta(clipped, current)" }, { - "html": "To CSS gamut map a color origin in color space origin color space to be in gamut of a destination color space destination:", + "html": "if E < JND", "rationale": "if", "steps": [ { "html": "if (JND - E < epsilon) return clipped as the gamut mapped color" }, { - "html": "To CSS gamut map a color origin in color space origin color space to be in gamut of a destination color space destination:", + "html": "otherwise,", "rationale": "set", "steps": [ { diff --git a/tr/algorithms/css-conditional-5.json b/tr/algorithms/css-conditional-5.json new file mode 100644 index 000000000000..5b3043e3a084 --- /dev/null +++ b/tr/algorithms/css-conditional-5.json @@ -0,0 +1,46 @@ +{ + "spec": { + "title": "CSS Conditional Rules Module Level 5", + "url": "https://www.w3.org/TR/css-conditional-5/" + }, + "algorithms": [ + { + "html": "TheconditionText
attribute (defined on the CSSConditionRule
parent rule),\n\t\t\ton getting, must return a value as follows:",
+ "rationale": ".switch",
+ "steps": [
+ {
+ "operation": "switch",
+ "steps": [
+ {
+ "case": "The @container rule has an associated containerName
and containerQuery
attributes, joined by a single whitespace."
+ },
+ {
+ "case": "Otherwise",
+ "html": "The result of getting the containerQuery
attribute."
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "html": "The containerName
attribute, on getting, must return a value as follows:",
+ "rationale": ".switch",
+ "steps": [
+ {
+ "operation": "switch",
+ "steps": [
+ {
+ "case": "The @container rule has an associated When determining the flex base size,\n\t\t\tthe item’s min and max main sizes are ignored\n\t\t\t(no clamping occurs).\n\t\t\tFurthermore, the sizing calculations that floor the content box size at zero\n\t\t\twhen applying box-sizing are also ignored.\n\t\t\t(For example, an item with a specified size of zero,\n\t\t\tpositive padding, and box-sizing: border-box will have an outer flex base size of zero—
The hypothetical main size is the item’s flex base size clamped according to its used min and max main sizes (and flooring the content box size at zero).
", "rationale": "if", "steps": [ { diff --git a/tr/algorithms/css-grid-1.json b/tr/algorithms/css-grid-1.json index 34b6c7636192..bf40197fb0b3 100644 --- a/tr/algorithms/css-grid-1.json +++ b/tr/algorithms/css-grid-1.json @@ -33,7 +33,7 @@ ] }, { - "html": "Position the remaining grid items.
\nThe auto-placement cursor defines the current “insertion point” in the grid,\nspecified as a pair of row and column grid lines.\nInitially the auto-placement cursor is set to the start-most row and column lines in the implicit grid.
\nThe grid-auto-flow value in use determines how to position the items:
\nFor each grid item that hasn’t been positioned by the previous steps,\nin order-modified document order:
\nFor each grid item that hasn’t been positioned by the previous steps,\nin order-modified document order:
\nPosition the remaining grid items.
\nThe auto-placement cursor defines the current “insertion point” in the grid,\nspecified as a pair of row and column grid lines.\nInitially the auto-placement cursor is set to the start-most row and column lines in the implicit grid.
\nThe grid-auto-flow value in use determines how to position the items:
\nFor each grid item that hasn’t been positioned by the previous steps,\nin order-modified document order:
\nFor each grid item that hasn’t been positioned by the previous steps,\nin order-modified document order:
\nLet images be an empty list.
" }, { - "html": "To determine the natural dimensions of a cross-fade():", + "html": "For each argument of the cross-fade() function with an <image> value:", "rationale": "let", "steps": [ { @@ -61,7 +61,7 @@ "html": "Let size be a tuple of width and height,\ninitialized to the result of finding the concrete object size of the cross-fade() function\n(using the natural dimensions of a cross-fade()).
" }, { - "html": "To determine the appearance of a cross-fade():", + "html": "For each argument of the cross-fade() function:", "rationale": "let", "steps": [ { diff --git a/tr/algorithms/css-layout-api-1.json b/tr/algorithms/css-layout-api-1.json index ad5b7ff8ba5b..1176d3b40266 100644 --- a/tr/algorithms/css-layout-api-1.json +++ b/tr/algorithms/css-layout-api-1.json @@ -56,7 +56,7 @@ "html": "Let layoutChildMap be box’s [[layoutChildMap]]
.
Let layoutChildMap be box’s [[layoutChildMap]]
.
\"block-like\"
then:",
"rationale": "let",
"steps": [
{
@@ -160,7 +160,7 @@
]
},
{
- "html": "When the user agent wants to create a layout constraints object given sizingMode, box|,\nand internalLayoutConstraints, it must run the following steps:",
+ "html": "If sizingMode is \"manual\"
then:",
"rationale": "return",
"steps": [
{
@@ -272,7 +272,7 @@
"html": "Set layoutDefinitionMap[name] to definition.
" }, { - "html": "When theregisterLayout(name, layoutCtor)
method\nis called, the user agent must run the following steps:",
+ "html": "Queue a task to run the following steps:",
"rationale": "let",
"steps": [
{
@@ -282,7 +282,7 @@
"html": "Let documentDefinition be a new document layout definition with:
\ninput properties being inputProperties.
\nchild input properties being childInputProperties.
\nlayout options being layoutOptions.
\nregisterLayout(name, layoutCtor)
method\nis called, the user agent must run the following steps:",
+ "html": "If documentLayoutDefinitionMap[name] exists, run the following steps:",
"rationale": "let",
"steps": [
{
@@ -351,7 +351,7 @@
"html": "Let children be a new list.
" }, { - "html": "When the user agent wants to invoke a intrinsic sizes callback given name, box, childBoxes, and workletGlobalScope, it must run the following steps:", + "html": "For each childBox in childBoxes perform the following substeps:", "rationale": "let", "steps": [ { @@ -439,7 +439,7 @@ "html": "Let children be a new list.
" }, { - "html": "When the user agent wants to invoke a layout callback given name, box, childBoxes, internalLayoutConstraints, internalBreakToken, and workletGlobalScope, it must run the\nfollowing steps:", + "html": "For each childBox in childBoxes perform the following substeps:", "rationale": "let", "steps": [ { @@ -478,7 +478,7 @@ "html": "Let fragment be the result of converting fragmentValue to a FragmentResultOptions
. If an exception is thrown, let box fallback to the flow layout and abort all these steps.
childFragments
, perform the following stubsteps:",
"rationale": "if",
"steps": [
{
@@ -487,7 +487,7 @@
]
},
{
- "html": "When the user agent wants to invoke a layout callback given name, box, childBoxes, internalLayoutConstraints, internalBreakToken, and workletGlobalScope, it must run the\nfollowing steps:",
+ "html": "Then:",
"rationale": "let",
"steps": [
{
@@ -499,7 +499,7 @@
],
"additional": [
{
- "html": "When the user agent wants to invoke a layout callback given name, box, childBoxes, internalLayoutConstraints, internalBreakToken, and workletGlobalScope, it must run the\nfollowing steps:",
+ "html": "Otherwise (sizingMode is \"manual\"
):",
"rationale": "let",
"steps": [
{
@@ -544,11 +544,11 @@
"html": "Let layoutDefinitionMap be workletGlobalScope’s layout definitions map.
" }, { - "html": "When the user agent wants to get a layout definition given name, and workletGlobalScope, it must run the following steps:", + "html": "If layoutDefinitionMap[name] does not exist, run the following steps:", "rationale": "queue", "steps": [ { - "html": "When the user agent wants to get a layout definition given name, and workletGlobalScope, it must run the following steps:", + "html": "Queue a task to run the following steps:", "rationale": "let", "steps": [ { @@ -582,7 +582,7 @@ "html": "Let layoutClassInstanceMap be box’s layout class instances map.
" }, { - "html": "When the user agent wants to get a layout class instance given box, definition, and workletGlobalScope, it must run the following steps:", + "html": "Let layoutInstance be the result of get layoutClassInstanceMap[workletGlobalScope]. If layoutInstance is null, run the\nfollowing steps:", "rationale": "if", "steps": [ { @@ -617,7 +617,7 @@ "html": "Let nextValue be undefined.
" }, { - "html": "When the user agent wants to run a generator given generator, and generatorType, it must run the following steps:", + "html": "Perform the following substeps until done istrue
:",
"rationale": "let",
"steps": [
{
@@ -639,7 +639,7 @@
"html": "Let done be the result of Get(nextResult, \"done\"
).
@@iterable
) exists\nthen:",
"rationale": "set",
"steps": [
{
@@ -649,7 +649,7 @@
"html": "Let requests be the result of converting requestOrRequests to a sequence<LayoutFragmentRequestOrIntrinsicSizesRequest>
.
If an exception is thrown, rethrow the exception and abort all these steps.
" }, { - "html": "When the user agent wants to run a generator given generator, and generatorType, it must run the following steps:", + "html": "For each request in requests perform the following substeps:", "rationale": "let", "steps": [ { @@ -694,7 +694,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "When the user agent wants to produce a generator result given request, generator, and generatorType, it must run the following steps:", + "html": "If request is aIntrinsicSizesRequest
then:",
"rationale": "let",
"steps": [
{
@@ -715,7 +715,7 @@
]
},
{
- "html": "When the user agent wants to produce a generator result given request, generator, and generatorType, it must run the following steps:",
+ "html": "If request is a LayoutFragmentRequest
and generatorType is \"layout\"
then:",
"rationale": "let",
"steps": [
{
diff --git a/tr/algorithms/css-nav-1.json b/tr/algorithms/css-nav-1.json
index 16f2f6f0d93e..c83a7f13f43d 100644
--- a/tr/algorithms/css-nav-1.json
+++ b/tr/algorithms/css-nav-1.json
@@ -68,14 +68,14 @@
"html": "If eventTarget is the Document or the document element,\n set eventTarget be the body element if it is not null
or to the document element otherwise.
Let candidates be the result of finding focusable areas within eventTarget with the argument visibleOnly set to false
if computed value of the spatial-navigation-action property on eventTarget is focus or to true
otherwise.
Dispatches navnotarget event at eventTarget with direction and container.
" }, { - "html": "To run the spatial navigation steps in direction, do the following:", + "html": "Else, if container is the document element of a nested browsing context then:", "rationale": "set", "steps": [ { @@ -214,7 +214,7 @@ "html": "Let insiders be the subset of candidates
\nwhose boundary box fully overlaps with inside area of searchOrigin
\nwhose boundary box partially overlaps with inside area of searchOrigin as
\ntop edge is below the top edge of searchOrigin’s boundary box if dir is down
bottom edge is above the bottom edge of searchOrigin’s boundary box if dir is up
right edge is left of the right edge of searchOrigin’s boundary box if dir is left
left edge is right of the left edge of searchOrigin’s boundary box if dir is right
Let inputArgumentSyntaxes be an empty list.
" }, { - "html": "When theregisterPaint(name, paintCtor)
method is\ncalled, the user agent must run the following steps:",
+ "html": "For each item in inputArguments perform the following substeps:",
"rationale": "attempt",
"steps": [
{
@@ -91,7 +91,7 @@
"html": "Set paintDefinitionMap[name] to definition.
" }, { - "html": "When theregisterPaint(name, paintCtor)
method is\ncalled, the user agent must run the following steps:",
+ "html": "Queue a task to run the following steps:",
"rationale": "let",
"steps": [
{
@@ -101,7 +101,7 @@
"html": "Let documentDefinition be a new document paint definition with:
\ninput properties being inputProperties.
\ninput argument syntaxes being inputArgumentSyntaxes.
\nPaintRenderingContext2DSettings object being paintRenderingContext2DSettings.
\nregisterPaint(name, paintCtor)
method is\ncalled, the user agent must run the following steps:",
+ "html": "If documentPaintDefinitionMap[name] exists, run the following steps:",
"rationale": "let",
"steps": [
{
@@ -193,11 +193,11 @@
"html": "Let paintDefinitionMap be workletGlobalScope’s paint definitions map.
" }, { - "html": "When the user agent wants to invoke a paint callback given name, inputArguments, snappedConcreteObjectSize, and workletGlobalScope, it must run the following steps:", + "html": "If paintDefinitionMap[name] does not exist, run the following steps:", "rationale": "queue", "steps": [ { - "html": "When the user agent wants to invoke a paint callback given name, inputArguments, snappedConcreteObjectSize, and workletGlobalScope, it must run the following steps:", + "html": "Queue a task to run the following steps:", "rationale": "let", "steps": [ { @@ -223,7 +223,7 @@ "html": "Let paintClassInstanceMap be workletGlobalScope’s paint class instances map.
" }, { - "html": "When the user agent wants to invoke a paint callback given name, inputArguments, snappedConcreteObjectSize, and workletGlobalScope, it must run the following steps:", + "html": "Let paintInstance be the result of get paintClassInstanceMap[|name]|. If paintInstance is null, run the following steps:", "rationale": "if", "steps": [ { diff --git a/tr/algorithms/css-properties-values-api-1.json b/tr/algorithms/css-properties-values-api-1.json index e5aed4e81c6d..d30ef8d3fed4 100644 --- a/tr/algorithms/css-properties-values-api-1.json +++ b/tr/algorithms/css-properties-values-api-1.json @@ -78,7 +78,7 @@ "html": "The string \"inherits:\"
, followed by a single SPACE (U+0020).
If N is fully visible in S,\nselect N as the anchor node.
" }, { - "html": "The candidate examination algorithm for a candidate DOM node N in a scrolling box S is as follows:", + "html": "If N is partially visible:", "rationale": "for", "steps": [ { diff --git a/tr/algorithms/css-syntax-3.json b/tr/algorithms/css-syntax-3.json index 46abae3dc72a..1a93ff063ace 100644 --- a/tr/algorithms/css-syntax-3.json +++ b/tr/algorithms/css-syntax-3.json @@ -479,7 +479,7 @@ "html": "Otherwise, let result initially be an empty string.
" }, { - "html": "To serialize an <an+b> value,\n\t\twith integer values A and B:", + "html": "1
\n Append \"n\" to result.
\n-1
\n Append \"-n\" to result.
\nSerialize A and append it to result,\nthen append \"n\" to result.
\nAppend \"+\" to result,\nthen append the serialization of B to result.
\nAppend the serialization of B to result.
\nIf this is a CSSMathInvert
object,\nreturn this’s value
internal slot.
CSSNumericValue
this:",
+ "html": "If this is a CSSUnitValue
object with unit
internal slot set to \"number\":",
"rationale": "if",
"steps": [
{
@@ -564,7 +564,7 @@
"html": "If value1 and value2 are both CSSUnitValue
s,\nreturn true
if they have equal unit
and value
internal slots,\nor false
otherwise.
CSSNumericValue
s value1 and value2 are equal numeric values,\n perform the following steps:",
+ "html": "If value1 and value2 are both CSSMathSum
s, CSSMathProduct
s, CSSMathMin
s, or CSSMathMax
s:",
"rationale": "if",
"steps": [
{
@@ -645,21 +645,21 @@
"html": "If units is empty,\nsort values in code point order according to the unit
internal slot of its items,\nthen return a new CSSMathSum
object\nwhose values
internal slot is set to values.
toSum(...units)
method converts an existing CSSNumericValue
this into a CSSMathSum
of only CSSUnitValue
s with the specified units,\n if possible.\n (It’s like to()
,\n but allows the result to have multiple units in it.)\n If called without any units,\n it just simplifies this into a minimal sum of CSSUnitValue
s. \n When called, it must perform the following steps:
", + "html": "Otherwise,\nlet result initially be an empty list. For each unit in units:", "rationale": "let", "steps": [ { "html": "Let temp initially be a new CSSUnitValue
whose unit
internal slot\nis set to unit and whose value
internal slot\nis set to 0
.
toSum(...units)
method converts an existing CSSNumericValue
this into a CSSMathSum
of only CSSUnitValue
s with the specified units,\n if possible.\n (It’s like to()
,\n but allows the result to have multiple units in it.)\n If called without any units,\n it just simplifies this into a minimal sum of CSSUnitValue
s. \n When called, it must perform the following steps:
", + "html": "For each value in values:", "rationale": "let", "steps": [ { "html": "Let value unit be value’s unit
internal slot.
toSum(...units)
method converts an existing CSSNumericValue
this into a CSSMathSum
of only CSSUnitValue
s with the specified units,\n if possible.\n (It’s like to()
,\n but allows the result to have multiple units in it.)\n If called without any units,\n it just simplifies this into a minimal sum of CSSUnitValue
s. \n When called, it must perform the following steps:
", + "html": "If value unit is a compatible unit with unit,\nthen:", "rationale": "convert", "steps": [ { @@ -698,7 +698,7 @@ "html": "Let result be a new CSSNumericType
.
type()
method\n returns a representation of the type of this. \n When called, it must perform the following steps:
", + "html": "For each baseType → power in the type of this,", "rationale": "if", "steps": [ { @@ -707,7 +707,7 @@ ] }, { - "html": "Thetype()
method\n returns a representation of the type of this. \n When called, it must perform the following steps:
", + "html": "If the percent hint of this is not null,", "rationale": "set", "steps": [ { @@ -763,14 +763,14 @@ "html": "Let values initially be an empty list.
" }, { - "html": "A sum value is an abstract representation of aCSSNumericValue
as a sum of numbers with (possibly complex) units.\n Not all CSSNumericValue
s can be expressed as a sum value. \n A sum value is a list.\n Each entry in the list is a tuple of a value,\n which is a number,\n and a unit map,\n which is a map of units (strings) to powers (integers).
\n \nTo create a sum value from a CSSNumericValue
this,\n the steps differ based on this’s class:
CSSUnitValue
\n CSSMathSum
\n CSSMathNegate
\n CSSMathProduct
\n CSSMathInvert
\n CSSMathMin
\n CSSMathMax
\n values
internal slot:",
"rationale": "let",
"steps": [
{
"html": "Let value be the result of creating a sum value from item.\nIf value is failure,\nreturn failure.
" }, { - "html": "A sum value is an abstract representation of aCSSNumericValue
as a sum of numbers with (possibly complex) units.\n Not all CSSNumericValue
s can be expressed as a sum value. \n A sum value is a list.\n Each entry in the list is a tuple of a value,\n which is a number,\n and a unit map,\n which is a map of units (strings) to powers (integers).
\n \nTo create a sum value from a CSSNumericValue
this,\n the steps differ based on this’s class:
CSSUnitValue
\n CSSMathSum
\n CSSMathNegate
\n CSSMathProduct
\n CSSMathInvert
\n CSSMathMin
\n CSSMathMax
\n Let values initially be the sum value «(1, «[ ]»)».\n(I.e. what you’d get from 1.)
" }, { - "html": "A sum value is an abstract representation of aCSSNumericValue
as a sum of numbers with (possibly complex) units.\n Not all CSSNumericValue
s can be expressed as a sum value. \n A sum value is a list.\n Each entry in the list is a tuple of a value,\n which is a number,\n and a unit map,\n which is a map of units (strings) to powers (integers).
\n \nTo create a sum value from a CSSNumericValue
this,\n the steps differ based on this’s class:
CSSUnitValue
\n CSSMathSum
\n CSSMathNegate
\n CSSMathProduct
\n CSSMathInvert
\n CSSMathMin
\n CSSMathMax
\n values
internal slot:",
"rationale": "let",
"steps": [
{
@@ -829,11 +829,11 @@
"html": "If new values is failure,\nreturn failure.
" }, { - "html": "A sum value is an abstract representation of aCSSNumericValue
as a sum of numbers with (possibly complex) units.\n Not all CSSNumericValue
s can be expressed as a sum value. \n A sum value is a list.\n Each entry in the list is a tuple of a value,\n which is a number,\n and a unit map,\n which is a map of units (strings) to powers (integers).
\n \nTo create a sum value from a CSSNumericValue
this,\n the steps differ based on this’s class:
CSSUnitValue
\n CSSMathSum
\n CSSMathNegate
\n CSSMathProduct
\n CSSMathInvert
\n CSSMathMin
\n CSSMathMax
\n CSSNumericValue
as a sum of numbers with (possibly complex) units.\n Not all CSSNumericValue
s can be expressed as a sum value. \n A sum value is a list.\n Each entry in the list is a tuple of a value,\n which is a number,\n and a unit map,\n which is a map of units (strings) to powers (integers).
\n \nTo create a sum value from a CSSNumericValue
this,\n the steps differ based on this’s class:
CSSUnitValue
\n CSSMathSum
\n CSSMathNegate
\n CSSMathProduct
\n CSSMathInvert
\n CSSMathMin
\n CSSMathMax
\n Let types be an initially empty list.
" }, { - "html": "To create a type from a unit map unit map:", + "html": "For each unit → power in unit map:", "rationale": "let", "steps": [ { @@ -959,7 +959,7 @@ "html": "Let result be a copy of units1.
" }, { - "html": "The product of two unit maps units1 and units2 is the result given by the following steps:", + "html": "For each unit → power in units2:", "rationale": "if", "steps": [ { @@ -1054,7 +1054,7 @@ "html": "Replace type1 with a fresh copy of type1,\nand type2 with a fresh copy of type2.\nLet finalType be a new type with an initially empty ordered map and an initially null percent hint.
" }, { - "html": "To add two types type1 and type2,\n perform the following steps:", + "html": "The types can’t be added.\nReturn failure.
\nApply the percent hint hint to type2.
\nVice versa if type2 has a non-null percent hint and type1 doesn’t.
\nContinue to the next step.
\nCopy all of type1’s entries to finalType,\nand then copy all of type2’s entries to finalType that finalType doesn’t already contain.\nSet finalType’s percent hint to type1’s percent hint.\nReturn finalType.
\nFor each base type other than \"percent\" hint:
\n \nIf the loop finishes without returning finalType,\nthen the types can’t be added.\nReturn failure.
\n \nThe types can’t be added.\nReturn failure.
\nIf type1 has a non-null percent hint hint and type2 doesn’t, apply the percent hint hint to type2.
\nVice versa if type2 has a non-null percent hint and type1 doesn’t.
" }, { - "html": "To multiply two types type1 and type2,\n perform the following steps:", + "html": "Copy all of type1’s entries to finalType,\nthen for each baseType → power of type2:", "rationale": "if", "steps": [ { @@ -1367,7 +1367,7 @@ "html": "Let matrix be a new DOMMatrix
,\ninitialized to the identity matrix,\nwith its is2D
internal slot set to true
.
toMatrix()
method of a CSSTransformValue
this must,\n when called,\n perform the following steps:",
+ "html": "For each func in this’s values to iterate over:",
"rationale": "let",
"steps": [
{
@@ -1532,7 +1532,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The CSSPerspective(length)
constructor must,\n when invoked,\n perform the following steps:",
+ "html": "If length is a CSSNumericValue
:",
"rationale": "if",
"steps": [
{
@@ -1541,7 +1541,7 @@
]
},
{
- "html": "The CSSPerspective(length)
constructor must,\n when invoked,\n perform the following steps:",
+ "html": "Otherwise (that is, if length is not a CSSNumericValue
):",
"rationale": "rectify",
"steps": [
{
@@ -2336,7 +2336,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To reify a math expression num:",
+ "html": "If num is a min() or max() expression:",
"rationale": "let",
"steps": [
{
@@ -2354,7 +2354,7 @@
"html": "Turn num’s argument\ninto an expression tree\nusing standard PEMDAS precedence rules,\nwith the following exceptions/clarification:
\nTreat subtraction as instead being addition,\nwith the RHS argument instead wrapped in a special \"negate\" node.
\nTreat division as instead being multiplication,\nwith the RHS argument instead wrapped in a special \"invert\" node.
\nAddition and multiplication are N-ary;\neach node can have any number of arguments.
\nIf an expression has only a single value in it,\nand no operation,\ntreat it as an addition node with the single argument.
\nLet s initially be the empty string.
" }, { - "html": "To serialize aCSSUnparsedValue
this:",
+ "html": "For each item in this’s [[tokens]]
internal slot:",
"rationale": "if",
"steps": [
{
@@ -2736,7 +2736,7 @@
"html": "Set s to the result of serializing a <number> from value,\nper CSSOM § 6.7.2 Serializing CSS Values.
" }, { - "html": "To serialize aCSSUnitValue
this,\n with optional arguments minimum, a numeric value,\n and maximum, a numeric value:",
+ "html": "If unit is:",
"rationale": ".switch",
"steps": [
{
@@ -2776,7 +2776,7 @@
"html": "Let s initially be the empty string.
" }, { - "html": "To serialize aCSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "If this is a CSSMathMin
or CSSMathMax
:",
"rationale": "append",
"steps": [
{
@@ -2791,7 +2791,7 @@
]
},
{
- "html": "To serialize a CSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "Otherwise, if this is a CSSMathSum
:",
"rationale": "if",
"steps": [
{
@@ -2801,7 +2801,7 @@
"html": "Serialize the first item in this’s values
internal slot\nwith nested set to true,\nand append the result to s.
CSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "For each arg in this’s values
internal slot beyond the first:",
"rationale": "if",
"steps": [
{
@@ -2821,7 +2821,7 @@
]
},
{
- "html": "To serialize a CSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "Otherwise, if this is a CSSMathNegate
:",
"rationale": "if",
"steps": [
{
@@ -2842,7 +2842,7 @@
]
},
{
- "html": "To serialize a CSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "Otherwise, if this is a CSSMathProduct
:",
"rationale": "if",
"steps": [
{
@@ -2852,7 +2852,7 @@
"html": "Serialize the first item in this’s values
internal slot\nwith nested set to true,\nand append the result to s.
CSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "For each arg in this’s values
internal slot beyond the first:",
"rationale": "if",
"steps": [
{
@@ -2872,7 +2872,7 @@
]
},
{
- "html": "To serialize a CSSMathValue
this,\n with optional arguments nested, a boolean (defaulting to false if unspecified), paren-less, a boolean (defaulting to false if unspecified),\n perform the following steps.",
+ "html": "Otherwise, if this is a CSSMathInvert
:",
"rationale": "if",
"steps": [
{
@@ -2915,7 +2915,7 @@
"html": "Let s initially be the empty string.
" }, { - "html": "To serialize aCSSTranslate
this:",
+ "html": "If this’s is2D
internal slot is false
:",
"rationale": "append",
"steps": [
{
@@ -2942,7 +2942,7 @@
]
},
{
- "html": "To serialize a CSSTranslate
this:",
+ "html": "Otherwise:",
"rationale": "append",
"steps": [
{
@@ -2974,7 +2974,7 @@
"html": "Let s initially be the empty string.
" }, { - "html": "To serialize aCSSRotate
this:",
+ "html": "If this’s is2D
internal slot is false
:",
"rationale": "append",
"steps": [
{
@@ -3007,7 +3007,7 @@
]
},
{
- "html": "To serialize a CSSRotate
this:",
+ "html": "Otherwise:",
"rationale": "append",
"steps": [
{
@@ -3033,7 +3033,7 @@
"html": "Let s initially be the empty string.
" }, { - "html": "To serialize aCSSScale
this:",
+ "html": "If this’s is2D
internal slot is false
:",
"rationale": "append",
"steps": [
{
@@ -3060,7 +3060,7 @@
]
},
{
- "html": "To serialize a CSSScale
this:",
+ "html": "Otherwise:",
"rationale": "append",
"steps": [
{
diff --git a/tr/algorithms/css-values-4.json b/tr/algorithms/css-values-4.json
index 70dcafbdfdb4..69b14ab1fbfe 100644
--- a/tr/algorithms/css-values-4.json
+++ b/tr/algorithms/css-values-4.json
@@ -82,7 +82,7 @@
{
"name": "determine the type of a calculation",
"href": "https://www.w3.org/TR/css-values-4/#determine-the-type-of-a-calculation",
- "html": "To determine the type of a calculation: \n At a + or - sub-expression,\nattempt to add the types of the left and right arguments.\nIf this returns failure,\nthe entire calculation’s type is failure.\nOtherwise, the sub-expression’s type is the returned type.
\nAt a * sub-expression, multiply the types of the left and right arguments.\nThe sub-expression’s type is the returned result.
\nAt a / sub-expression,\nlet left type be the result of finding the types of its left argument,\nand right type be the result of finding the types of its right argument\nand then inverting it.
\nThe sub-expression’s type is the result of multiplying the left type and right type.
\nAnything else is a terminal value,\nwhose type is determined based on its CSS type.\n(Unless otherwise specified,\nthe type’s associated percent hint is null.)
\nthe type is «[ ]» (empty map)
\nthe type is «[ \"length\" → 1 ]»
\nthe type is «[ \"angle\" → 1 ]»
\nthe type is «[ \"time\" → 1 ]»
\nthe type is «[ \"frequency\" → 1 ]»
\nthe type is «[ \"resolution\" → 1 ]»
\nthe type is «[ \"flex\" → 1 ]»
\nthe type is as defined by the keyword
\nIf, in the context in which the math function containing this calculation is placed, <percentage>s are resolved relative to another type of value\n(such as in width, where <percentage> is resolved against a <length>),\nand that other type is not <number>,\nthe type is determined as the other type,\nbut with a percent hint set to that other type.
\nOtherwise,\nthe type is «[ \"percent\" → 1 ]».
\nThe calculation’s type is failure.
\nAn item in values is an “operator”\nif it’s a <delim-token> with the value \"+\", \"-\", \"*\", or \"/\".\nOtherwise, it’s a “value”.
" }, { - "html": "To parse a calculation,\n\t\tgiven a calculation values represented as a list of component values,\n\t\tand returning a calculation tree:", + "html": "For every consecutive run of value items in values separated by \"*\" or \"/\" operators:", "rationale": "for", "steps": [ { @@ -197,7 +197,7 @@ ] }, { - "html": "To parse a calculation,\n\t\tgiven a calculation values represented as a list of component values,\n\t\tand returning a calculation tree:", + "html": "Collect children into Sum and Negate nodes.", "rationale": "for", "steps": [ { @@ -209,7 +209,7 @@ ] }, { - "html": "To parse a calculation,\n\t\tgiven a calculation values represented as a list of component values,\n\t\tand returning a calculation tree:", + "html": "For every leaf node leaf in values:", "rationale": "if", "steps": [ { @@ -232,7 +232,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To simplify a calculation tree root:", + "html": "If root is a numeric value:", "rationale": "if", "steps": [ { @@ -250,7 +250,7 @@ ] }, { - "html": "To simplify a calculation tree root:", + "html": "If root is any other leaf node\n(not an operator node):", "rationale": "if", "steps": [ { @@ -268,7 +268,7 @@ "html": "If root is an operator node that’s not one of the calc-operator nodes,\nand all of its calculation children are numeric values\nwith enough information to compute the operation root represents,\nreturn the result of running root’s operation\nusing its children,\nexpressed in the result’s canonical unit.
" }, { - "html": "To simplify a calculation tree root:", + "html": "If root is a Min or Max node,\nattempt to partially simplify it:", "rationale": "for", "steps": [ { @@ -280,7 +280,7 @@ ] }, { - "html": "To simplify a calculation tree root:", + "html": "If root is a Negate node:", "rationale": "if", "steps": [ { @@ -295,7 +295,7 @@ ] }, { - "html": "To simplify a calculation tree root:", + "html": "If root is an Invert node:", "rationale": "if", "steps": [ { @@ -310,7 +310,7 @@ ] }, { - "html": "To simplify a calculation tree root:", + "html": "If root is a Sum node:", "rationale": "for", "steps": [ { @@ -325,7 +325,7 @@ ] }, { - "html": "To simplify a calculation tree root:", + "html": "If root is a Product node:", "rationale": "for", "steps": [ { @@ -357,7 +357,7 @@ "html": "If the root of the calculation tree fn represents\nis a numeric value\n(number, percentage, or dimension),\nand the serialization being produced is of a computed value or later,\nthen clamp the value to the range allowed for its context\n(if necessary),\nthen serialize the value as normal\nand return the result.
" }, { - "html": "To serialize a math function fn:", + "html": "If fn represents an infinite or NaN value:", "rationale": "let", "steps": [ { @@ -410,7 +410,7 @@ "html": "If root is an Invert node,\nlet s be a string initially containing \"(1 / \".
\nSerialize root’s child,\nand append it to s.
\nAppend \")\" to s,\nthen return it.
" }, { - "html": "To serialize a calculation tree:", + "html": "For each child of root beyond the first:", "rationale": "if", "steps": [ { @@ -425,7 +425,7 @@ ] }, { - "html": "To serialize a calculation tree:", + "html": "For each child of root beyond the first:", "rationale": "if", "steps": [ { diff --git a/tr/algorithms/css-view-transitions-1.json b/tr/algorithms/css-view-transitions-1.json index 2a11f44bc681..11402dd7f961 100644 --- a/tr/algorithms/css-view-transitions-1.json +++ b/tr/algorithms/css-view-transitions-1.json @@ -48,7 +48,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To perform pending transition operations given aDocument
document, perform the following steps:",
+ "html": "If document’s active view transition is not null, then:",
"rationale": "if",
"steps": [
{
@@ -80,7 +80,7 @@
"html": "Set document’s rendering suppression for view transitions to true.
" }, { - "html": "To setup view transition for aViewTransition
transition,\n\t\t\tperform the following steps:",
+ "html": "Queue a global task on the DOM manipulation task source,\ngiven transition’s relevant global object,\nto execute the following steps:",
"rationale": "if",
"steps": [
{
@@ -90,7 +90,7 @@
"html": "Call the update callback of transition.
" }, { - "html": "To setup view transition for aViewTransition
transition,\n\t\t\tperform the following steps:",
+ "html": "If the promise does not settle within an implementation-defined timeout, then:",
"rationale": "if",
"steps": [
{
@@ -102,7 +102,7 @@
],
"additional": [
{
- "html": "To setup view transition for a ViewTransition
transition,\n\t\t\tperform the following steps:",
+ "html": "If the promise was rejected with reason reason, then:",
"rationale": "if",
"steps": [
{
@@ -141,7 +141,7 @@
"html": "Capture the new state for transition.
\nIf failure is returned, then skip the view transition for transition with an \"InvalidStateError
\" DOMException
in transition’s relevant Realm,\nand return.
ViewTransition
transition,\n\t\t\tperform the following steps:",
+ "html": "For each capturedElement of transition’s named elements' values:",
"rationale": "if",
"steps": [
{
@@ -188,7 +188,7 @@
"html": "Set transition’s initial snapshot containing block size to the snapshot containing block size.
" }, { - "html": "To capture the old state forViewTransition
transition:",
+ "html": "For each element of every element that is connected,\nand has a node document equal to to document,\nin paint order:",
"rationale": "if",
"steps": [
{
@@ -218,7 +218,7 @@
]
},
{
- "html": "To capture the old state for ViewTransition
transition:",
+ "html": "For each element in captureElements:",
"rationale": "let",
"steps": [
{
@@ -260,7 +260,7 @@
]
},
{
- "html": "To capture the old state for ViewTransition
transition:",
+ "html": "For each element in captureElements:",
"rationale": "set",
"steps": [
{
@@ -286,7 +286,7 @@
"html": "Let usedTransitionNames be a new set of strings.
" }, { - "html": "To capture the new state forViewTransition
transition:",
+ "html": "For each element of every element that is connected,\nand has a node document equal to to document,\nin paint order:",
"rationale": "if",
"steps": [
{
@@ -327,7 +327,7 @@
"html": "Set document’s show view transition tree to true.
" }, { - "html": "To setup transition pseudo-elements for aViewTransition
transition:",
+ "html": "For each transitionName → capturedElement of transition’s named elements:",
"rationale": "let",
"steps": [
{
@@ -343,7 +343,7 @@
"html": "Append imagePair to group.
" }, { - "html": "To setup transition pseudo-elements for aViewTransition
transition:",
+ "html": "If capturedElement’s old image is not null, then:",
"rationale": "let",
"steps": [
{
@@ -355,7 +355,7 @@
]
},
{
- "html": "To setup transition pseudo-elements for a ViewTransition
transition:",
+ "html": "If capturedElement’s new element is not null, then:",
"rationale": "let",
"steps": [
{
@@ -367,7 +367,7 @@
]
},
{
- "html": "To setup transition pseudo-elements for a ViewTransition
transition:",
+ "html": "If capturedElement’s old image is null, then:",
"rationale": "assert",
"steps": [
{
@@ -379,7 +379,7 @@
]
},
{
- "html": "To setup transition pseudo-elements for a ViewTransition
transition:",
+ "html": "If capturedElement’s new element is null, then:",
"rationale": "assert",
"steps": [
{
@@ -391,7 +391,7 @@
]
},
{
- "html": "To setup transition pseudo-elements for a ViewTransition
transition:",
+ "html": "If both of capturedElement’s old image and new element are not null, then:",
"rationale": "let",
"steps": [
{
@@ -492,7 +492,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To capture the image given an element element, perform the following steps.\n\t\tThey return an image.",
+ "html": "If element is the document element, then:",
"rationale": "render",
"steps": [
{
@@ -504,7 +504,7 @@
]
},
{
- "html": "To capture the image given an element element, perform the following steps.\n\t\tThey return an image.",
+ "html": "Otherwise:",
"rationale": "render",
"steps": [
{
@@ -530,7 +530,7 @@
"html": "Let hasActiveAnimations be a boolean, initially false.
" }, { - "html": "To handle transition frame given aViewTransition
transition:",
+ "html": "For each element of transition’s transition root pseudo-element's inclusive descendants:",
"rationale": "for",
"steps": [
{
@@ -539,7 +539,7 @@
]
},
{
- "html": "To handle transition frame given a ViewTransition
transition:",
+ "html": "If hasActiveAnimations is false:",
"rationale": "set",
"steps": [
{
@@ -571,14 +571,14 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To update pseudo-element styles for a ViewTransition
transition: \n \n This algorithm must be executed to update styles in user-agent origin if its effects can be observed by a web API.
", + "html": "For each transitionName → capturedElement of transition’s named elements:", "rationale": "let", "steps": [ { "html": "Let width, height, transform, writingMode, direction, textOrientation and mixBlendMode be null.
" }, { - "html": "To update pseudo-element styles for aViewTransition
transition: \n \n This algorithm must be executed to update styles in user-agent origin if its effects can be observed by a web API.
", + "html": "If capturedElement’s new element is null, then:", "rationale": "set", "steps": [ { @@ -605,7 +605,7 @@ ] }, { - "html": "To update pseudo-element styles for aViewTransition
transition: \n \n This algorithm must be executed to update styles in user-agent origin if its effects can be observed by a web API.
", + "html": "Otherwise:", "rationale": "return", "steps": [ { @@ -638,7 +638,7 @@ "html": "If capturedElement’s group styles rule is null,\nthen set capturedElement’s group styles rule to a new CSSStyleRule
representing the following CSS,\nand append it to transition’s relevant global object’s associated document's dynamic view transition style sheet.
Otherwise, update capturedElement’s group styles rule to match the following CSS:
\n:root:" }, { - "html": "To update pseudo-element styles for a:view-transition-group ( transitionName) { \nwidth : width; \nheight : height; \ntransform : transform; \nwriting-mode : writingMode; \ndirection : direction; \ntext-orientation : textOrientation; \nmix-blend-mode : mixBlendMode; \n} \n
ViewTransition
transition: \n \n This algorithm must be executed to update styles in user-agent origin if its effects can be observed by a web API.
", + "html": "If capturedElement’s new element is not null, then:", "rationale": "let", "steps": [ { @@ -666,14 +666,14 @@ "html": "Assert: document’s active view transition is transition.
" }, { - "html": "To clear view transition of aViewTransition
transition:",
+ "html": "For each capturedElement of transition’s named elements' values:",
"rationale": "if",
"steps": [
{
"html": "If capturedElement’s new element is not null,\nthen set capturedElement’s new element's captured in a view transition to false.
" }, { - "html": "To clear view transition of aViewTransition
transition:",
+ "html": "For each style of capturedElement’s style definitions:",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/css-view-transitions-2.json b/tr/algorithms/css-view-transitions-2.json
index 7feb658bf071..7d562854b91b 100644
--- a/tr/algorithms/css-view-transitions-2.json
+++ b/tr/algorithms/css-view-transitions-2.json
@@ -71,7 +71,7 @@
"html": "Otherwise, if callbackOptions is a StartViewTransitionOptions
, then set updateCallback to callbackOptions’s update
.
startViewTransition(callbackOptions)
are as follows:",
+ "html": "If this’s active view transition is not null and its outbound post-capture steps is not null,\nthen:",
"rationale": "let",
"steps": [
{
@@ -188,7 +188,7 @@
"html": "Set outboundTransition’s active types to transitionTypesFromRule.
" }, { - "html": "To setup cross-document view-transition given aDocument
oldDocument,\n\ta Document
newDocument, and proceedWithNavigation, which is an algorithm accepting nothing:",
+ "html": "Set outboundTransition’s outbound post-capture steps to the following steps given a view transition params-or-null params:",
"rationale": "set",
"steps": [
{
diff --git a/tr/algorithms/device-posture.json b/tr/algorithms/device-posture.json
index ec1812b64b71..1af53463fa22 100644
--- a/tr/algorithms/device-posture.json
+++ b/tr/algorithms/device-posture.json
@@ -41,7 +41,7 @@
"rationale": "set",
"steps": [
{
- "html": "Set documet.[[CurrentPosture]]
to posture."
+ "html": "Set document.[[CurrentPosture]]
to posture."
},
{
"html": "Fire an event named \"change
\" at the\n DevicePosture
object associated with document's relevant global object's associated Navigator
."
diff --git a/tr/algorithms/event-timing.json b/tr/algorithms/event-timing.json
index c0f69b63326e..aad179969007 100644
--- a/tr/algorithms/event-timing.json
+++ b/tr/algorithms/event-timing.json
@@ -67,7 +67,7 @@
"html": "Assert that entry’s entryType
attribute value equals \"event
\".
PerformanceEventTiming
entry and a PerformanceObserverInit
options, to\n determine if we should add PerformanceEventTiming, with entry and\n optionally options as inputs, run the following steps:",
+ "html": "Let minDuration be computed as follows:",
"rationale": "if",
"steps": [
{
@@ -134,7 +134,7 @@
"html": "Let pendingPointerDowns be window’s pending pointer downs.
" }, { - "html": "When asked to compute interactionId with event as input, run the following steps:", + "html": "If type iskeyup
:",
"rationale": "if",
"steps": [
{
@@ -170,11 +170,11 @@
]
},
{
- "html": "When asked to compute interactionId with event as input, run the following steps:",
+ "html": "If type is compositionstart
:",
"rationale": "for",
"steps": [
{
- "html": "When asked to compute interactionId with event as input, run the following steps:",
+ "html": "For each entry in the values of pendingKeyDowns:",
"rationale": "append",
"steps": [
{
@@ -191,7 +191,7 @@
]
},
{
- "html": "When asked to compute interactionId with event as input, run the following steps:",
+ "html": "If type is input
:",
"rationale": "if",
"steps": [
{
@@ -209,14 +209,14 @@
]
},
{
- "html": "When asked to compute interactionId with event as input, run the following steps:",
+ "html": "Otherwise (type is pointercancel
, pointermove
, pointerup
, or click
):",
"rationale": "let",
"steps": [
{
"html": "Let pointerId be event’s pointerId
attribute value.
click
:",
"rationale": "if",
"steps": [
{
@@ -237,7 +237,7 @@
]
},
{
- "html": "When asked to compute interactionId with event as input, run the following steps:",
+ "html": "If type is pointermove
:",
"rationale": "add",
"steps": [
{
@@ -261,7 +261,7 @@
"html": "Assert that pointerDownEntry is a PerformanceEventTiming
entry.
pointerup
:",
"rationale": "let",
"steps": [
{
@@ -360,7 +360,7 @@
"html": "If event’s type
attribute value is not keydown
nor pointerdown
, append timingEntry to relevantGlobal’s entries to be queued.
type
attribute value is pointerdown
:",
"rationale": "let",
"steps": [
{
@@ -378,11 +378,11 @@
]
},
{
- "html": "When asked to to finalize event timing, with timingEntry, event, target, and processingEnd as inputs, run the following steps:",
+ "html": "Otherwise (event’s type
attribute value is keydown
):",
"rationale": "if",
"steps": [
{
- "html": "When asked to to finalize event timing, with timingEntry, event, target, and processingEnd as inputs, run the following steps:",
+ "html": "If event’s isComposing
attribute value is true
:",
"rationale": "append",
"steps": [
{
@@ -400,14 +400,14 @@
"html": "Let code be event’s keyCode
attribute value.
Let entry be pendingKeyDowns[code].
" }, { - "html": "When asked to to finalize event timing, with timingEntry, event, target, and processingEnd as inputs, run the following steps:", + "html": "If code is not 229:\nNote: 229 is a special case since it corresponds to IME keyboard events. Sometimes multiple of these are sent by the user agent, and they do not correspond holding a key down repeatedly.", "rationale": "increase", "steps": [ { @@ -446,7 +446,7 @@ "html": "Let renderingTimestamp be the current high resolution time.
" }, { - "html": "When asked to dispatch pending Event Timing entries for aDocument
doc, run the following steps:",
+ "html": "For each timingEntry in window’s entries to be queued:",
"rationale": "set",
"steps": [
{
@@ -461,7 +461,7 @@
"html": "Clear window’s entries to be queued.
" }, { - "html": "When asked to dispatch pending Event Timing entries for aDocument
doc, run the following steps:",
+ "html": "For each pendingDown in the values from window’s pending pointer downs:",
"rationale": "set",
"steps": [
{
@@ -490,7 +490,7 @@
"html": "Let name be timingEntry’s name
attribute value.
PerformanceEventTiming
timingEntry, a Window
window, and a DOMHighResTimeStamp
renderingTimestamp, perform the following steps:",
+ "html": "Perform the following steps to update the event counts:",
"rationale": "let",
"steps": [
{
@@ -505,11 +505,11 @@
]
},
{
- "html": "When asked to set event timing entry duration given a PerformanceEventTiming
timingEntry, a Window
window, and a DOMHighResTimeStamp
renderingTimestamp, perform the following steps:",
+ "html": "If window’s has dispatched input event is false, run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "When asked to set event timing entry duration given a PerformanceEventTiming
timingEntry, a Window
window, and a DOMHighResTimeStamp
renderingTimestamp, perform the following steps:",
+ "html": "If name is \"pointerdown
\", run the following steps:",
"rationale": "set",
"steps": [
{
@@ -521,11 +521,11 @@
]
},
{
- "html": "When asked to set event timing entry duration given a PerformanceEventTiming
timingEntry, a Window
window, and a DOMHighResTimeStamp
renderingTimestamp, perform the following steps:",
+ "html": "Otherwise, run the following steps:",
"rationale": "if",
"steps": [
{
- "html": "When asked to set event timing entry duration given a PerformanceEventTiming
timingEntry, a Window
window, and a DOMHighResTimeStamp
renderingTimestamp, perform the following steps:",
+ "html": "If name is \"pointerup
\" AND if window’s pending first pointer down is not null, then:",
"rationale": "set",
"steps": [
{
@@ -537,7 +537,7 @@
]
},
{
- "html": "When asked to set event timing entry duration given a PerformanceEventTiming
timingEntry, a Window
window, and a DOMHighResTimeStamp
renderingTimestamp, perform the following steps:",
+ "html": "Otherwise, if name is one of \"click
\", \"keydown
\" or \"mousedown
\", then:",
"rationale": "set",
"steps": [
{
diff --git a/tr/algorithms/fetch-metadata.json b/tr/algorithms/fetch-metadata.json
index f271a5cb4cb0..22cc1b5192a4 100644
--- a/tr/algorithms/fetch-metadata.json
+++ b/tr/algorithms/fetch-metadata.json
@@ -63,7 +63,7 @@
"html": "If r is a navigation request that was explicitly caused by a user’s interaction with\nthe user agent (by typing an address into the user agent directly, for example, or by\nclicking a bookmark, etc.), then set header’s value to none
.
Sec-Fetch-Site
header for a request r:",
+ "html": "If header’s value is not none
, then for each url in r’s url list:",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/fill-stroke-3.json b/tr/algorithms/fill-stroke-3.json
index a40b5684babe..03f5388e91ff 100644
--- a/tr/algorithms/fill-stroke-3.json
+++ b/tr/algorithms/fill-stroke-3.json
@@ -17,14 +17,14 @@
"html": "Let path be the equivalent path of the element.
" }, { - "html": "The stroke shape of an element is the shape that is filled by the stroke property.\n\t\tThe following algorithm describes what the stroke shape of text, apath
, or basic shape is,\n\t\ttaking into account the stroking properties above:",
+ "html": "For each subpath of path:",
"rationale": "let",
"steps": [
{
"html": "Let positions be the dash positions for the subpath.
" }, { - "html": "The stroke shape of an element is the shape that is filled by the stroke property.\n\t\tThe following algorithm describes what the stroke shape of text, apath
, or basic shape is,\n\t\ttaking into account the stroking properties above:",
+ "html": "For each pair (start, end) in positions:",
"rationale": "let",
"steps": [
{
@@ -40,7 +40,7 @@
"html": "Let index and last be the indexes of the path segments in the subpath at distance start and end along the subpath.
" }, { - "html": "The stroke shape of an element is the shape that is filled by the stroke property.\n\t\tThe following algorithm describes what the stroke shape of text, apath
, or basic shape is,\n\t\ttaking into account the stroking properties above:",
+ "html": "While index < last:",
"rationale": "set",
"steps": [
{
@@ -109,7 +109,7 @@
"html": "Let position be dashlength.
" }, { - "html": "The dash positions for a given subpath\n\t\tof the equivalent path of apath
or basic shape\n\t\tis a sequence of pairs of values,\n\t\twhich represent the starting and ending distance along the subpath\n\t\tfor each of the dashes that form the subpath’s stroke.\n\t\tIt is determined as follows:",
+ "html": "While position < pathlength:",
"rationale": "set",
"steps": [
{
@@ -141,7 +141,7 @@
"html": "If stroke-linecap is butt, then return an empty shape.
" }, { - "html": "The starting and ending cap shapes at a given position along a subpath are determined as follows: \n \nOn the top row, the green lines indicate the perpendicular to the tangent at the path endpoints\n\t\t\t\tand the pink areas are the caps.\n\t\t\t\tThe bottom row shows the stroke without the perpendicular and cap highlighting.
\nOn the top row, the green lines indicate the perpendicular to the tangent at the path endpoints\n\t\t\t\tand the pink areas are the caps.\n\t\t\t\tThe bottom row shows the stroke without the perpendicular and cap highlighting.
\nLet |Bleft| and |Bright|\nbe lines parallel to B at a distance of stroke-width / 2\nto the left and to the right of B relative to the subpath direction,\nrespectively.
" }, { - "html": "The line join shape for a given segment of a subpath is determined as follows: \n \nrdf:nil
, it represents\n the termination of an RDF collection:",
"rationale": "reference",
"steps": [
{
@@ -2687,7 +2687,7 @@
"html": "Otherwise, if referenced once has an entry for object,\n set the object entry of referenced once to false
."
},
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "Otherwise, if object is a blank node identifier,\n it might represent a list node:",
"rationale": "set",
"steps": [
{
@@ -2700,11 +2700,11 @@
]
},
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "For each name and graph object in graph map:",
"rationale": "if",
"steps": [
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "If compound literal subjects\n has an entry for name, then for each cl\n which is a key in that entry:",
"rationale": "initialize",
"steps": [
{
@@ -2723,7 +2723,7 @@
"html": "Initialize cl node to the value of cl\n in graph object, and remove that entry from graph object,\n continuing to the next cl if cl node is not a map."
},
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "For each cl reference in the value of property in node\n where the value of @id
in cl reference is cl:",
"rationale": "delete",
"steps": [
{
@@ -2749,7 +2749,7 @@
"html": "Initialize nil to the value of the rdf:nil
entry\n of graph object."
},
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "For each item usage in the usages
entry of\n nil, perform the following steps:",
"rationale": "initialize",
"steps": [
{
@@ -2759,7 +2759,7 @@
"html": "Initialize two empty arrays list\n and list nodes."
},
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "While property equals rdf:rest
,\n the value of the @id
entry\n of node is a blank node identifier,\n the value of the entry of referenced once associated with the @id
\n entry of node
is a map,\n node has rdf:first
and rdf:rest
entries,\n both of which have as value an array consisting of a single element,\n and node has no other entries apart from an optional @type
\n entry whose value is an array with a single item equal to\n rdf:List
,\n node represents a well-formed list node.\n Perform the following steps to traverse the list backwards towards its head:",
"rationale": "append",
"steps": [
{
@@ -2799,11 +2799,11 @@
"html": "Initialize an empty array result."
},
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "For each subject and node in default graph\n ordered lexicographically by subject\n if ordered
is true
:",
"rationale": "if",
"steps": [
{
- "html": "In the RDF abstract syntax, RDF literals have a\n lexical form, as defined\n in [RDF11-CONCEPTS]. The form of these literals is used when creating JSON-LD values based on these literals.",
+ "html": "If graph map has a subject entry:",
"rationale": "add",
"steps": [
{
diff --git a/tr/algorithms/largest-contentful-paint.json b/tr/algorithms/largest-contentful-paint.json
index 8a207c7864e1..0b7bff733f7b 100644
--- a/tr/algorithms/largest-contentful-paint.json
+++ b/tr/algorithms/largest-contentful-paint.json
@@ -24,7 +24,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "When asked to report largest contentful paint given a Document
document, a timestamp now, an ordered set of pending image records paintedImages, and an ordered set of elements paintedTextNodes, perform the following steps:",
+ "html": "For each record of paintedImages:",
"rationale": "let",
"steps": [
{
@@ -48,7 +48,7 @@
]
},
{
- "html": "When asked to report largest contentful paint given a Document
document, a timestamp now, an ordered set of pending image records paintedImages, and an ordered set of elements paintedTextNodes, perform the following steps:",
+ "html": "For each textNode of paintedTextNodes,",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/mediacapture-streams.json b/tr/algorithms/mediacapture-streams.json
index ab51a3a3e20b..4a2a3696c8aa 100644
--- a/tr/algorithms/mediacapture-streams.json
+++ b/tr/algorithms/mediacapture-streams.json
@@ -150,16 +150,10 @@
}
]
},
- {
- "name": "create a MediaStreamTrack",
- "href": "https://www.w3.org/TR/mediacapture-streams/#dfn-create-a-mediastreamtrack",
- "html": "To create a MediaStreamTrack with an underlying\n source, and a mediaDevicesToTieSourceTo, run the\n following steps:",
- "rationale": "To "
- },
{
"name": "MediaStreamTrack/[[Source]]",
"href": "https://www.w3.org/TR/mediacapture-streams/#dfn-source-0",
- "html": "[[Source]],\n initialized to source.",
+ "html": "To create a MediaStreamTrack with an underlying\n source, and a mediaDevicesToTieSourceTo, run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -371,14 +365,14 @@
{
"name": "must not be exposed",
"href": "https://www.w3.org/TR/mediacapture-streams/#dfn-must-not-be-exposed",
- "html": "[Exposed=Window]\ninterface MediaStreamTrack
: EventTarget {\n readonly attribute DOMString kind
;\n readonly attribute DOMString id
;\n readonly attribute DOMString label
;\n attribute boolean enabled
;\n readonly attribute boolean muted
;\n attribute EventHandler onmute
;\n attribute EventHandler onunmute
;\n readonly attribute MediaStreamTrackState
readyState
;\n attribute EventHandler onended
;\n MediaStreamTrack
clone
();\n undefined stop
();\n MediaTrackCapabilities
getCapabilities
();\n MediaTrackConstraints
getConstraints
();\n MediaTrackSettings
getSettings
();\n Promise<undefined> applyConstraints
(optional MediaTrackConstraints
constraints = {});\n};
\n kind
of type DOMString
, readonlyid
of type DOMString
, readonlylabel
of type DOMString
, readonlyenabled
of type boolean
The enabled
\n attribute controls the enabled state for the object.
On getting,\n this.[[Enabled]]
MUST be returned.\n On setting,\n this.[[Enabled]]
MUST be set to the\n new value.
muted
of type boolean
, readonlyThe muted
attribute\n reflects whether the track is muted. It MUST return\n this.[[Muted]]
.
onmute
of type EventHandler
The event type of this event handler is mute.
\nonunmute
of type EventHandler
The event type of this event handler is unmute.
\nreadyState
of type MediaStreamTrackState
, readonlyOn getting, the readyState
attribute MUST return\n this.[[ReadyState]]
.
onended
of type EventHandler
The event type of this event handler is ended.
\nclone
When the clone
()
method is invoked, the User Agent\n MUST return the result of clone a track with this.
stop
When a MediaStreamTrack
object's\n stop
()
method is invoked, the User\n Agent MUST run following steps:
getCapabilities
Returns the capabilites of the source that this\n MediaStreamTrack
, the constrainable\n object, represents.
See ConstrainablePattern\n Interface for the definition of this method.
\nSince this method gives likely\n persistent, cross-origin information about the underlying\n device, it adds to the fingerprint surface of the device.
getConstraints
See ConstrainablePattern\n Interface for the definition of this method.
\ngetSettings
When a MediaStreamTrack
object's MediaStreamTrack
.getSettings
()
method is invoked,\n the User Agent MUST run following steps:
applyConstraints
When a MediaStreamTrack
object's\n applyConstraints
()
method is invoked, the User\n Agent MUST run following steps:
MediaStreamTrack
object's\n applyConstraints
()
method is invoked, the User\n Agent MUST run following steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "Let track be the current\n MediaStreamTrack
object.
[Exposed=Window]\ninterface MediaStreamTrack
: EventTarget {\n readonly attribute DOMString kind
;\n readonly attribute DOMString id
;\n readonly attribute DOMString label
;\n attribute boolean enabled
;\n readonly attribute boolean muted
;\n attribute EventHandler onmute
;\n attribute EventHandler onunmute
;\n readonly attribute MediaStreamTrackState
readyState
;\n attribute EventHandler onended
;\n MediaStreamTrack
clone
();\n undefined stop
();\n MediaTrackCapabilities
getCapabilities
();\n MediaTrackConstraints
getConstraints
();\n MediaTrackSettings
getSettings
();\n Promise<undefined> applyConstraints
(optional MediaTrackConstraints
constraints = {});\n};
\n kind
of type DOMString
, readonlyid
of type DOMString
, readonlylabel
of type DOMString
, readonlyenabled
of type boolean
The enabled
\n attribute controls the enabled state for the object.
On getting,\n this.[[Enabled]]
MUST be returned.\n On setting,\n this.[[Enabled]]
MUST be set to the\n new value.
muted
of type boolean
, readonlyThe muted
attribute\n reflects whether the track is muted. It MUST return\n this.[[Muted]]
.
onmute
of type EventHandler
The event type of this event handler is mute.
\nonunmute
of type EventHandler
The event type of this event handler is unmute.
\nreadyState
of type MediaStreamTrackState
, readonlyOn getting, the readyState
attribute MUST return\n this.[[ReadyState]]
.
onended
of type EventHandler
The event type of this event handler is ended.
\nclone
When the clone
()
method is invoked, the User Agent\n MUST return the result of clone a track with this.
stop
When a MediaStreamTrack
object's\n stop
()
method is invoked, the User\n Agent MUST run following steps:
getCapabilities
Returns the capabilites of the source that this\n MediaStreamTrack
, the constrainable\n object, represents.
See ConstrainablePattern\n Interface for the definition of this method.
\nSince this method gives likely\n persistent, cross-origin information about the underlying\n device, it adds to the fingerprint surface of the device.
getConstraints
See ConstrainablePattern\n Interface for the definition of this method.
\ngetSettings
When a MediaStreamTrack
object's MediaStreamTrack
.getSettings
()
method is invoked,\n the User Agent MUST run following steps:
applyConstraints
When a MediaStreamTrack
object's\n applyConstraints
()
method is invoked, the User\n Agent MUST run following steps:
[[ReadyState]]
\n is \"ended
\", run the following sub steps:",
"rationale": "let",
"steps": [
{
@@ -423,16 +417,10 @@
}
]
},
- {
- "name": "create a MediaDevices",
- "href": "https://www.w3.org/TR/mediacapture-streams/#dfn-create-a-mediadevices",
- "html": "To create a MediaDevices object, given realm, run the following steps:",
- "rationale": "To "
- },
{
"name": "MediaDevices/[[devicesLiveMap]]",
"href": "https://www.w3.org/TR/mediacapture-streams/#dfn-deviceslivemap",
- "html": "[[devicesLiveMap]],\n initialized to an empty map.",
+ "html": "To create a MediaDevices object, given realm, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -442,7 +430,7 @@
"html": "Let settings be mediaDevices's relevant settings object.
" }, { - "html": "[[devicesLiveMap]],\n initialized to an empty map.", + "html": "For each kind of device, kind, that\n MediaDevices
.getUserMedia
()
exposes, run the following step:
\n
", "rationale": "set", "steps": [ { @@ -451,7 +439,7 @@ ] }, { - "html": "[[devicesLiveMap]],\n initialized to an empty map.", + "html": "For each individual device that MediaDevices
.getUserMedia
()
\n exposes, using the device's\n deviceId, deviceId, run the following step:
\n
", "rationale": "set", "steps": [ { diff --git a/tr/algorithms/orientation-event.json b/tr/algorithms/orientation-event.json index d97abf34e398..5e7dd2955627 100644 --- a/tr/algorithms/orientation-event.json +++ b/tr/algorithms/orientation-event.json @@ -26,15 +26,15 @@ "html": "If absolute is true, append \"magnetometer\" » to permissions.
" }, { - "html": "TherequestPermission(absolute)
method steps are:",
+ "html": "Run these steps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "The requestPermission(absolute)
method steps are:",
+ "html": "For each name of permissions:",
"rationale": "if",
"steps": [
{
- "html": "The requestPermission(absolute)
method steps are:",
+ "html": "If name’s permission state is \"prompt
\" and hasTransientActivation is false:",
"rationale": "queue",
"steps": [
{
@@ -51,11 +51,11 @@
"html": "Let permissionState be \"granted
\".
requestPermission(absolute)
method steps are:",
+ "html": "For each name of permissions:",
"rationale": "if",
"steps": [
{
- "html": "The requestPermission(absolute)
method steps are:",
+ "html": "If the result of requesting permission to use name is not \"granted
\":",
"rationale": "set",
"steps": [
{
@@ -94,14 +94,14 @@
"html": "Let virtualSensorType be \"relative-orientation
\" if absolute is false, and \"absolute-orientation
\" otherwise.
DOMString
event, Window
window and boolean
absolute:",
+ "html": "If topLevelTraversable’s virtual sensor mapping contains virtualSensorType:",
"rationale": "let",
"steps": [
{
"html": "Let virtualSensor be topLevelTraversable’s virtual sensor mapping[virtualSensorType].
" }, { - "html": "To fire an orientation event given aDOMString
event, Window
window and boolean
absolute:",
+ "html": "If virtualSensor’s can provide readings flag is true:",
"rationale": "set",
"steps": [
{
@@ -112,11 +112,11 @@
]
},
{
- "html": "To fire an orientation event given a DOMString
event, Window
window and boolean
absolute:",
+ "html": "Otherwise:",
"rationale": "if",
"steps": [
{
- "html": "To fire an orientation event given a DOMString
event, Window
window and boolean
absolute:",
+ "html": "If absolute is false:",
"rationale": "set",
"steps": [
{
@@ -125,7 +125,7 @@
]
},
{
- "html": "To fire an orientation event given a DOMString
event, Window
window and boolean
absolute:",
+ "html": "Otherwise:",
"rationale": "set",
"steps": [
{
@@ -139,7 +139,7 @@
"html": "Let permissions be null.
" }, { - "html": "To fire an orientation event given aDOMString
event, Window
window and boolean
absolute:",
+ "html": "If absolute is false:",
"rationale": "set",
"steps": [
{
@@ -148,7 +148,7 @@
]
},
{
- "html": "To fire an orientation event given a DOMString
event, Window
window and boolean
absolute:",
+ "html": "Otherwise:",
"rationale": "set",
"steps": [
{
@@ -160,11 +160,11 @@
"html": "Let environment be window’s relevant settings object.
" }, { - "html": "To fire an orientation event given aDOMString
event, Window
window and boolean
absolute:",
+ "html": "Run these steps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "To fire an orientation event given a DOMString
event, Window
window and boolean
absolute:",
+ "html": "For each permission in permissions:",
"rationale": "let",
"steps": [
{
@@ -176,7 +176,7 @@
]
},
{
- "html": "To fire an orientation event given a DOMString
event, Window
window and boolean
absolute:",
+ "html": "Queue a global task on the device motion and orientation task source given window to run the following steps:",
"rationale": "let",
"steps": [
{
@@ -275,18 +275,18 @@
"html": "Let result be a new promise in this's relevant Realm.
" }, { - "html": "TherequestPermission()
method steps are:",
+ "html": "Run these steps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let permissions be « \"accelerometer\", \"gyroscope\" ».
" }, { - "html": "TherequestPermission()
method steps are:",
+ "html": "For each name of permissions:",
"rationale": "if",
"steps": [
{
- "html": "The requestPermission()
method steps are:",
+ "html": "If name’s permission state is \"prompt
\" and hasTransientActivation is false:",
"rationale": "queue",
"steps": [
{
@@ -303,11 +303,11 @@
"html": "Let permissionState be \"granted
\".
requestPermission()
method steps are:",
+ "html": "For each name of permissions:",
"rationale": "if",
"steps": [
{
- "html": "The requestPermission()
method steps are:",
+ "html": "If the result of requesting permission to use name is not \"granted
\":",
"rationale": "set",
"steps": [
{
diff --git a/tr/algorithms/permissions-policy-1.json b/tr/algorithms/permissions-policy-1.json
index 820168fc6889..e1986ae4aef6 100644
--- a/tr/algorithms/permissions-policy-1.json
+++ b/tr/algorithms/permissions-policy-1.json
@@ -34,7 +34,7 @@
"html": "Let url be the result of calling the url parser on the serialization of origin.
" }, { - "html": "To determine whether an allowlist matches an origin origin, run these steps:", + "html": "For each permissions-source-expression item in the allowlist’s expressions:", "rationale": "if", "steps": [ { diff --git a/tr/algorithms/permissions.json b/tr/algorithms/permissions.json index 611998acc31f..106b0c14c895 100644 --- a/tr/algorithms/permissions.json +++ b/tr/algorithms/permissions.json @@ -152,7 +152,7 @@ "html": "Let feature be descriptor'sname
."
},
{
- "html": "A descriptor's permission state, given an optional\n environment settings object settings is the result of the following algorithm.\n It returns a PermissionState
enum value:",
+ "html": "If there exists a policy-controlled feature for feature and\n settings' relevant global object has an associated Document
run the\n following step:",
"rationale": "let",
"steps": [
{
@@ -219,7 +219,7 @@
"html": "If descriptor's permission state is \"granted
\", the\n user agent may return one (or more if allowMultiple is true) of options chosen by\n the user and abort these steps. If the user agent returns without prompting, then\n subsequent prompts for the user to choose\n from the same set of options with the same descriptor must return the same option(s),\n unless the user agent receives new information about the user's intent."
},
{
- "html": "To prompt the user to choose one or more options associated with a given\n descriptor and an optional boolean\n allowMultiple (default false), the user agent must perform the following\n steps. This algorithm returns either \"denied
\" or the user's\n selection.",
+ "html": "Ask the user to choose one or more options or deny permission, and wait for them\n to choose:",
"rationale": "if",
"steps": [
{
@@ -256,7 +256,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "When the query()
method is invoked, the user agent MUST run the\n following query a permission algorithm, passing the\n parameter permissionDesc:",
+ "html": "If this's relevant global object is a Window
object, then:",
"rationale": "if",
"steps": [
{
@@ -283,7 +283,7 @@
"html": "Let promise be a new promise."
},
{
- "html": "When the query()
method is invoked, the user agent MUST run the\n following query a permission algorithm, passing the\n parameter permissionDesc:",
+ "html": "Return promise and continue in parallel:",
"rationale": "let",
"steps": [
{
@@ -315,7 +315,7 @@
"html": "Assert: The feature identified by name is supported by the user agent."
},
{
- "html": "To create a PermissionStatus
for a given\n PermissionDescriptor
permissionDesc:",
+ "html": "Let status be a new instance of the permission result type identified by name:",
"rationale": "initialize",
"steps": [
{
@@ -338,7 +338,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "Whenever the user agent is aware that the state of a PermissionStatus
\n instance status has changed, it asynchronously runs the PermissionStatus
\n update steps:",
+ "html": "If this's relevant global object is a Window
object, then:",
"rationale": "let",
"steps": [
{
@@ -376,11 +376,11 @@
"html": "Let tasks be an empty list."
},
{
- "html": "To set a permission given a PermissionDescriptor
\n descriptor, a PermissionState
state, an\n optional origin, and an optional user agent:",
+ "html": "For each environment settings object target in targets:",
"rationale": "queue",
"steps": [
{
- "html": "To set a permission given a PermissionDescriptor
\n descriptor, a PermissionState
state, an\n optional origin, and an optional user agent:",
+ "html": "Queue a task task on the permissions task source of target's\n relevant settings object's global object's\n browsing context to perform the following step:",
"rationale": "interpret",
"steps": [
{
diff --git a/tr/algorithms/rdf-canon.json b/tr/algorithms/rdf-canon.json
index 51d924f680ad..93699ec3a37f 100644
--- a/tr/algorithms/rdf-canon.json
+++ b/tr/algorithms/rdf-canon.json
@@ -155,15 +155,15 @@
"html": "Get the list of quads quads\n from the map entry for\n reference blank node identifier in the\n blank node to quads map."
},
{
- "html": "This algorithm takes the canonicalization state and a\n reference blank node identifier as inputs.",
+ "html": "For each quad quad in quads:",
"rationale": "serialize",
"steps": [
{
- "html": "This algorithm takes the canonicalization state and a\n reference blank node identifier as inputs.",
+ "html": "Serialize the quad in canonical n-quads form with the\n following special rule:",
"rationale": "if",
"steps": [
{
- "html": "This algorithm takes the canonicalization state and a\n reference blank node identifier as inputs.",
+ "html": "If any component in quad is an\n blank node, then serialize it using a\n special identifier as follows:",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/service-workers.json b/tr/algorithms/service-workers.json
index cac8bbaa79d4..5fe86c2437ee 100644
--- a/tr/algorithms/service-workers.json
+++ b/tr/algorithms/service-workers.json
@@ -77,18 +77,18 @@
"html": "If the result of running the Should Skip Event algorithm with \"message\" and serviceWorker is true, then return.
" }, { - "html": "ThepostMessage(message, options)
method steps are:",
+ "html": "Run these substeps in parallel:",
"rationale": "if",
"steps": [
{
"html": "If the result of running the Run Service Worker algorithm with serviceWorker is failure, then return.
" }, { - "html": "ThepostMessage(message, options)
method steps are:",
+ "html": "Queue a task on the DOM manipulation task source to run the following steps:",
"rationale": "let",
"steps": [
{
- "html": "The postMessage(message, options)
method steps are:",
+ "html": "Let source be determined by switching on the type of incumbentGlobal:",
"rationale": ".switch",
"steps": [
{
@@ -120,7 +120,7 @@
"html": "Let deserializeRecord be StructuredDeserializeWithTransfer(serializeWithTransferResult, destination’s Realm).
\nIf this throws an exception, let e be the result of creating an event named messageerror
, using ExtendableMessageEvent
, with the origin
attribute initialized to origin and the source
attribute initialized to source.
postMessage(message, options)
method steps are:",
+ "html": "Else:",
"rationale": "let",
"steps": [
{
@@ -280,7 +280,7 @@
"html": "Let readyPromise be this's ready promise.
" }, { - "html": "ready
attribute must run these steps:",
+ "html": "If readyPromise is pending, run the following substeps in parallel:",
"rationale": "let",
"steps": [
{
@@ -359,7 +359,7 @@
"html": "Let promise be a new promise.
" }, { - "html": "getRegistration(clientURL)
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "let",
"steps": [
{
@@ -394,14 +394,14 @@
"html": "Let promise be a new promise.
" }, { - "html": "getRegistrations()
method steps are:",
+ "html": "Run the following steps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let registrations be a new list.
" }, { - "html": "getRegistrations()
method steps are:",
+ "html": "For each (storage key, scope) → registration of registration map:",
"rationale": "if",
"steps": [
{
@@ -410,14 +410,14 @@
]
},
{
- "html": "getRegistrations()
method steps are:",
+ "html": "Queue a task on promise’s relevant settings object's responsible event loop, using the DOM manipulation task source, to run the following steps:",
"rationale": "let",
"steps": [
{
"html": "Let registrationObjects be a new list.
" }, { - "html": "getRegistrations()
method steps are:",
+ "html": "For each registration of registrations:",
"rationale": "let",
"steps": [
{
@@ -569,7 +569,7 @@
"html": "Let promise be a new promise.
" }, { - "html": "TheskipWaiting()
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "set",
"steps": [
{
@@ -653,14 +653,14 @@
"html": "Let serializeWithTransferResult be StructuredSerializeWithTransfer(message, options[\"transfer
\"]). Rethrow any exceptions.
postMessage(message, options)
method steps are:",
+ "html": "Run the following steps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let targetClient be null.
" }, { - "html": "ThepostMessage(message, options)
method steps are:",
+ "html": "For each service worker client client:",
"rationale": "if",
"steps": [
{
@@ -675,7 +675,7 @@
"html": "Let destination be the ServiceWorkerContainer
object whose associated service worker client is targetClient.
postMessage(message, options)
method steps are:",
+ "html": "Add a task that runs the following steps to destination’s client message queue:",
"rationale": "let",
"steps": [
{
@@ -718,7 +718,7 @@
"html": "Let promise be a new promise.
" }, { - "html": "Thefocus()
method steps are:",
+ "html": "Queue a task to run the following steps on this's associated service worker client's responsible event loop using the user interaction task source:",
"rationale": "run",
"steps": [
{
@@ -737,7 +737,7 @@
"html": "Let ancestorOriginsList be this's browsing context's active document's relevant global object's Location
object’s ancestor origins list's associated list.
focus()
method steps are:",
+ "html": "Queue a task to run the following steps on serviceWorkerEventLoop using the DOM manipulation task source:",
"rationale": "let",
"steps": [
{
@@ -783,7 +783,7 @@
"html": "Let promise be a new promise.
" }, { - "html": "Thenavigate(url)
method steps are:",
+ "html": "Queue a task to run the following steps on this's associated service worker client's responsible event loop using the user interaction task source:",
"rationale": "let",
"steps": [
{
@@ -811,7 +811,7 @@
"html": "Let ancestorOriginsList be browsingContext’s active document's relevant global object's Location
object’s ancestor origins list's associated list.
navigate(url)
method steps are:",
+ "html": "Queue a task to run the following steps on serviceWorkerEventLoop using the DOM manipulation task source:",
"rationale": "if",
"steps": [
{
@@ -842,11 +842,11 @@
"html": "Let promise be a new promise.
" }, { - "html": "Theget(id)
method steps are:",
+ "html": "Run these substeps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "The get(id)
method steps are:",
+ "html": "For each service worker client client where the result of running obtain a storage key given client equals the associated service worker's containing service worker registration's storage key:",
"rationale": "if",
"steps": [
{
@@ -880,14 +880,14 @@
"html": "Let promise be a new promise.
" }, { - "html": "ThematchAll(options)
method steps are:",
+ "html": "Run the following steps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let targetClients be a new list.
" }, { - "html": "ThematchAll(options)
method steps are:",
+ "html": "For each service worker client client where the result of running obtain a storage key given client equals the associated service worker's containing service worker registration's storage key:",
"rationale": "if",
"steps": [
{
@@ -911,11 +911,11 @@
"html": "Let matchedClients be a new list.
" }, { - "html": "ThematchAll(options)
method steps are:",
+ "html": "For each service worker client client in targetClients:",
"rationale": "if",
"steps": [
{
- "html": "The matchAll(options)
method steps are:",
+ "html": "If options[\"type
\"] is \"window\"
or \"all\"
, and client is not an environment settings object or is a window client, then:",
"rationale": "let",
"steps": [
{
@@ -934,7 +934,7 @@
"html": "Else, set browsingContext to client’s target browsing context.
" }, { - "html": "ThematchAll(options)
method steps are:",
+ "html": "Queue a task task to run the following substeps on browsingContext’s event loop using the user interaction task source:",
"rationale": "if",
"steps": [
{
@@ -961,7 +961,7 @@
"html": "Wait for task to have executed.
" }, { - "html": "ThematchAll(options)
method steps are:",
+ "html": "If isClientEnumerable is true, then:",
"rationale": "add",
"steps": [
{
@@ -972,7 +972,7 @@
]
},
{
- "html": "The matchAll(options)
method steps are:",
+ "html": "Else if options[\"type
\"] is \"worker\"
or \"all\"
and client is a dedicated worker client, or options[\"type
\"] is \"sharedworker\"
or \"all\"
and client is a shared worker client, then:",
"rationale": "add",
"steps": [
{
@@ -983,14 +983,14 @@
]
},
{
- "html": "The matchAll(options)
method steps are:",
+ "html": "Queue a task to run the following steps on promise’s relevant settings object's responsible event loop using the DOM manipulation task source:",
"rationale": "let",
"steps": [
{
"html": "Let clientObjects be a new list.
" }, { - "html": "ThematchAll(options)
method steps are:",
+ "html": "For each windowData in matchedWindowData:",
"rationale": "let",
"steps": [
{
@@ -1002,7 +1002,7 @@
]
},
{
- "html": "The matchAll(options)
method steps are:",
+ "html": "For each client in matchedClients:",
"rationale": "let",
"steps": [
{
@@ -1053,14 +1053,14 @@
"html": "Let promise be a new promise.
" }, { - "html": "TheopenWindow(url)
method steps are:",
+ "html": "Run these substeps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let newContext be a new top-level browsing context.
" }, { - "html": "TheopenWindow(url)
method steps are:",
+ "html": "Queue a task to run the following steps on newContext’s Window
object’s environment settings object's responsible event loop using the user interaction task source:",
"rationale": "if",
"steps": [
{
@@ -1082,7 +1082,7 @@
"html": "Let ancestorOriginsList be newContext’s active document’s relevant global object’s Location
object’s ancestor origins list's associated list.
openWindow(url)
method steps are:",
+ "html": "Queue a task to run the following steps on serviceWorkerEventLoop using the DOM manipulation task source:",
"rationale": "if",
"steps": [
{
@@ -1118,11 +1118,11 @@
"html": "Let promise be a new promise.
" }, { - "html": "Theclaim()
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "The claim()
method steps are:",
+ "html": "For each service worker client client where the result of running obtain a storage key given client equals the service worker's containing service worker registration's storage key:",
"rationale": "if",
"steps": [
{
@@ -1141,7 +1141,7 @@
"html": "If registration is not the service worker's containing service worker registration, continue.
" }, { - "html": "Theclaim()
method steps are:",
+ "html": "If client’s active service worker is not the service worker, then:",
"rationale": "invoke",
"steps": [
{
@@ -1241,7 +1241,7 @@
"html": "Let targetRealm be event’s relevant Realm.
" }, { - "html": "respondWith(r)
method steps are:",
+ "html": "Upon rejection of r:",
"rationale": "set",
"steps": [
{
@@ -1253,14 +1253,14 @@
]
},
{
- "html": "respondWith(r)
method steps are:",
+ "html": "Upon fulfillment of r with response:",
"rationale": "if",
"steps": [
{
"html": "If response is not a Response
object, then set the respond-with error flag.
respondWith(r)
method steps are:",
+ "html": "Else:",
"rationale": "let",
"steps": [
{
@@ -1276,18 +1276,18 @@
"html": "Let potentialResponse be a copy of response’s associated response, except for its body.
" }, { - "html": "respondWith(r)
method steps are:",
+ "html": "If response’s body is non-null, run these substeps:",
"rationale": "let",
"steps": [
{
"html": "Let reader be the result of getting a reader from response’s body's stream.
" }, { - "html": "respondWith(r)
method steps are:",
+ "html": "Let pullAlgorithm be an action that runs these steps:",
"rationale": "let",
"steps": [
{
- "html": "respondWith(r)
method steps are:",
+ "html": "Let readRequest be a new read request with the following items:
\nrespondWith(r)
method steps are:",
+ "html": "",
"rationale": "set",
"steps": [
{
@@ -1311,7 +1311,7 @@
]
},
{
- "html": "respondWith(r)
method steps are:",
+ "html": "",
"rationale": "error",
"steps": [
{
@@ -1342,7 +1342,7 @@
"html": "Set potentialResponse’s body to a new body whose stream is newStream.
" }, { - "html": "respondWith(r)
method steps are:",
+ "html": "Run these subsubsteps repeatedly in parallel while done is false:",
"rationale": "if",
"steps": [
{
@@ -1352,7 +1352,7 @@
"html": "Otherwise, if bytes is empty and end-of-body is true, then close newStream and set done to true.
" }, { - "html": "respondWith(r)
method steps are:",
+ "html": "Otherwise, if bytes is not empty, run these subsubsubsteps:",
"rationale": "let",
"steps": [
{
@@ -1395,7 +1395,7 @@
"html": "Let promise be a new promise.
" }, { - "html": "Thematch(request, options)
method steps are:",
+ "html": "Run these substeps in parallel:",
"rationale": "let",
"steps": [
{
@@ -1405,7 +1405,7 @@
"html": "Wait until p settles.
" }, { - "html": "Thematch(request, options)
method steps are:",
+ "html": "If p rejects with an exception, then:",
"rationale": "reject",
"steps": [
{
@@ -1414,11 +1414,11 @@
]
},
{
- "html": "The match(request, options)
method steps are:",
+ "html": "Else if p resolves with an array, responses, then:",
"rationale": "if",
"steps": [
{
- "html": "The match(request, options)
method steps are:",
+ "html": "If responses is an empty array, then:",
"rationale": "resolve",
"steps": [
{
@@ -1427,7 +1427,7 @@
]
},
{
- "html": "The match(request, options)
method steps are:",
+ "html": "Else:",
"rationale": "resolve",
"steps": [
{
@@ -1454,11 +1454,11 @@
"html": "Let r be null.
" }, { - "html": "ThematchAll(request, options)
method steps are:",
+ "html": "If the optional argument request is not omitted, then:",
"rationale": "if",
"steps": [
{
- "html": "The matchAll(request, options)
method steps are:",
+ "html": "If request is a Request
object, then:",
"rationale": "set",
"steps": [
{
@@ -1470,7 +1470,7 @@
]
},
{
- "html": "The matchAll(request, options)
method steps are:",
+ "html": "Else if request is a string, then:",
"rationale": "set",
"steps": [
{
@@ -1487,18 +1487,18 @@
"html": "Let promise be a new promise.
" }, { - "html": "ThematchAll(request, options)
method steps are:",
+ "html": "Run these substeps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let responses be an empty list.
" }, { - "html": "ThematchAll(request, options)
method steps are:",
+ "html": "If the optional argument request is omitted, then:",
"rationale": "for",
"steps": [
{
- "html": "The matchAll(request, options)
method steps are:",
+ "html": "For each requestResponse of the relevant request response list:",
"rationale": "add",
"steps": [
{
@@ -1509,14 +1509,14 @@
]
},
{
- "html": "The matchAll(request, options)
method steps are:",
+ "html": "Else:",
"rationale": "let",
"steps": [
{
"html": "Let requestResponses be the result of running Query Cache with r and options.
" }, { - "html": "ThematchAll(request, options)
method steps are:",
+ "html": "For each requestResponse of requestResponses:",
"rationale": "add",
"steps": [
{
@@ -1527,7 +1527,7 @@
]
},
{
- "html": "The matchAll(request, options)
method steps are:",
+ "html": "For each response of responses:",
"rationale": "if",
"steps": [
{
@@ -1536,14 +1536,14 @@
]
},
{
- "html": "The matchAll(request, options)
method steps are:",
+ "html": "Queue a task, on promise’s relevant settings object's responsible event loop using the DOM manipulation task source, to perform the following steps:",
"rationale": "let",
"steps": [
{
"html": "Let responseList be a list.
" }, { - "html": "ThematchAll(request, options)
method steps are:",
+ "html": "For each response of responses:",
"rationale": "add",
"steps": [
{
@@ -1593,7 +1593,7 @@
"html": "Let requestList be an empty list.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "For each request whose type is Request
in requests:",
"rationale": "let",
"steps": [
{
@@ -1605,14 +1605,14 @@
]
},
{
- "html": "The addAll(requests)
method steps are:",
+ "html": "For each request in requests:",
"rationale": "let",
"steps": [
{
"html": "Let r be the associated request of the result of invoking the initial value of Request
as constructor with request as its argument. If this throws an exception, return a promise rejected with that exception.
addAll(requests)
method steps are:",
+ "html": "If r’s url's scheme is not one of \"http
\" and \"https
\", then:",
"rationale": "terminate",
"steps": [
{
@@ -1636,25 +1636,25 @@
"html": "Let responsePromise be a new promise.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "To process response for response, run these substeps:",
"rationale": "if",
"steps": [
{
"html": "If response’s type is \"error
\", or response’s status is not an ok status or is 206
, reject responsePromise with a TypeError
.
addAll(requests)
method steps are:",
+ "html": "Else if response’s header list contains a header named `Vary
`, then:",
"rationale": "let",
"steps": [
{
"html": "Let fieldValues be the list containing the elements corresponding to the field-values of the Vary header.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "For each fieldValue of fieldValues:",
"rationale": "if",
"steps": [
{
- "html": "The addAll(requests)
method steps are:",
+ "html": "If fieldValue matches \"*
\", then:",
"rationale": "reject",
"steps": [
{
@@ -1675,7 +1675,7 @@
],
"additional": [
{
- "html": "The addAll(requests)
method steps are:",
+ "html": "To process response end-of-body for response, run these substeps:",
"rationale": "if",
"steps": [
{
@@ -1697,7 +1697,7 @@
"html": "Let p be the result of getting a promise to wait for all of responsePromises.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "Return the result of reacting to p with a fulfillment handler that, when called with argument responses, performs the following substeps:",
"rationale": "let",
"steps": [
{
@@ -1707,7 +1707,7 @@
"html": "Let index be zero.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "For each response in responses:",
"rationale": "let",
"steps": [
{
@@ -1737,7 +1737,7 @@
"html": "Let cacheJobPromise be a new promise.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "let",
"steps": [
{
@@ -1747,7 +1747,7 @@
"html": "Invoke Batch Cache Operations with operations. If this throws an exception, set errorData to the exception.
" }, { - "html": "TheaddAll(requests)
method steps are:",
+ "html": "Queue a task, on cacheJobPromise’s relevant settings object's responsible event loop using the DOM manipulation task source, to perform the following substeps:",
"rationale": "if",
"steps": [
{
@@ -1780,7 +1780,7 @@
"html": "If request is a Request
object, then set innerRequest to request’s request.
put(request, response)
method steps are:",
+ "html": "Else:",
"rationale": "let",
"steps": [
{
@@ -1801,14 +1801,14 @@
"html": "If innerResponse’s status is 206
, return a promise rejected with a TypeError
.
put(request, response)
method steps are:",
+ "html": "If innerResponse’s header list contains a header named `Vary
`, then:",
"rationale": "let",
"steps": [
{
"html": "Let fieldValues be the list containing the items corresponding to the Vary header’s field-values.
" }, { - "html": "Theput(request, response)
method steps are:",
+ "html": "For each fieldValue in fieldValues:",
"rationale": "if",
"steps": [
{
@@ -1828,7 +1828,7 @@
"html": "Let bodyReadPromise be a promise resolved with undefined.
" }, { - "html": "Theput(request, response)
method steps are:",
+ "html": "If innerResponse’s body is non-null, run these substeps:",
"rationale": "let",
"steps": [
{
@@ -1864,14 +1864,14 @@
"html": "Let realm be this's relevant realm.
" }, { - "html": "Theput(request, response)
method steps are:",
+ "html": "Return the result of the fulfillment of bodyReadPromise:",
"rationale": "let",
"steps": [
{
"html": "Let cacheJobPromise be a new promise.
" }, { - "html": "Theput(request, response)
method steps are:",
+ "html": "Return cacheJobPromise and run these steps in parallel:",
"rationale": "let",
"steps": [
{
@@ -1881,7 +1881,7 @@
"html": "Invoke Batch Cache Operations with operations. If this throws an exception, set errorData to the exception.
" }, { - "html": "Theput(request, response)
method steps are:",
+ "html": "Queue a task, on cacheJobPromise’s relevant settings object's responsible event loop using the DOM manipulation task source, to perform the following substeps:",
"rationale": "if",
"steps": [
{
@@ -1908,7 +1908,7 @@
"html": "Let r be null.
" }, { - "html": "Thedelete(request, options)
method steps are:",
+ "html": "If request is a Request
object, then:",
"rationale": "set",
"steps": [
{
@@ -1920,7 +1920,7 @@
]
},
{
- "html": "The delete(request, options)
method steps are:",
+ "html": "Else if request is a string, then:",
"rationale": "set",
"steps": [
{
@@ -1953,7 +1953,7 @@
"html": "Let cacheJobPromise be a new promise.
" }, { - "html": "Thedelete(request, options)
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "let",
"steps": [
{
@@ -1963,11 +1963,11 @@
"html": "Let requestResponses be the result of running Batch Cache Operations with operations. If this throws an exception, set errorData to the exception.
" }, { - "html": "Thedelete(request, options)
method steps are:",
+ "html": "Queue a task, on cacheJobPromise’s relevant settings object's responsible event loop using the DOM manipulation task source, to perform the following substeps:",
"rationale": "if",
"steps": [
{
- "html": "The delete(request, options)
method steps are:",
+ "html": "If errorData is null, then:",
"rationale": "if",
"steps": [
{
@@ -2000,11 +2000,11 @@
"html": "Let r be null.
" }, { - "html": "Thekeys(request, options)
method steps are:",
+ "html": "If the optional argument request is not omitted, then:",
"rationale": "if",
"steps": [
{
- "html": "The keys(request, options)
method steps are:",
+ "html": "If request is a Request
object, then:",
"rationale": "set",
"steps": [
{
@@ -2016,7 +2016,7 @@
]
},
{
- "html": "The keys(request, options)
method steps are:",
+ "html": "Else if request is a string, then:",
"rationale": "set",
"steps": [
{
@@ -2033,18 +2033,18 @@
"html": "Let promise be a new promise.
" }, { - "html": "Thekeys(request, options)
method steps are:",
+ "html": "Run these substeps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let requests be an empty list.
" }, { - "html": "Thekeys(request, options)
method steps are:",
+ "html": "If the optional argument request is omitted, then:",
"rationale": "for",
"steps": [
{
- "html": "The keys(request, options)
method steps are:",
+ "html": "For each requestResponse of the relevant request response list:",
"rationale": "add",
"steps": [
{
@@ -2055,14 +2055,14 @@
]
},
{
- "html": "The keys(request, options)
method steps are:",
+ "html": "Else:",
"rationale": "let",
"steps": [
{
"html": "Let requestResponses be the result of running Query Cache with r and options.
" }, { - "html": "Thekeys(request, options)
method steps are:",
+ "html": "For each requestResponse of requestResponses:",
"rationale": "add",
"steps": [
{
@@ -2073,14 +2073,14 @@
]
},
{
- "html": "The keys(request, options)
method steps are:",
+ "html": "Queue a task, on promise’s relevant settings object's responsible event loop using the DOM manipulation task source, to perform the following steps:",
"rationale": "let",
"steps": [
{
"html": "Let requestList be a list.
" }, { - "html": "Thekeys(request, options)
method steps are:",
+ "html": "For each request of requests:",
"rationale": "add",
"steps": [
{
@@ -2107,19 +2107,19 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The match(request, options)
method steps are:",
+ "html": "If options[\"cacheName
\"] exists, then:",
"rationale": "return",
"steps": [
{
- "html": "The match(request, options)
method steps are:",
+ "html": "Return a new promise promise and run the following substeps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "The match(request, options)
method steps are:",
+ "html": "For each cacheName → cache of the relevant name to cache map:",
"rationale": "if",
"steps": [
{
- "html": "The match(request, options)
method steps are:",
+ "html": "If options[\"cacheName
\"] matches cacheName, then:",
"rationale": "resolve",
"steps": [
{
@@ -2140,18 +2140,18 @@
]
},
{
- "html": "The match(request, options)
method steps are:",
+ "html": "Else:",
"rationale": "let",
"steps": [
{
"html": "Let promise be a promise resolved with undefined.
" }, { - "html": "Thematch(request, options)
method steps are:",
+ "html": "For each cacheName → cache of the relevant name to cache map:",
"rationale": "set",
"steps": [
{
- "html": "The match(request, options)
method steps are:",
+ "html": "Set promise to the result of reacting to itself with a fulfillment handler that, when called with argument response, performs the following substeps:",
"rationale": "if",
"steps": [
{
@@ -2181,11 +2181,11 @@
"html": "Let promise be a new promise.
" }, { - "html": "Thehas(cacheName)
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "The has(cacheName)
method steps are:",
+ "html": "For each key → value of the relevant name to cache map:",
"rationale": "if",
"steps": [
{
@@ -2213,15 +2213,15 @@
"html": "Let promise be a new promise.
" }, { - "html": "Theopen(cacheName)
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "for",
"steps": [
{
- "html": "The open(cacheName)
method steps are:",
+ "html": "For each key → value of the relevant name to cache map:",
"rationale": "if",
"steps": [
{
- "html": "The open(cacheName)
method steps are:",
+ "html": "If cacheName matches key, then:",
"rationale": "resolve",
"steps": [
{
@@ -2260,11 +2260,11 @@
"html": "Let promise be the result of running the algorithm specified in has(cacheName)
method with cacheName.
delete(cacheName)
method steps are:",
+ "html": "Return the result of reacting to promise with a fulfillment handler that, when called with argument cacheExists, performs the following substeps:",
"rationale": "if",
"steps": [
{
- "html": "The delete(cacheName)
method steps are:",
+ "html": "If cacheExists is false, then:",
"rationale": "return",
"steps": [
{
@@ -2276,7 +2276,7 @@
"html": "Let cacheJobPromise be a new promise.
" }, { - "html": "Thedelete(cacheName)
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "remove",
"steps": [
{
@@ -2304,7 +2304,7 @@
"html": "Let promise be a new promise.
" }, { - "html": "Thekeys()
method steps are:",
+ "html": "Run the following substeps in parallel:",
"rationale": "let",
"steps": [
{
diff --git a/tr/algorithms/uievents-key.json b/tr/algorithms/uievents-key.json
index 2e64ad7b6714..dd004ba1cfb2 100644
--- a/tr/algorithms/uievents-key.json
+++ b/tr/algorithms/uievents-key.json
@@ -14,7 +14,7 @@
"html": "Let key be a DOMString initially set to \"Unidentified\"
.
KeyboardEvent
's key
attribute, run these steps:",
+ "html": "If there exists an appropriate named key attribute value for this\nkey event, then",
"rationale": "set",
"steps": [
{
@@ -23,7 +23,7 @@
]
},
{
- "html": "KeyboardEvent
's key
attribute, run these steps:",
+ "html": "Else, if the key event generates a valid key string, then",
"rationale": "set",
"steps": [
{
@@ -32,7 +32,7 @@
]
},
{
- "html": "KeyboardEvent
's key
attribute, run these steps:",
+ "html": "Else, if the key event has any modifier keys other than glyph modifier keys, then",
"rationale": "set",
"steps": [
{
diff --git a/tr/algorithms/uievents.json b/tr/algorithms/uievents.json
index 427e8b64d7c9..8257db036281 100644
--- a/tr/algorithms/uievents.json
+++ b/tr/algorithms/uievents.json
@@ -11,7 +11,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "event, the UIEvent
to initialize
eventType, a DOMString containing the event type
\neventTarget, the EventTarget
of the event
bubbles, true if this event bubbles
\ncancelable, true if this event is cancelable
\nNone
\nEvent
attributes:",
"rationale": "initialize",
"steps": [
{
@@ -23,7 +23,7 @@
]
},
{
- "html": "event, the UIEvent
to initialize
eventType, a DOMString containing the event type
\neventTarget, the EventTarget
of the event
bubbles, true if this event bubbles
\ncancelable, true if this event is cancelable
\nNone
\nevent, the UIEvent
to initialize
eventType, a DOMString containing the event type
\neventTarget, the EventTarget
of the event
bubbles, true if this event bubbles
\ncancelable, true if this event is cancelable
\nNone
\nInitialize a UIEvent with event, eventType, eventTarget, bubbles and cancelable.
" }, { - "html": "event, the MouseEvent
to initialize
eventType, a DOMString containing the event type
\neventTarget, the EventTarget
of the event
bubbles, true if this event bubbles
\ncancelable, true if this event is cancelable
\nNone
\nevent, the MouseEvent
to initialize
native, the native mouse event
\nNone
\ntype
is one of [ mousedown, mouseup ], then",
"rationale": "let",
"steps": [
{
@@ -220,7 +220,7 @@
"html": "Let mbutton be an ID from native that identifies which mouse button was pressed
" }, { - "html": "native, the native mousedown
\nNone
\nLet result = dispatch event at target
" }, { - "html": "native, the native mousedown
\nNone
\nLet mbutton be an ID from native that identifies which mouse button was pressed
" }, { - "html": "native, the native mouseup
\nNone
\nLet mbutton = 1 (primary mouse button by default)
" }, { - "html": "native, the native mousedown
\ntarget, the EventTarget
of the event
None
\nLet event = create a PointerEvent with eventType and target
" }, { - "html": "native, the native mousedown
\ntarget, the EventTarget
of the event
None
\nLet targetDomPath = calculate DOM path
" }, { - "html": "native, the native mouse move
\nNone
\nnative, the native mouse move
\nNone
\nnative, the native mouse move
\nNone
\nLet leaveElements be a copy of last mouse DOM path with all\nelements common to targetDomPath removed.
" }, { - "html": "native, the native mouse move
\nNone
\nnative, the native mouse move
\nNone
\nnative, the native mouse move
\nNone
\nnative, the native mouse move
\nNone
\nLet enterElements be a copy of targetDomPath with all\nelements common to last mouse DOM path removed.
" }, { - "html": "native, the native mouse move
\nNone
\nnative, the native mouse move
\nNone
\nLet menuevent = create a PointerEvent with \"contextmenu\", target
" }, { - "html": "native, the native mousedown or pointer event
\ntarget, the EventTarget
of the event
None
\n \nIf event.type
is not \"mousemove\", then exit
event, a MouseEvent
None
\nevent, a MouseEvent
None
\nLet promise be a new promise.
" }, { - "html": "To asynchronously compile a WebAssembly module from source bytes bytes, using optional task source taskSource, perform the following steps:", + "html": "Run the following steps in parallel:", "rationale": "queue", "steps": [ { "html": "Compile the WebAssembly module bytes and store the result as module.
" }, { - "html": "To asynchronously compile a WebAssembly module from source bytes bytes, using optional task source taskSource, perform the following steps:", + "html": "Queue a task to perform the following steps. If taskSource was provided, queue the task on that task source.", "rationale": "if", "steps": [ { "html": "If module is error, reject promise with a CompileError
exception.
Let imports be « ».
" }, { - "html": "To read the imports from a WebAssembly module module from imports object importObject, perform the following steps:", + "html": "For each (moduleName, componentName, externtype) of module_imports(module),", "rationale": "let", "steps": [ { @@ -145,14 +145,14 @@ "html": "Let v be ? Get(o, componentName).
" }, { - "html": "To read the imports from a WebAssembly module module from imports object importObject, perform the following steps:", + "html": "If externtype is of the form func functype,", "rationale": "if", "steps": [ { "html": "If IsCallable(v) is false, throw a LinkError
exception.
Global
,",
"rationale": "let",
"steps": [
{
@@ -239,7 +239,7 @@
]
},
{
- "html": "To read the imports from a WebAssembly module module from imports object importObject, perform the following steps:",
+ "html": "Otherwise,",
"rationale": "throw",
"steps": [
{
@@ -256,7 +256,7 @@
]
},
{
- "html": "To read the imports from a WebAssembly module module from imports object importObject, perform the following steps:",
+ "html": "If externtype is of the form mem memtype,",
"rationale": "if",
"steps": [
{
@@ -271,7 +271,7 @@
]
},
{
- "html": "To read the imports from a WebAssembly module module from imports object importObject, perform the following steps:",
+ "html": "If externtype is of the form table tabletype,",
"rationale": "if",
"steps": [
{
@@ -305,7 +305,7 @@
"html": "Let exportsObject be ! OrdinaryObjectCreate(null).
" }, { - "html": "To create an exports object from a WebAssembly module module and instance instance, perform the following steps:", + "html": "For each (name, externtype) of module_exports(module),", "rationale": "let", "steps": [ { @@ -315,7 +315,7 @@ "html": "Assert: externval is not error.
" }, { - "html": "To create an exports object from a WebAssembly module module and instance instance, perform the following steps:", + "html": "If externtype is of the form func functype,", "rationale": "assert", "steps": [ { @@ -333,7 +333,7 @@ ] }, { - "html": "To create an exports object from a WebAssembly module module and instance instance, perform the following steps:", + "html": "If externtype is of the form global mut globaltype,", "rationale": "assert", "steps": [ { @@ -351,7 +351,7 @@ ] }, { - "html": "To create an exports object from a WebAssembly module module and instance instance, perform the following steps:", + "html": "If externtype is of the form mem memtype,", "rationale": "assert", "steps": [ { @@ -369,7 +369,7 @@ ] }, { - "html": "To create an exports object from a WebAssembly module module and instance instance, perform the following steps:", + "html": "If externtype is of the form table tabletype,", "rationale": "assert", "steps": [ { @@ -461,11 +461,11 @@ "html": "Read the imports of module with imports importObject, and let imports be the result.\nIf this operation throws an exception, catch it, reject promise with the exception, and return promise.
" }, { - "html": "To asynchronously instantiate a WebAssembly module from aModule
moduleObject and imports importObject, perform the following steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "queue",
"steps": [
{
- "html": "To asynchronously instantiate a WebAssembly module from a Module
moduleObject and imports importObject, perform the following steps:",
+ "html": "Queue a task to perform the following steps:\nNote: Implementation-specific work may be performed here.",
"rationale": "reject",
"steps": [
{
@@ -499,14 +499,14 @@
"html": "Let promise be a new promise.
" }, { - "html": "To instantiate a promise of a module promiseOfModule with imports importObject, perform the following steps:", + "html": "Upon fulfillment of promiseOfModule with value module:", "rationale": "resolve", "steps": [ { "html": "Instantiate the WebAssembly module module importing importObject, and let innerPromise be the result.
" }, { - "html": "To instantiate a promise of a module promiseOfModule with imports importObject, perform the following steps:", + "html": "Upon fulfillment of innerPromise with value instance.", "rationale": "let", "steps": [ { @@ -518,7 +518,7 @@ ] }, { - "html": "To instantiate a promise of a module promiseOfModule with imports importObject, perform the following steps:", + "html": "Upon rejection of innerPromise with reason reason:", "rationale": "reject", "steps": [ { @@ -529,7 +529,7 @@ ] }, { - "html": "To instantiate a promise of a module promiseOfModule with imports importObject, perform the following steps:", + "html": "Upon rejection of promiseOfModule with reason reason:", "rationale": "reject", "steps": [ { @@ -583,7 +583,7 @@ "html": "Let exports be « ».
" }, { - "html": "Theexports(moduleObject)
method, when invoked, performs the following steps:",
+ "html": "For each (name, type) of module_exports(module),",
"rationale": "let",
"steps": [
{
@@ -615,7 +615,7 @@
"html": "Let imports be « ».
" }, { - "html": "Theimports(moduleObject)
method, when invoked, performs the following steps:",
+ "html": "For each (moduleName, name, type) of module_imports(module),",
"rationale": "let",
"steps": [
{
@@ -647,7 +647,7 @@
"html": "Let customSections be « ».
" }, { - "html": "ThecustomSections(moduleObject, sectionName)
method, when invoked, performs the following steps:",
+ "html": "For each custom section customSection of bytes, interpreted according to the module grammar,",
"rationale": "let",
"steps": [
{
@@ -657,7 +657,7 @@
"html": "Assert: name is not failure (moduleObject.[[Module]] is valid).
" }, { - "html": "ThecustomSections(moduleObject, sectionName)
method, when invoked, performs the following steps:",
+ "html": "If name equals sectionName as string values,",
"rationale": "append",
"steps": [
{
@@ -754,7 +754,7 @@
"html": "Let length be the length of block.
" }, { - "html": "To create a resizable memory buffer from a memory address memaddr and a maxsize, perform the following steps:", + "html": "If maxsize > (65536 × 65536),", "rationale": "throw", "steps": [ { @@ -818,7 +818,7 @@ "html": "Let map be the surrounding agent's associated Memory object cache.
" }, { - "html": "To create a memory object from a memory address memaddr, perform the following steps:", + "html": "If map[memaddr] exists,", "rationale": "return", "steps": [ { @@ -888,7 +888,7 @@ "html": "Let buffer be memory.[[BufferObject]].
" }, { - "html": "To refresh the Memory buffer of memaddr, perform the following steps:", + "html": "If IsFixedLengthArrayBuffer(buffer) is true,", "rationale": "perform", "steps": [ { @@ -903,7 +903,7 @@ ] }, { - "html": "To refresh the Memory buffer of memaddr, perform the following steps:", + "html": "Otherwise,", "rationale": "let", "steps": [ { @@ -1038,7 +1038,7 @@ "html": "Let memtype be mem_type(store, memaddr).
" }, { - "html": "ThetoResizableBuffer()
method, when invoked, performs the following steps:",
+ "html": "If memtype has a max,",
"rationale": "let",
"steps": [
{
@@ -1047,7 +1047,7 @@
]
},
{
- "html": "The toResizableBuffer()
method, when invoked, performs the following steps:",
+ "html": "Otherwise,",
"rationale": "let",
"steps": [
{
@@ -1076,7 +1076,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The abstract operation HostResizeArrayBuffer takes arguments buffer (an ArrayBuffer
) and newLength. It performs the following steps when called.",
+ "html": "If buffer.[[ArrayBufferDetachKey]] is \"WebAssembly.Memory\",",
"rationale": "let",
"steps": [
{
@@ -1086,11 +1086,11 @@
"html": "Assert: buffer is the [[BufferObject]] of exactly one value in map.
" }, { - "html": "The abstract operation HostResizeArrayBuffer takes arguments buffer (anArrayBuffer
) and newLength. It performs the following steps when called.",
+ "html": "For each memaddr → mem in map,",
"rationale": "if",
"steps": [
{
- "html": "The abstract operation HostResizeArrayBuffer takes arguments buffer (an ArrayBuffer
) and newLength. It performs the following steps when called.",
+ "html": "If SameValue(mem.[[BufferObject]], buffer) is true,",
"rationale": "assert",
"steps": [
{
@@ -1100,7 +1100,7 @@
"html": "Let lengthDelta be newLength - buffer.[[ArrayBufferByteLength]].
" }, { - "html": "The abstract operation HostResizeArrayBuffer takes arguments buffer (anArrayBuffer
) and newLength. It performs the following steps when called.",
+ "html": "If lengthDelta < 0 or lengthDelta modulo 65536 is not 0,",
"rationale": "throw",
"steps": [
{
@@ -1158,7 +1158,7 @@
"html": "Let map be the surrounding agent's associated Table object cache.
" }, { - "html": "To create a table object from a table address tableaddr, perform the following steps:", + "html": "If map[tableaddr] exists,", "rationale": "return", "steps": [ { @@ -1187,7 +1187,7 @@ "html": "Let elementType be ToValueType(descriptor[\"element\"]).
" }, { - "html": "TheTable(descriptor, value)
constructor, when invoked, performs the following steps:",
+ "html": "If elementType is not a reftype,",
"rationale": "throw",
"steps": [
{
@@ -1205,7 +1205,7 @@
"html": "If maximum is not empty and maximum < initial, throw a RangeError
exception.
Table(descriptor, value)
constructor, when invoked, performs the following steps:",
+ "html": "If value is missing,",
"rationale": "let",
"steps": [
{
@@ -1214,7 +1214,7 @@
]
},
{
- "html": "The Table(descriptor, value)
constructor, when invoked, performs the following steps:",
+ "html": "Otherwise,",
"rationale": "let",
"steps": [
{
@@ -1258,7 +1258,7 @@
"html": "Let (limits, elementType) be table_type(tableaddr).
" }, { - "html": "Thegrow(delta, value)
method, when invoked, performs the following steps:",
+ "html": "If value is missing,",
"rationale": "let",
"steps": [
{
@@ -1267,7 +1267,7 @@
]
},
{
- "html": "The grow(delta, value)
method, when invoked, performs the following steps:",
+ "html": "Otherwise,",
"rationale": "let",
"steps": [
{
@@ -1342,7 +1342,7 @@
"html": "Let (limits, elementType) be table_type(tableaddr).
" }, { - "html": "Theset(index, value)
method, when invoked, performs the following steps:",
+ "html": "If value is missing,",
"rationale": "let",
"steps": [
{
@@ -1351,7 +1351,7 @@
]
},
{
- "html": "The set(index, value)
method, when invoked, performs the following steps:",
+ "html": "Otherwise,",
"rationale": "let",
"steps": [
{
@@ -1403,7 +1403,7 @@
"html": "Let map be the surrounding agent's associated Global object cache.
" }, { - "html": "To create a global object from a global address globaladdr, perform the following steps:", + "html": "If map[globaladdr] exists,", "rationale": "return", "steps": [ { @@ -1496,7 +1496,7 @@ "html": "Let valuetype be ToValueType(descriptor[\"value\"]).
" }, { - "html": "TheGlobal(descriptor, v)
constructor, when invoked, performs the following steps:",
+ "html": "If valuetype is v128,",
"rationale": "throw",
"steps": [
{
@@ -1505,7 +1505,7 @@
]
},
{
- "html": "The Global(descriptor, v)
constructor, when invoked, performs the following steps:",
+ "html": "If v is missing,",
"rationale": "let",
"steps": [
{
@@ -1514,7 +1514,7 @@
]
},
{
- "html": "The Global(descriptor, v)
constructor, when invoked, performs the following steps:",
+ "html": "Otherwise,",
"rationale": "let",
"steps": [
{
@@ -1635,7 +1635,7 @@
"html": "Let funcinst be store.funcs[funcaddr].
" }, { - "html": "The name of the WebAssembly function funcaddr is found by performing the following steps:", + "html": "If funcinst is of the form {type functype, hostcode hostfunc},", "rationale": "assert", "steps": [ { @@ -1647,7 +1647,7 @@ ] }, { - "html": "The name of the WebAssembly function funcaddr is found by performing the following steps:", + "html": "Otherwise,", "rationale": "let", "steps": [ { @@ -1676,7 +1676,7 @@ "html": "Let map be the surrounding agent's associated Exported Function cache.
" }, { - "html": "To create a new Exported Function from a WebAssembly function address funcaddr, perform the following steps:", + "html": "If map[funcaddr] exists,", "rationale": "return", "steps": [ { @@ -1744,7 +1744,7 @@ "html": "Let i be 0.
" }, { - "html": "To call an Exported Function with function address funcaddr and a list of JavaScript arguments argValues, perform the following steps:", + "html": "For each t of parameters,", "rationale": "if", "steps": [ { @@ -1780,14 +1780,14 @@ "html": "Otherwise, if outArity is 1, return ToJSValue(ret[0]).
" }, { - "html": "To call an Exported Function with function address funcaddr and a list of JavaScript arguments argValues, perform the following steps:", + "html": "Otherwise,", "rationale": "let", "steps": [ { "html": "Let values be « ».
" }, { - "html": "To call an Exported Function with function address funcaddr and a list of JavaScript arguments argValues, perform the following steps:", + "html": "For each r of ret,", "rationale": "append", "steps": [ { @@ -1818,7 +1818,7 @@ "html": "Let jsArguments be « ».
" }, { - "html": "To run a host function from the JavaScript object func, type functype, and list of WebAssembly values arguments, perform the following steps:", + "html": "For each arg of arguments,", "rationale": "append", "steps": [ { @@ -1839,7 +1839,7 @@ "html": "Otherwise, if resultsSize is 1, return « ? ToWebAssemblyValue(ret, results[0]) ».
" }, { - "html": "To run a host function from the JavaScript object func, type functype, and list of WebAssembly values arguments, perform the following steps:", + "html": "Otherwise,", "rationale": "let", "steps": [ { @@ -1858,7 +1858,7 @@ "html": "If values’s size is not resultsSize, throw a TypeError
exception.
Let stored settings be the incumbent settings object.
" }, { - "html": "To create a host function from the JavaScript object func and type functype, perform the following steps:", + "html": "Let hostfunc be a host function which performs the following steps when called with arguments arguments:", "rationale": "let", "steps": [ { @@ -1945,7 +1945,7 @@ "html": "Assert: w is not of the form v128.const v128.
" }, { - "html": "The algorithm ToJSValue(w) coerces a WebAssembly value to a JavaScript value by performing the following steps:", + "html": "If w is of the form i64.const i64,", "rationale": "let", "steps": [ { @@ -1960,7 +1960,7 @@ "html": "If w is of the form i32.const i32, return 𝔽(signed_32(i32 interpreted as a mathematical value)).
" }, { - "html": "The algorithm ToJSValue(w) coerces a WebAssembly value to a JavaScript value by performing the following steps:", + "html": "If w is of the form f32.const f32,", "rationale": "if", "steps": [ { @@ -1975,7 +1975,7 @@ ] }, { - "html": "The algorithm ToJSValue(w) coerces a WebAssembly value to a JavaScript value by performing the following steps:", + "html": "If w is of the form f64.const f64,", "rationale": "if", "steps": [ { @@ -2027,7 +2027,7 @@ "html": "Assert: type is not v128.
" }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If type is i64,", "rationale": "let", "steps": [ { @@ -2039,7 +2039,7 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If type is i32,", "rationale": "let", "steps": [ { @@ -2051,14 +2051,14 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If type is f32,", "rationale": "let", "steps": [ { "html": "" }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If number is NaN,", "rationale": "let", "steps": [ { @@ -2070,7 +2070,7 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "Otherwise,", "rationale": "let", "steps": [ { @@ -2084,14 +2084,14 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If type is f64,", "rationale": "let", "steps": [ { "html": "" }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If number is NaN,", "rationale": "let", "steps": [ { @@ -2103,7 +2103,7 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "Otherwise,", "rationale": "let", "steps": [ { @@ -2117,11 +2117,11 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If type is funcref,", "rationale": "if", "steps": [ { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If v is null,", "rationale": "return", "steps": [ { @@ -2130,7 +2130,7 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If v is an Exported Function,", "rationale": "let", "steps": [ { @@ -2147,11 +2147,11 @@ ] }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If type is externref,", "rationale": "if", "steps": [ { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If v is null,", "rationale": "return", "steps": [ { @@ -2163,7 +2163,7 @@ "html": "Let map be the surrounding agent's associated extern value cache.
" }, { - "html": "The algorithm ToWebAssemblyValue(v, type) coerces a JavaScript value to a WebAssembly value by performing the following steps:", + "html": "If a extern address externaddr exists such that map[externaddr] is the same as v,", "rationale": "return", "steps": [ { diff --git a/tr/algorithms/wasm-web-api-2.json b/tr/algorithms/wasm-web-api-2.json index 6d6d343a3065..d5bac7cf931a 100644 --- a/tr/algorithms/wasm-web-api-2.json +++ b/tr/algorithms/wasm-web-api-2.json @@ -28,7 +28,7 @@ "html": "Let returnValue be a new promise
" }, { - "html": "To compile a potential WebAssembly response with a promise of aResponse
source, perform the following steps:",
+ "html": "Upon fulfillment of source with value unwrappedSource:",
"rationale": "let",
"steps": [
{
@@ -56,7 +56,7 @@
"html": "Consume response’s body as an ArrayBuffer
, and let bodyPromise be the result.
Response
source, perform the following steps:",
+ "html": "Upon fulfillment of bodyPromise with value bodyArrayBuffer:",
"rationale": "let",
"steps": [
{
@@ -68,7 +68,7 @@
]
},
{
- "html": "To compile a potential WebAssembly response with a promise of a Response
source, perform the following steps:",
+ "html": "Upon rejection of bodyPromise with reason reason:",
"rationale": "reject",
"steps": [
{
@@ -79,7 +79,7 @@
]
},
{
- "html": "To compile a potential WebAssembly response with a promise of a Response
source, perform the following steps:",
+ "html": "Upon rejection of source with reason reason:",
"rationale": "reject",
"steps": [
{
diff --git a/tr/algorithms/web-animations-1.json b/tr/algorithms/web-animations-1.json
index bb2e6ca19945..c66ad2c4c73f 100644
--- a/tr/algorithms/web-animations-1.json
+++ b/tr/algorithms/web-animations-1.json
@@ -266,7 +266,7 @@
"html": "If has pending ready promise is false,\nlet animation’s current ready promise be a new promise in the relevant Realm of animation.
" }, { - "html": "Schedule a task to run as soon as animation is ready.\nThe task shall perform the following steps:", + "html": "So long as the above task is scheduled but has yet to run, animation is described as having a pending play task.\nWhile the task is running, however, animation does not have\na pending play task.", "rationale": "assert", "steps": [ { @@ -363,7 +363,7 @@ "html": "If has pending ready promise is false,\nset animation’s current ready promise to a new promise in the relevant Realm of animation.
" }, { - "html": "The task shall perform the following steps:", + "html": "So long as the above task is scheduled but has yet to run, animation is described as having a pending pause task.\nWhile the task is running, however, animation does not have a pending pause task.", "rationale": "let", "steps": [ { diff --git a/tr/algorithms/web-animations-2.json b/tr/algorithms/web-animations-2.json index 5cee1a888b0b..ee3e95b49c09 100644 --- a/tr/algorithms/web-animations-2.json +++ b/tr/algorithms/web-animations-2.json @@ -486,7 +486,7 @@ "html": "If has pending ready promise is false,\nlet animation’s current ready promise be a new promise in the relevant Realm of animation.
" }, { - "html": "Schedule a task to run as soon as animation is ready.\nThe task shall perform the following steps:", + "html": "So long as the above task is scheduled but has yet to run, animation is described as having a pending play task.\nWhile the task is running, however, animation does not have\na pending play task.", "rationale": "assert", "steps": [ { diff --git a/tr/algorithms/web-locks.json b/tr/algorithms/web-locks.json index 32aab8b1d763..cbb086430863 100644 --- a/tr/algorithms/web-locks.json +++ b/tr/algorithms/web-locks.json @@ -93,7 +93,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To terminate remaining locks and requests with agent, enqueue the following steps on the lock task queue:", + "html": "For each lock request request with agent equal to agent:", "rationale": "abort", "steps": [ { @@ -102,7 +102,7 @@ ] }, { - "html": "To terminate remaining locks and requests with agent, enqueue the following steps on the lock task queue:", + "html": "For each lock lock with agent equal to agent:", "rationale": "release", "steps": [ { @@ -195,7 +195,7 @@ "html": "If signal is present, then add the algorithm signal to abort the request request with signal to signal.
" }, { - "html": "To request a lock with promise, agent, clientId, manager, callback, name, mode, ifAvailable, steal, and signal:", + "html": "Enqueue the following steps to the lock task queue:", "rationale": "let", "steps": [ { @@ -208,15 +208,15 @@ "html": "Let held be manager’s held lock set.
" }, { - "html": "To request a lock with promise, agent, clientId, manager, callback, name, mode, ifAvailable, steal, and signal:", + "html": "If steal is true, then run these steps:", "rationale": "for", "steps": [ { - "html": "To request a lock with promise, agent, clientId, manager, callback, name, mode, ifAvailable, steal, and signal:", + "html": "For each lock of held:", "rationale": "if", "steps": [ { - "html": "To request a lock with promise, agent, clientId, manager, callback, name, mode, ifAvailable, steal, and signal:", + "html": "If lock’s name is name, then run these steps:", "rationale": "remove", "steps": [ { @@ -235,11 +235,11 @@ ] }, { - "html": "To request a lock with promise, agent, clientId, manager, callback, name, mode, ifAvailable, steal, and signal:", + "html": "Otherwise, run these steps:", "rationale": "if", "steps": [ { - "html": "To request a lock with promise, agent, clientId, manager, callback, name, mode, ifAvailable, steal, and signal:", + "html": "If ifAvailable is true and request is not grantable,\n then enqueue the following steps on callback’s relevant settings object's responsible event loop:", "rationale": "let", "steps": [ { @@ -347,7 +347,7 @@ "html": "Assert: these steps are running on the lock task queue.
" }, { - "html": "To process the lock request queue queue:", + "html": "For each request of queue:", "rationale": "if", "steps": [ { @@ -390,19 +390,19 @@ "html": "Append lock to manager’s held lock set.
" }, { - "html": "To process the lock request queue queue:", + "html": "Enqueue the following steps on callback’s relevant settings object's responsible event loop:", "rationale": "if", "steps": [ { - "html": "To process the lock request queue queue:", + "html": "If signal is present, then run these steps:", "rationale": "if", "steps": [ { - "html": "To process the lock request queue queue:", + "html": "If signal is aborted, then run these steps:", "rationale": "enqueue", "steps": [ { - "html": "To process the lock request queue queue:", + "html": "Enqueue the following step to the lock task queue:", "rationale": "release", "steps": [ { @@ -445,11 +445,11 @@ "html": "Let pending be a new list.
" }, { - "html": "To snapshot the lock state for manager with promise:", + "html": "For each queue of manager’s lock request queue map's values:", "rationale": "for", "steps": [ { - "html": "To snapshot the lock state for manager with promise:", + "html": "For each request of queue:", "rationale": "append", "steps": [ { @@ -463,7 +463,7 @@ "html": "Let held be a new list.
" }, { - "html": "To snapshot the lock state for manager with promise:", + "html": "For each lock of manager’s held lock set:", "rationale": "append", "steps": [ { diff --git a/tr/algorithms/webaudio.json b/tr/algorithms/webaudio.json index edb6db9b3e30..097e283fc0f5 100644 --- a/tr/algorithms/webaudio.json +++ b/tr/algorithms/webaudio.json @@ -91,11 +91,11 @@ "html": "If can decode is true, attempt to decode the encoded audioData
into linear PCM. In case of\nfailure, set can decode to false.
decoding thread
.",
+ "html": "If can decode is false
, queue a media element task to execute the following steps:",
"rationale": "let",
"steps": [
{
- "html": "When queuing a decoding operation to be performed on another\n\tthread, the following steps MUST happen on a thread that is not\n\tthe control thread nor the rendering thread,\n\tcalled the decoding thread
.",
+ "html": "Let error be a DOMException
whose name is EncodingError
.",
"rationale": "reject",
"steps": [
{
@@ -109,14 +109,14 @@
]
},
{
- "html": "When queuing a decoding operation to be performed on another\n\tthread, the following steps MUST happen on a thread that is not\n\tthe control thread nor the rendering thread,\n\tcalled the decoding thread
.",
+ "html": "Otherwise:",
"rationale": "take",
"steps": [
{
"html": "Take the result, representing the decoded linear PCM audio data, and resample it to the sample-rate of the BaseAudioContext
if it is different from\nthe sample-rate of audioData
.
decoding thread
.",
+ "html": " queue a media element task to execute the following steps:",
"rationale": "let",
"steps": [
{
@@ -137,7 +137,7 @@
{
"name": "AudioContext()",
"href": "https://www.w3.org/TR/webaudio/#dom-audiocontext-pending-resume-promises-slot",
- "html": "Let [[pending resume promises]]
be a\nslot on this AudioContext
, that is an initially empty ordered list of\npromises.",
+ "html": "If the current\n\t\tsettings object’s responsible\n\t\tdocument is NOT fully active, throw an InvalidStateError
and\n\tabort these steps.",
"rationale": ".algorithm",
"steps": [
{
@@ -150,7 +150,7 @@
"html": "Let [[pending resume promises]]
be a\nslot on this AudioContext
, that is an initially empty ordered list of\npromises.
[[pending resume promises]]
be a\nslot on this AudioContext
, that is an initially empty ordered list of\npromises.",
+ "html": "If contextOptions
is given, apply the options:",
"rationale": "set",
"steps": [
{
@@ -475,7 +475,7 @@
"html": "If a suspended context is resumed, continue to render the\n\t\tbuffer."
},
{
- "html": "To begin offline rendering, the following steps MUST\n\thappen on a rendering thread that is created for the\n\toccasion.",
+ "html": "Once the rendering is complete, queue a media element task to execute the following steps:",
"rationale": "resolve",
"steps": [
{
@@ -627,7 +627,7 @@
"html": "Set its value for numberOfInputs
, numberOfOutputs
, channelCount
, channelCountMode
, channelInterpretation
to the\ndefault value for this\nspecific interface outlined in the section for each AudioNode
.
AudioNode
means executing the following\n\tsteps, given the arguments context and dict passed to\n\tthe constructor of this interface.",
+ "html": "For each member of dict passed in, execute these steps, with k the key of the member, and v its value. If any\nexceptions is thrown when executing these steps, abort the iteration and\npropagate the exception to the caller of the algorithm (constructor or\nfactory method).",
"rationale": "if",
"steps": [
{
@@ -1059,18 +1059,18 @@
{
"name": "construct periodic wave",
"href": "https://www.w3.org/TR/webaudio/#dom-periodicwave-real-slot",
- "html": "Let p be a new PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.",
+ "html": "",
"rationale": ".algorithm",
"steps": [
{
"html": "Let p be a new PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.
PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.",
+ "html": "Process options
according to one of the following cases:",
"rationale": "if",
"steps": [
{
- "html": "Let p be a new PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.",
+ "html": "If both options.real
and options.imag
are present",
"rationale": "if",
"steps": [
{
@@ -1085,7 +1085,7 @@
]
},
{
- "html": "Let p be a new PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.",
+ "html": "If only options.real
is present",
"rationale": "if",
"steps": [
{
@@ -1100,7 +1100,7 @@
]
},
{
- "html": "Let p be a new PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.",
+ "html": "If only options.imag
is present",
"rationale": "if",
"steps": [
{
@@ -1115,7 +1115,7 @@
]
},
{
- "html": "Let p be a new PeriodicWave
object. Let [[real]]
and [[imag]]
be two internal slots of type Float32Array
, and let [[normalize]]
be an internal slot.",
+ "html": "Otherwise",
"rationale": "set",
"steps": [
{
@@ -1525,7 +1525,7 @@
{
"name": "initialize rendering loop",
"href": "https://www.w3.org/TR/webaudio/#rendering-initialization",
- "html": "Set the internal slot [[current frame]]
of the BaseAudioContext
to 0. Also set currentTime
to 0.",
+ "html": "The following step MUST be performed once before the rendering loop starts.",
"rationale": ".algorithm",
"steps": [
{
@@ -1536,21 +1536,21 @@
{
"name": "rendering a graph",
"href": "https://www.w3.org/TR/webaudio/#rendering-a-graph",
- "html": "Visiting a node means performing\n\tthe following steps:",
+ "html": "The following steps MUST be performed when rendering a render quantum.",
"rationale": ".algorithm",
"steps": [
{
"html": "Let render result be false
.
Let Qrendering be an empty control message\nqueue. Atomically swap Qrendering with the current control message queue.
" }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "While there are messages in Qrendering, execute the\nfollowing steps:", "rationale": "execute", "steps": [ { @@ -1564,7 +1564,7 @@ ] }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "Process theBaseAudioContext
's associated task queue.",
"rationale": "let",
"steps": [
{
@@ -1574,7 +1574,7 @@
"html": "Let task count be the number of tasks in the in task queue
" }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "While task count is not equal to 0, execute the following steps:", "rationale": "let", "steps": [ { @@ -1600,14 +1600,14 @@ ] }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "Process a render quantum.", "rationale": "if", "steps": [ { "html": "If the [[rendering thread state]]
of the BaseAudioContext
is not running
, return false.
AudioNode
s of the BaseAudioContext
to be processed.",
"rationale": "let",
"steps": [
{
@@ -1623,7 +1623,7 @@
"html": "Let cycle breakers be an empty set of DelayNode
s. It will\ncontain all the DelayNode
s that are part of a cycle.
AudioNode
node in nodes:",
"rationale": "if",
"steps": [
{
@@ -1632,7 +1632,7 @@
]
},
{
- "html": "Visiting a node means performing\n\tthe following steps:",
+ "html": "For each DelayNode
delay in cycle breakers:",
"rationale": "let",
"steps": [
{
@@ -1669,11 +1669,11 @@
"html": "If node is an AudioNode
, Visit each AudioNode
connected to the input of node.
AudioParam
param of node:",
"rationale": "for",
"steps": [
{
- "html": "Visiting a node means performing\n\tthe following steps:",
+ "html": "For each AudioNode
param input node connected to param:",
"rationale": "visit",
"steps": [
{
@@ -1699,11 +1699,11 @@
"html": "Compute the value(s) of the AudioListener
's AudioParam
s for this block.
AudioNode
, in ordered node list:",
"rationale": "for",
"steps": [
{
- "html": "Visiting a node means performing\n\tthe following steps:",
+ "html": "For each AudioParam
of this AudioNode
, execute these steps:",
"rationale": "if",
"steps": [
{
@@ -1724,7 +1724,7 @@
"html": "If this AudioNode
is a source node, compute a block of audio, and make it available for reading.
AudioNode
is an AudioWorkletNode
, execute these substeps:",
"rationale": "let",
"steps": [
{
@@ -1755,7 +1755,7 @@
"html": "Set processCallback to getResult.[[Value]].
" }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "If ! IsCallable(processCallback) isfalse
, then:",
"rationale": "set",
"steps": [
{
@@ -1770,7 +1770,7 @@
"html": "Set [[callable process]]
to true
.
Clean up after running script with the current settings object.
" }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "If completion is an abrupt completion:", "rationale": "set", "steps": [ { @@ -1831,7 +1831,7 @@ ] }, { - "html": "Visiting a node means performing\n\tthe following steps:", + "html": "Atomically perform the following steps:", "rationale": "increment", "steps": [ { diff --git a/tr/algorithms/webauthn-3.json b/tr/algorithms/webauthn-3.json index 05c26567d0e1..8b73f17b000b 100644 --- a/tr/algorithms/webauthn-3.json +++ b/tr/algorithms/webauthn-3.json @@ -268,7 +268,7 @@ ] }, { - "html": "IfpkOptions.authenticatorSelection
.residentKey
",
+ "html": "Let requireResidentKey be the effective resident key requirement for credential creation, a Boolean value, as follows:",
"rationale": ".switch",
"steps": [
{
@@ -280,7 +280,7 @@
},
{
"case": "is present and set to preferred",
- "html": "If the authenticator",
+ "html": "Let requireResidentKey be the effective resident key requirement for credential creation, a Boolean value, as follows:",
"rationale": ".switch",
"steps": [
{
@@ -323,7 +323,7 @@
},
{
"case": "is set to preferred",
- "html": "If the authenticator",
+ "html": "Let userVerification be the effective user verification requirement for credential creation, a Boolean value,\nas follows. If pkOptions.authenticatorSelection
.userVerification
",
"rationale": ".switch",
"steps": [
{
@@ -415,7 +415,7 @@
},
{
"case": "If any authenticator returns a status indicating that the user cancelled the operation,",
- "html": "",
+ "html": "This authenticator is now the candidate authenticator.",
"rationale": "remove",
"steps": [
{
@@ -428,7 +428,7 @@
},
{
"case": "If any authenticator returns an error status equivalent to \"InvalidStateError\",",
- "html": "",
+ "html": "This authenticator is now the candidate authenticator.",
"rationale": "remove",
"steps": [
{
@@ -448,7 +448,7 @@
},
{
"case": "If any authenticator indicates success,",
- "html": "",
+ "html": "This authenticator is now the candidate authenticator.",
"rationale": "remove",
"steps": [
{
@@ -663,7 +663,7 @@
},
{
"case": "If options.mediation is conditional and the user interacts with an input or textarea form control with an autocomplete attribute whose value contains a \"webauthn\" autofill detail token,",
- "html": "",
+ "html": "Let assertionCreationData be a struct whose items are:
\ncredentialIdResult
\n If savedCredentialIds[authenticator]
exists, set the value of credentialIdResult to be\nthe bytes of savedCredentialIds[authenticator]
. Otherwise, set the value of credentialIdResult to be the bytes of the credential ID returned from the successful authenticatorGetAssertion operation, as defined in § 6.3.3 The authenticatorGetAssertion Operation.
clientDataJSONResult
\n whose value is the bytes of clientDataJSON.
\nauthenticatorDataResult
\n whose value is the bytes of the authenticator data returned by the authenticator.
\nsignatureResult
\n whose value is the bytes of the signature value returned by the authenticator.
\nuserHandleResult
\n If the authenticator returned a user handle, set the value of userHandleResult to be the bytes of\nthe returned user handle. Otherwise, set the value of userHandleResult to null.
\nassertionAttestation
\n If the authenticator returned an attestation, set the value of assertionAttestation to be the bytes of\nthe attestation statement. Otherwise set it to null.
\nclientExtensionResults
\n whose value is an AuthenticationExtensionsClientOutputs
object containing extension identifier → client extension output entries. The entries are created by running each extension’s client extension processing algorithm to create the client extension outputs, for each client extension in pkOptions.
.extensions
Let assertionCreationData be a struct whose items are:
\ncredentialIdResult
\n If savedCredentialIds[authenticator]
exists, set the value of credentialIdResult to be\nthe bytes of savedCredentialIds[authenticator]
. Otherwise, set the value of credentialIdResult to be the bytes of the credential ID returned from the successful authenticatorGetAssertion operation, as defined in § 6.3.3 The authenticatorGetAssertion Operation.
clientDataJSONResult
\n whose value is the bytes of clientDataJSON.
\nauthenticatorDataResult
\n whose value is the bytes of the authenticator data returned by the authenticator.
\nsignatureResult
\n whose value is the bytes of the signature value returned by the authenticator.
\nuserHandleResult
\n If the authenticator returned a user handle, set the value of userHandleResult to be the bytes of\nthe returned user handle. Otherwise, set the value of userHandleResult to null.
\nassertionAttestation
\n If the authenticator returned an attestation, set the value of assertionAttestation to be the bytes of\nthe attestation statement. Otherwise set it to null.
\nclientExtensionResults
\n whose value is an AuthenticationExtensionsClientOutputs
object containing extension identifier → client extension output entries. The entries are created by running each extension’s client extension processing algorithm to create the client extension outputs, for each client extension in pkOptions.
.extensions
Let assertionCreationData be a struct whose items are:
\ncredentialIdResult
\n If savedCredentialIds[authenticator]
exists, set the value of credentialIdResult to be\nthe bytes of savedCredentialIds[authenticator]
. Otherwise, set the value of credentialIdResult to be the bytes of the credential ID returned from the successful authenticatorGetAssertion operation, as defined in § 6.3.3 The authenticatorGetAssertion Operation.
clientDataJSONResult
\n whose value is the bytes of clientDataJSON.
\nauthenticatorDataResult
\n whose value is the bytes of the authenticator data returned by the authenticator.
\nsignatureResult
\n whose value is the bytes of the signature value returned by the authenticator.
\nuserHandleResult
\n If the authenticator returned a user handle, set the value of userHandleResult to be the bytes of\nthe returned user handle. Otherwise, set the value of userHandleResult to null.
\nassertionAttestation
\n If the authenticator returned an attestation, set the value of assertionAttestation to be the bytes of\nthe attestation statement. Otherwise set it to null.
\nclientExtensionResults
\n whose value is an AuthenticationExtensionsClientOutputs
object containing extension identifier → client extension output entries. The entries are created by running each extension’s client extension processing algorithm to create the client extension outputs, for each client extension in pkOptions.
.extensions
pkOptions.userVerification
",
"rationale": ".switch",
"steps": [
{
diff --git a/tr/algorithms/webdriver2.json b/tr/algorithms/webdriver2.json
index 2b0dd38c2b3a..57b03f868a4b 100644
--- a/tr/algorithms/webdriver2.json
+++ b/tr/algorithms/webdriver2.json
@@ -5604,20 +5604,20 @@
"html": "Let is string value be false.\n\n
" }, { - "html": "If value is a string set value to\n the map «[\"fallbackDefault
\"\n → value]» and set is string value to true.\n\n
If value is a string set value to\n the map «[\"fallbackDefault
\"\n → value]» and set is string value to true.\n\n
If value is not a map return\n error with error code invalid argument.\n\n
" + "html": "If value is not a map return\n error with error code invalid argument.\n\n
" }, { - "html": "Let user prompt handler be an empty map." + "html": "Let user prompt handler be an empty map." }, { "html": "For each prompt type → handler in value:", "rationale": "if", "steps": [ { - "html": "If is string value is false and valid prompt\n types does not contain prompt type\n return error with error code invalid argument.\n\n
" + "html": "If is string value is false and valid prompt\n types does not contain prompt type\n return error with error code invalid argument.\n\n
" }, { "html": "If known prompt handlers does not contain an entry\n with handler key handler return error\n with error code invalid argument.\n\n
" @@ -5661,7 +5661,7 @@ "rationale": "if", "steps": [ { - "html": "If the user prompt handler\n contains request prompt type:", + "html": "If the user prompt handler\n contains request prompt type:", "rationale": "if", "steps": [ { @@ -5709,7 +5709,7 @@ "html": "If the user prompt handler has size 1,\n and user prompt handler contains\n \"fallbackDefault
\", return the result of serialize a prompt\n handler configuration with user prompt\n handler[\"fallbackDefault
\"].\n\n
Let serialized be an empty map.\n\n
" + "html": "Let serialized be an empty map.\n\n
" }, { "html": "For each key →value
of user prompt\n handler:",
@@ -5744,7 +5744,7 @@
"html": "If type is \"beforeUnload
\", return a\n prompt handler configuration with handler \"accept
\"\n and notify false.\n\n
If handlers contains \"fallbackDefault
\"\n return handlers[\"default
\"].\n\n
If handlers contains \"fallbackDefault
\"\n return handlers[\"fallbackDefault
\"].\n\n
Return a prompt handler\n configuration with handler \"dismiss
\" and notify true.\n
Invalidate device.
" }, { - "html": "To lose the device(device, reason) run the following device timeline steps:", + "html": "Issue the following steps on the content timeline of device.[[content device]]
:
Let v be the ECMAScript Number resulting from ! converting idlValue to an ECMAScript value.
" }, { - "html": "To convert an IDL value idlValue of typedouble
or float
to WGSL type T,\n possibly throwing a TypeError
, run the following device timeline steps:",
+ "html": "bool
\n Return the WGSL bool
value corresponding to the result of ! converting v to an IDL value of type boolean
.
i32
\n Return the WGSL i32
value corresponding to the result of ? converting v to an IDL value of type [EnforceRange
] long
.
u32
\n Return the WGSL u32
value corresponding to the result of ? converting v to an IDL value of type [EnforceRange
] unsigned long
.
f32
\n Return the WGSL f32
value corresponding to the result of ? converting v to an IDL value of type float
.
f16
\n double
or float
to WGSL type T,\n possibly throwing a TypeError
, run the following device timeline steps:",
+ "html": "",
"rationale": "let",
"steps": [
{
@@ -211,7 +211,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To convert a GPUColor
color to a texel value of texture format format,\n possibly throwing a TypeError
, run the following device timeline steps:",
+ "html": "If the components of format (assert they all have the same type) are:",
"rationale": ".switch",
"steps": [
{
@@ -271,7 +271,7 @@
"html": "Let adapter be null
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
options \n | GPURequestAdapterOptions \n | ✘\n | ✔\n | Criteria used to select the adapter. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
options \n | GPURequestAdapterOptions \n | ✘\n | ✔\n | Criteria used to select the adapter. \n |
null
:",
"rationale": "resolve",
"steps": [
{
@@ -357,7 +357,7 @@
"rationale": "if",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUDeviceDescriptor \n | ✘\n | ✔\n | Description of the GPUDevice to request. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUDeviceDescriptor \n | ✘\n | ✔\n | Description of the GPUDevice to request. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUDeviceDescriptor \n | ✘\n | ✔\n | Description of the GPUDevice to request. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUDeviceDescriptor \n | ✘\n | ✔\n | Description of the GPUDevice to request. \n |
Set b.usage
to descriptor.usage
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBufferDescriptor \n | ✘\n | ✘\n | Description of the GPUBuffer to create. \n |
mappedAtCreation
is true
:",
"rationale": "set",
"steps": [
{
@@ -524,7 +524,7 @@
"rationale": "if",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBufferDescriptor \n | ✘\n | ✘\n | Description of the GPUBuffer to create. \n |
mappedAtCreation
is true
:",
"rationale": "set",
"steps": [
{
@@ -533,7 +533,7 @@
],
"additional": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBufferDescriptor \n | ✘\n | ✘\n | Description of the GPUBuffer to create. \n |
Let contentTimeline be the current Content timeline.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
[[pending_map]]
is not null
:",
"rationale": "return",
"steps": [
{
@@ -610,7 +610,7 @@
"rationale": "if",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
undefined
:",
"rationale": "let",
"steps": [
{
@@ -619,7 +619,7 @@
],
"additional": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
[[device]]
is lost:",
"rationale": "issue",
"steps": [
{
@@ -668,7 +668,7 @@
],
"additional": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
[[pending_map]]
!= p:",
"rationale": "assert",
"steps": [
{
@@ -711,7 +711,7 @@
"html": "Assert internalStateAtCompletion is \"unavailable\".
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
mode \n | GPUMapModeFlags \n | ✘\n | ✘\n | Whether the buffer should be mapped for reading or writing. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to the start of the range to map. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the range to map. \n |
[[pending_map]]
!= p:",
"rationale": "assert",
"steps": [
{
@@ -766,7 +766,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into the buffer to return buffer contents from. \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the ArrayBuffer to return. \n |
Let extent be a new GPUExtent3DDict
object.
Arguments:
\nGPUTextureDescriptor
descriptor
GPUSize32
mipLevel
Returns: GPUExtent3DDict
dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -953,7 +953,7 @@
"html": "Let logicalExtent be logical miplevel-specific texture extent(descriptor, mipLevel).
" }, { - "html": "Physical miplevel-specific texture extent(descriptor, mipLevel) \nArguments:
\nGPUTextureDescriptor
descriptor
GPUSize32
mipLevel
Returns: GPUExtent3DDict
dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -987,7 +987,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "maximum mipLevel count(dimension, size) \n Arguments:
\nGPUTextureDimension
dimension
GPUTextureDimension
size
Arguments:
\nGPUDevice
this
GPUTextureDescriptor
descriptor
Device timeline steps:
", + "html": "If descriptor.dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -1152,7 +1152,7 @@
"html": "Set descriptor to the result of resolving GPUTextureViewDescriptor defaults for this with descriptor.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUTextureViewDescriptor \n | ✘\n | ✔\n | Description of the GPUTextureView to create. \n |
dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -1196,7 +1196,7 @@
"html": "Set view.[[descriptor]]
to descriptor.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUTextureViewDescriptor \n | ✘\n | ✔\n | Description of the GPUTextureView to create. \n |
usage
contains RENDER_ATTACHMENT
:",
"rationale": "let",
"steps": [
{
@@ -1219,7 +1219,7 @@
"html": "Let resolved be a copy of descriptor.
" }, { - "html": "When resolving GPUTextureViewDescriptor defaults forGPUTextureView
texture with a GPUTextureViewDescriptor
descriptor, run the following device timeline steps:",
+ "html": "If resolved.format
is not provided:",
"rationale": "let",
"steps": [
{
@@ -1234,7 +1234,7 @@
"html": "If resolved.mipLevelCount
is not provided:\nset resolved.mipLevelCount
to texture.mipLevelCount
− resolved.baseMipLevel
.
GPUTextureView
texture with a GPUTextureViewDescriptor
descriptor, run the following device timeline steps:",
+ "html": "If resolved.dimension
is not provided and texture.dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -1257,7 +1257,7 @@
]
},
{
- "html": "When resolving GPUTextureViewDescriptor defaults for GPUTextureView
texture with a GPUTextureViewDescriptor
descriptor, run the following device timeline steps:",
+ "html": "If resolved.arrayLayerCount
is not provided and resolved.dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -1291,7 +1291,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To determine the array layer count of GPUTexture
texture, run the\n following steps:",
+ "html": "If texture.dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -1318,7 +1318,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "resolving GPUTextureAspect(format, aspect) \n Arguments:
\nGPUTextureFormat
format
GPUTextureAspect
aspect
Returns: GPUTextureFormat
or null
GPUTextureFormat
format[[features]]
does not contain the feature:",
"rationale": "throw",
"steps": [
{
@@ -1372,7 +1372,7 @@
"html": "Let source be descriptor.source
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUExternalTextureDescriptor \n | ✘\n | ✘\n | Provides the external image source object (and any creation options). \n |
importExternalTexture()
call with the same descriptor (ignoring label
),\nand the user agent chooses to reuse it:",
"rationale": "let",
"steps": [
{
@@ -1387,7 +1387,7 @@
],
"additional": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUExternalTextureDescriptor \n | ✘\n | ✘\n | Provides the external image source object (and any creation options). \n |
Let usability be ? check the usability of the image argument(source).
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUExternalTextureDescriptor \n | ✘\n | ✘\n | Provides the external image source object (and any creation options). \n |
good
:",
"rationale": "generate",
"steps": [
{
@@ -1419,7 +1419,7 @@
]
},
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUExternalTextureDescriptor \n | ✘\n | ✘\n | Provides the external image source object (and any creation options). \n |
If source is an HTMLVideoElement
, queue an automatic expiry task with device this and the following steps:
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUExternalTextureDescriptor \n | ✘\n | ✘\n | Provides the external image source object (and any creation options). \n |
If source is a VideoFrame
, then when source is closed, run the following steps:
GPUBindGroupLayoutEntry
values entries exceeds the binding slot limits of supported limits limits if the number of slots used toward a limit exceeds the supported value in limits.\n Each entry may use multiple slots toward multiple limits. \n Device timeline steps:
", + "html": "For each entry in entries, if:", "rationale": ".switch", "steps": [ { @@ -1507,11 +1507,11 @@ ] }, { - "html": "The list ofGPUBindGroupLayoutEntry
values entries exceeds the binding slot limits of supported limits limits if the number of slots used toward a limit exceeds the supported value in limits.\n Each entry may use multiple slots toward multiple limits. \n Device timeline steps:
", + "html": "For each shader stage stage in\n«VERTEX
, FRAGMENT
, COMPUTE
»:",
"rationale": "for",
"steps": [
{
- "html": "The list of GPUBindGroupLayoutEntry
values entries exceeds the binding slot limits of supported limits limits if the number of slots used toward a limit exceeds the supported value in limits.\n Each entry may use multiple slots toward multiple limits. \n Device timeline steps:
", + "html": "For each entry in entries for which entry.visibility
contains stage, if:",
"rationale": ".switch",
"steps": [
{
@@ -1556,7 +1556,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBindGroupLayoutDescriptor \n | ✘\n | ✘\n | Description of the GPUBindGroupLayout to create. \n |
GPUBindGroupLayoutEntry
entry in descriptor.entries
:",
"rationale": "if",
"steps": [
{
@@ -1594,7 +1594,7 @@
"html": "Set layout.[[dynamicOffsetCount]]
to the number of\nentries in descriptor where buffer
is provided and buffer
.hasDynamicOffset
is true
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBindGroupLayoutDescriptor \n | ✘\n | ✘\n | Description of the GPUBindGroupLayout to create. \n |
GPUBindGroupLayoutEntry
entry in descriptor.entries
:",
"rationale": "insert",
"steps": [
{
@@ -1617,7 +1617,7 @@
"html": "Let dynamicOffsetIndex be 0.
" }, { - "html": "The bound buffer ranges of aGPUBindGroup
bindGroup,\n given list<GPUBufferDynamicOffset> dynamicOffsets, are computed as follows:",
+ "html": "For each GPUBindGroupEntry
bindGroupEntry in bindGroup.[[entries]]
,\nsorted by bindGroupEntry.binding
:",
"rationale": "let",
"steps": [
{
@@ -1633,7 +1633,7 @@
"html": "Assert bound is a GPUBufferBinding
.
GPUBindGroup
bindGroup,\n given list<GPUBufferDynamicOffset> dynamicOffsets, are computed as follows:",
+ "html": "If bindGroupLayoutEntry.buffer
.hasDynamicOffset
:",
"rationale": "increment",
"steps": [
{
@@ -1681,7 +1681,7 @@
"html": "Let limits be this.[[device]]
.[[limits]]
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBindGroupDescriptor \n | ✘\n | ✘\n | Description of the GPUBindGroup to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBindGroupDescriptor \n | ✘\n | ✘\n | Description of the GPUBindGroup to create. \n |
sampler
.type
is:",
"rationale": ".switch",
"steps": [
{
@@ -1721,7 +1721,7 @@
},
{
"case": "buffer",
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBindGroupDescriptor \n | ✘\n | ✘\n | Description of the GPUBindGroup to create. \n |
buffer
.type
is",
"rationale": ".switch",
"steps": [
{
@@ -1757,7 +1757,7 @@
"html": "Let bindGroup.[[usedResources]]
= {}.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUBindGroupDescriptor \n | ✘\n | ✘\n | Description of the GPUBindGroup to create. \n |
GPUBindGroupEntry
bindingDescriptor in descriptor.entries
:",
"rationale": "let",
"steps": [
{
@@ -1780,7 +1780,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "effective buffer binding size(binding) \n Arguments:
\nGPUBufferBinding
binding
Returns: GPUSize64
size
is not provided:",
"rationale": "return",
"steps": [
{
@@ -2064,7 +2064,7 @@
"html": "Let groupDescs be a sequence of device.[[limits]]
.maxBindGroups
new GPUBindGroupLayoutDescriptor
objects.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "For each groupDesc in groupDescs:",
"rationale": "set",
"steps": [
{
@@ -2073,7 +2073,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "For each GPUProgrammableStage
stageDesc in the descriptor used to create pipeline:",
"rationale": "let",
"steps": [
{
@@ -2083,7 +2083,7 @@
"html": "Let entryPoint be get the entry point(shaderStage, stageDesc). Assert entryPoint is not null
.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "For each resource resource statically used by entryPoint:",
"rationale": "let",
"steps": [
{
@@ -2102,7 +2102,7 @@
"html": "Set entry.visibility
to shaderStage.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a sampler binding:",
"rationale": "let",
"steps": [
{
@@ -2114,7 +2114,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a comparison sampler binding:",
"rationale": "let",
"steps": [
{
@@ -2129,7 +2129,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a buffer binding:",
"rationale": "let",
"steps": [
{
@@ -2139,7 +2139,7 @@
"html": "Set bufferLayout.minBindingSize
to resource’s minimum buffer binding size.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a read-only storage buffer:",
"rationale": "set",
"steps": [
{
@@ -2148,7 +2148,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a storage buffer:",
"rationale": "set",
"steps": [
{
@@ -2162,14 +2162,14 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a sampled texture binding:",
"rationale": "let",
"steps": [
{
"html": "Let textureLayout be a new GPUTextureBindingLayout
.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "Else if the sampled type of resource is:",
"rationale": ".switch",
"steps": [
{
@@ -2199,7 +2199,7 @@
"html": "Set textureLayout.viewDimension
to resource’s dimension.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a multisampled texture:",
"rationale": "set",
"steps": [
{
@@ -2213,7 +2213,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a storage texture binding:",
"rationale": "let",
"steps": [
{
@@ -2226,7 +2226,7 @@
"html": "Set storageTextureLayout.viewDimension
to resource’s dimension.
GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If the access mode is:",
"rationale": ".switch",
"steps": [
{
@@ -2257,11 +2257,11 @@
"html": "Set groupCount to max(groupCount, group + 1).
" }, { - "html": "To create a default pipeline layout forGPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If groupDescs[group] has an entry previousEntry with binding
equal to binding:",
"rationale": "if",
"steps": [
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If entry has different visibility
than previousEntry:",
"rationale": "add",
"steps": [
{
@@ -2270,7 +2270,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is for a buffer binding and entry has greater buffer
.minBindingSize
than previousEntry:",
"rationale": "set",
"steps": [
{
@@ -2279,7 +2279,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is a sampled texture binding and entry has different texture
.sampleType
than previousEntry and both entry and previousEntry have texture
.sampleType
of either \"float\"
or \"unfilterable-float\"
:",
"rationale": "set",
"steps": [
{
@@ -2288,7 +2288,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If any other property is unequal between entry and previousEntry:",
"rationale": "return",
"steps": [
{
@@ -2297,7 +2297,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "If resource is a storage texture binding, entry.storageTexture.access
is \"read-write\"
, previousEntry.storageTexture.access
is \"write-only\"
, and previousEntry.storageTexture.format
is compatible with STORAGE_BINDING
and \"read-write\"
according to the § 26.1.1 Plain color formats table:",
"rationale": "set",
"steps": [
{
@@ -2308,7 +2308,7 @@
]
},
{
- "html": "To create a default pipeline layout for GPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "Else",
"rationale": "append",
"steps": [
{
@@ -2324,7 +2324,7 @@
"html": "Let groupLayouts be a new list.
" }, { - "html": "To create a default pipeline layout forGPUPipelineBase
pipeline,\nrun the following device timeline steps:",
+ "html": "For each i from 0 to groupCount - 1, inclusive:",
"rationale": "let",
"steps": [
{
@@ -2359,7 +2359,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To get the entry point(GPUShaderStage
stage, GPUProgrammableStage
descriptor), run the following device timeline steps:",
+ "html": "If descriptor.entryPoint
is provided:",
"rationale": "if",
"steps": [
{
@@ -2368,7 +2368,7 @@
],
"additional": [
{
- "html": "To get the entry point(GPUShaderStage
stage, GPUProgrammableStage
descriptor), run the following device timeline steps:",
+ "html": "Otherwise:",
"rationale": "if",
"steps": [
{
@@ -2399,7 +2399,7 @@
"html": "For each binding that is statically used by entryPoint:
\nvalidating shader binding(binding, layout) must return true
.
Arguments:
\nGPUShaderStage
stage
GPUProgrammableStage
descriptor
GPUPipelineLayout
layout
GPUDevice
device
All of the requirements in the following steps must be met.\n If any are unmet, return false
; otherwise, return true
.
Arguments:
\nshader binding declaration variable, a module-scope variable declaration reflected from a shader module
\nGPUPipelineLayout
layout
Let bindGroup be the bind group index, and bindIndex be the binding index,\n of the shader binding declaration variable.
\nReturn true
if all of the following conditions are satisfied:
layout.[[bindGroupLayouts]]
[bindGroup] contains\na GPUBindGroupLayoutEntry
entry whose entry.binding
== bindIndex.
If the defined binding member for entry is:
\nbuffer
\n \"uniform\"
\n variable is declared with address space uniform
.
\"storage\"
\n variable is declared with address space storage
and access mode read_write
.
\"read-only-storage\"
\n variable is declared with address space storage
and access mode read
.
If entry.buffer
.minBindingSize
is not 0
,\nthen it must be at least the minimum buffer binding size for the associated\nbuffer binding variable in the shader.
sampler
\n \"filtering\"
or \"non-filtering\"
\n variable has type sampler
.
\"comparison\"
\n variable has type sampler_comparison
.
texture
\n If, and only if, entry.texture
.multisampled
is true
, variable has type texture_multisampled_2d<T>
or texture_depth_multisampled_2d<T>
.
If entry.texture
.sampleType
is:
\"float\"
, \"unfilterable-float\"
, \"sint\"
or \"uint\"
\n variable has one of the types:
\ntexture_1d<T>
texture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_3d<T>
texture_multisampled_2d<T>
If entry.texture
.sampleType
is:
\"float\"
or \"unfilterable-float\"
\n The sampled type T
is f32
.
\"sint\"
\n The sampled type T
is i32
.
\"uint\"
\n The sampled type T
is u32
.
\"depth\"
\n variable has one of the types:
\ntexture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_multisampled_2d<T>
texture_depth_2d
texture_depth_2d_array
texture_depth_cube
texture_depth_cube_array
texture_depth_multisampled_2d
where the sampled type T
is f32
.
If entry.texture
.viewDimension
is:
\"1d\"
\n variable has type texture_1d<T>
.
\"2d\"
\n variable has type texture_2d<T>
or texture_multisampled_2d<T>
.
\"2d-array\"
\n variable has type texture_2d_array<T>
.
\"cube\"
\n variable has type texture_cube<T>
.
\"cube-array\"
\n variable has type texture_cube_array<T>
.
\"3d\"
\n variable has type texture_3d<T>
.
storageTexture
\n If entry.storageTexture
.viewDimension
is:
\"1d\"
\n variable has type texture_storage_1d<T, A>
.
\"2d\"
\n variable has type texture_storage_2d<T, A>
.
\"2d-array\"
\n variable has type texture_storage_2d_array<T, A>
.
\"3d\"
\n variable has type texture_storage_3d<T, A>
.
If entry.storageTexture
.access
is:
\"write-only\"
\n The access mode A
is write
.
\"read-only\"
\n The access mode A
is read
.
\"read-write\"
\n The access mode A
is read_write
or write
.
The texel format T
equals entry.storageTexture
.format
.
Arguments:
\nshader binding declaration variable, a module-scope variable declaration reflected from a shader module
\nGPUPipelineLayout
layout
Let bindGroup be the bind group index, and bindIndex be the binding index,\n of the shader binding declaration variable.
\nReturn true
if all of the following conditions are satisfied:
layout.[[bindGroupLayouts]]
[bindGroup] contains\na GPUBindGroupLayoutEntry
entry whose entry.binding
== bindIndex.
If the defined binding member for entry is:
\nbuffer
\n \"uniform\"
\n variable is declared with address space uniform
.
\"storage\"
\n variable is declared with address space storage
and access mode read_write
.
\"read-only-storage\"
\n variable is declared with address space storage
and access mode read
.
If entry.buffer
.minBindingSize
is not 0
,\nthen it must be at least the minimum buffer binding size for the associated\nbuffer binding variable in the shader.
sampler
\n \"filtering\"
or \"non-filtering\"
\n variable has type sampler
.
\"comparison\"
\n variable has type sampler_comparison
.
texture
\n If, and only if, entry.texture
.multisampled
is true
, variable has type texture_multisampled_2d<T>
or texture_depth_multisampled_2d<T>
.
If entry.texture
.sampleType
is:
\"float\"
, \"unfilterable-float\"
, \"sint\"
or \"uint\"
\n variable has one of the types:
\ntexture_1d<T>
texture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_3d<T>
texture_multisampled_2d<T>
If entry.texture
.sampleType
is:
\"float\"
or \"unfilterable-float\"
\n The sampled type T
is f32
.
\"sint\"
\n The sampled type T
is i32
.
\"uint\"
\n The sampled type T
is u32
.
\"depth\"
\n variable has one of the types:
\ntexture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_multisampled_2d<T>
texture_depth_2d
texture_depth_2d_array
texture_depth_cube
texture_depth_cube_array
texture_depth_multisampled_2d
where the sampled type T
is f32
.
If entry.texture
.viewDimension
is:
\"1d\"
\n variable has type texture_1d<T>
.
\"2d\"
\n variable has type texture_2d<T>
or texture_multisampled_2d<T>
.
\"2d-array\"
\n variable has type texture_2d_array<T>
.
\"cube\"
\n variable has type texture_cube<T>
.
\"cube-array\"
\n variable has type texture_cube_array<T>
.
\"3d\"
\n variable has type texture_3d<T>
.
storageTexture
\n If entry.storageTexture
.viewDimension
is:
\"1d\"
\n variable has type texture_storage_1d<T, A>
.
\"2d\"
\n variable has type texture_storage_2d<T, A>
.
\"2d-array\"
\n variable has type texture_storage_2d_array<T, A>
.
\"3d\"
\n variable has type texture_storage_3d<T, A>
.
If entry.storageTexture
.access
is:
\"write-only\"
\n The access mode A
is write
.
\"read-only\"
\n The access mode A
is read
.
\"read-write\"
\n The access mode A
is read_write
or write
.
The texel format T
equals entry.storageTexture
.format
.
buffer
.type
is:",
"rationale": ".switch",
"steps": [
{
@@ -2462,7 +2462,7 @@
},
{
"case": "sampler",
- "html": "validating shader binding(variable, layout) \n Arguments:
\nshader binding declaration variable, a module-scope variable declaration reflected from a shader module
\nGPUPipelineLayout
layout
Let bindGroup be the bind group index, and bindIndex be the binding index,\n of the shader binding declaration variable.
\nReturn true
if all of the following conditions are satisfied:
layout.[[bindGroupLayouts]]
[bindGroup] contains\na GPUBindGroupLayoutEntry
entry whose entry.binding
== bindIndex.
If the defined binding member for entry is:
\nbuffer
\n \"uniform\"
\n variable is declared with address space uniform
.
\"storage\"
\n variable is declared with address space storage
and access mode read_write
.
\"read-only-storage\"
\n variable is declared with address space storage
and access mode read
.
If entry.buffer
.minBindingSize
is not 0
,\nthen it must be at least the minimum buffer binding size for the associated\nbuffer binding variable in the shader.
sampler
\n \"filtering\"
or \"non-filtering\"
\n variable has type sampler
.
\"comparison\"
\n variable has type sampler_comparison
.
texture
\n If, and only if, entry.texture
.multisampled
is true
, variable has type texture_multisampled_2d<T>
or texture_depth_multisampled_2d<T>
.
If entry.texture
.sampleType
is:
\"float\"
, \"unfilterable-float\"
, \"sint\"
or \"uint\"
\n variable has one of the types:
\ntexture_1d<T>
texture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_3d<T>
texture_multisampled_2d<T>
If entry.texture
.sampleType
is:
\"float\"
or \"unfilterable-float\"
\n The sampled type T
is f32
.
\"sint\"
\n The sampled type T
is i32
.
\"uint\"
\n The sampled type T
is u32
.
\"depth\"
\n variable has one of the types:
\ntexture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_multisampled_2d<T>
texture_depth_2d
texture_depth_2d_array
texture_depth_cube
texture_depth_cube_array
texture_depth_multisampled_2d
where the sampled type T
is f32
.
If entry.texture
.viewDimension
is:
\"1d\"
\n variable has type texture_1d<T>
.
\"2d\"
\n variable has type texture_2d<T>
or texture_multisampled_2d<T>
.
\"2d-array\"
\n variable has type texture_2d_array<T>
.
\"cube\"
\n variable has type texture_cube<T>
.
\"cube-array\"
\n variable has type texture_cube_array<T>
.
\"3d\"
\n variable has type texture_3d<T>
.
storageTexture
\n If entry.storageTexture
.viewDimension
is:
\"1d\"
\n variable has type texture_storage_1d<T, A>
.
\"2d\"
\n variable has type texture_storage_2d<T, A>
.
\"2d-array\"
\n variable has type texture_storage_2d_array<T, A>
.
\"3d\"
\n variable has type texture_storage_3d<T, A>
.
If entry.storageTexture
.access
is:
\"write-only\"
\n The access mode A
is write
.
\"read-only\"
\n The access mode A
is read
.
\"read-write\"
\n The access mode A
is read_write
or write
.
The texel format T
equals entry.storageTexture
.format
.
sampler
.type
is:",
"rationale": ".switch",
"steps": [
{
@@ -2486,7 +2486,7 @@
},
{
"case": "storageTexture",
- "html": "validating shader binding(variable, layout) \n Arguments:
\nshader binding declaration variable, a module-scope variable declaration reflected from a shader module
\nGPUPipelineLayout
layout
Let bindGroup be the bind group index, and bindIndex be the binding index,\n of the shader binding declaration variable.
\nReturn true
if all of the following conditions are satisfied:
layout.[[bindGroupLayouts]]
[bindGroup] contains\na GPUBindGroupLayoutEntry
entry whose entry.binding
== bindIndex.
If the defined binding member for entry is:
\nbuffer
\n \"uniform\"
\n variable is declared with address space uniform
.
\"storage\"
\n variable is declared with address space storage
and access mode read_write
.
\"read-only-storage\"
\n variable is declared with address space storage
and access mode read
.
If entry.buffer
.minBindingSize
is not 0
,\nthen it must be at least the minimum buffer binding size for the associated\nbuffer binding variable in the shader.
sampler
\n \"filtering\"
or \"non-filtering\"
\n variable has type sampler
.
\"comparison\"
\n variable has type sampler_comparison
.
texture
\n If, and only if, entry.texture
.multisampled
is true
, variable has type texture_multisampled_2d<T>
or texture_depth_multisampled_2d<T>
.
If entry.texture
.sampleType
is:
\"float\"
, \"unfilterable-float\"
, \"sint\"
or \"uint\"
\n variable has one of the types:
\ntexture_1d<T>
texture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_3d<T>
texture_multisampled_2d<T>
If entry.texture
.sampleType
is:
\"float\"
or \"unfilterable-float\"
\n The sampled type T
is f32
.
\"sint\"
\n The sampled type T
is i32
.
\"uint\"
\n The sampled type T
is u32
.
\"depth\"
\n variable has one of the types:
\ntexture_2d<T>
texture_2d_array<T>
texture_cube<T>
texture_cube_array<T>
texture_multisampled_2d<T>
texture_depth_2d
texture_depth_2d_array
texture_depth_cube
texture_depth_cube_array
texture_depth_multisampled_2d
where the sampled type T
is f32
.
If entry.texture
.viewDimension
is:
\"1d\"
\n variable has type texture_1d<T>
.
\"2d\"
\n variable has type texture_2d<T>
or texture_multisampled_2d<T>
.
\"2d-array\"
\n variable has type texture_2d_array<T>
.
\"cube\"
\n variable has type texture_cube<T>
.
\"cube-array\"
\n variable has type texture_cube_array<T>
.
\"3d\"
\n variable has type texture_3d<T>
.
storageTexture
\n If entry.storageTexture
.viewDimension
is:
\"1d\"
\n variable has type texture_storage_1d<T, A>
.
\"2d\"
\n variable has type texture_storage_2d<T, A>
.
\"2d-array\"
\n variable has type texture_storage_2d_array<T, A>
.
\"3d\"
\n variable has type texture_storage_3d<T, A>
.
If entry.storageTexture
.access
is:
\"write-only\"
\n The access mode A
is write
.
\"read-only\"
\n The access mode A
is read
.
\"read-write\"
\n The access mode A
is read_write
or write
.
The texel format T
equals entry.storageTexture
.format
.
storageTexture
.viewDimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -2569,7 +2569,7 @@
"html": "Let layout be a new default pipeline layout for pipeline if descriptor.layout
is \"auto\"
,\nand descriptor.layout
otherwise.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUComputePipelineDescriptor \n | ✘\n | ✘\n | Description of the GPUComputePipeline to create. \n |
All of the requirements in the following steps must be met.\nIf any are unmet, generate a validation error, invalidate pipeline, and stop.
\nParameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUComputePipelineDescriptor \n | ✘\n | ✘\n | Description of the GPUComputePipeline to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUComputePipelineDescriptor \n | ✘\n | ✘\n | Description of the GPUComputePipeline to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUComputePipelineDescriptor \n | ✘\n | ✘\n | Description of the GPUComputePipeline to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
fragment
is provided:",
"rationale": "for",
"steps": [
{
@@ -2732,11 +2732,11 @@
"html": "Let depthStencil be descriptor.depthStencil
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
depthWriteEnabled
is provided:",
"rationale": "set",
"steps": [
{
@@ -2745,7 +2745,7 @@
]
},
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
stencilWriteMask
is not 0:",
"rationale": "let",
"steps": [
{
@@ -2758,7 +2758,7 @@
"html": "Let cullMode be descriptor.primitive
.cullMode
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
\"front\"
, and any of stencilFront.passOp
, stencilFront.depthFailOp
, or stencilFront.failOp
is not \"keep\"
:",
"rationale": "set",
"steps": [
{
@@ -2767,7 +2767,7 @@
]
},
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
\"back\"
, and any of stencilBack.passOp
, stencilBack.depthFailOp
, or stencilBack.failOp
is not \"keep\"
:",
"rationale": "set",
"steps": [
{
@@ -2825,7 +2825,7 @@
"rationale": "if",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPipelineDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPipeline to create. \n |
Let maxVertexShaderOutputVariables be device.limits.maxInterStageShaderVariables
.
Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "If descriptor.primitive
.topology
is \"point-list\"
:",
"rationale": "decrement",
"steps": [
{
@@ -2889,11 +2889,11 @@
]
},
{
- "html": "validating inter-stage interfaces(device, descriptor) \n Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "If clip_distances is declared in the output of descriptor.vertex
:",
"rationale": "let",
"steps": [
{
- "html": "validating inter-stage interfaces(device, descriptor) \n Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "Let clipDistancesSize be the array size of clip_distances.", "rationale": "decrement", "steps": [ { @@ -2910,15 +2910,15 @@ "html": "Return false
if any of the following requirements are unmet:
There must be no more than maxVertexShaderOutputComponents scalar\ncomponents across all user-defined outputs for descriptor.vertex
.\nEach user-defined output of descriptor.vertex
consumes 4 scalar components.
The location of each user-defined output of descriptor.vertex
must be\n< maxVertexShaderOutputVariables.
Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "If descriptor.fragment
is provided:",
"rationale": "let",
"steps": [
{
- "html": "validating inter-stage interfaces(device, descriptor) \n Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "Let maxFragmentShaderInputComponents be device.limits.maxInterStageShaderComponents
.",
"rationale": "if",
"steps": [
{
- "html": "validating inter-stage interfaces(device, descriptor) \n Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "If thefront_facing
builtin is an input of descriptor.fragment
:",
"rationale": "decrement",
"steps": [
{
@@ -2927,7 +2927,7 @@
]
},
{
- "html": "validating inter-stage interfaces(device, descriptor) \n Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "If thesample_index
builtin is an input of descriptor.fragment
:",
"rationale": "decrement",
"steps": [
{
@@ -2936,7 +2936,7 @@
]
},
{
- "html": "validating inter-stage interfaces(device, descriptor) \n Arguments:
\nGPUDevice
device
GPURenderPipelineDescriptor
descriptor
Returns: boolean
Device timeline steps:
", + "html": "If thesample_mask
builtin is an input of descriptor.fragment
:",
"rationale": "decrement",
"steps": [
{
@@ -2988,7 +2988,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "validating GPUFragmentState(device, descriptor, layout) \n Arguments:
\nGPUDevice
device
GPUFragmentState
descriptor
GPUPipelineLayout
layout
Device timeline steps:
", + "html": "If theGPUTextureSampleType
s for colorState.format
(defined in § 26.1 Texture Format Capabilities) are:",
"rationale": ".switch",
"steps": [
{
@@ -3022,7 +3022,7 @@
"html": "Let formats be an empty list<GPUTextureFormat
?>
Arguments:
\nGPUDevice
device
sequence<GPUColorTargetState
?> targets
Device timeline steps:
", + "html": "For each target in targets:", "rationale": "if", "steps": [ { @@ -3054,7 +3054,7 @@ "html": "Let maxDepthSlope be the maximum of the horizontal and vertical slopes of the fragment’s depth value.
" }, { - "html": "The biased fragment depth for a fragment being written todepthStencilAttachment
attachment when drawing using GPUDepthStencilState
state is calculated by running the following queue timeline steps:",
+ "html": "If format is a unorm format:",
"rationale": "let",
"steps": [
{
@@ -3063,7 +3063,7 @@
]
},
{
- "html": "The biased fragment depth for a fragment being written to depthStencilAttachment
attachment when drawing using GPUDepthStencilState
state is calculated by running the following queue timeline steps:",
+ "html": "Otherwise, if format is a float format:",
"rationale": "let",
"steps": [
{
@@ -3072,7 +3072,7 @@
]
},
{
- "html": "The biased fragment depth for a fragment being written to depthStencilAttachment
attachment when drawing using GPUDepthStencilState
state is calculated by running the following queue timeline steps:",
+ "html": "If state.depthBiasClamp
> 0
:",
"rationale": "set",
"steps": [
{
@@ -3081,7 +3081,7 @@
]
},
{
- "html": "The biased fragment depth for a fragment being written to depthStencilAttachment
attachment when drawing using GPUDepthStencilState
state is calculated by running the following queue timeline steps:",
+ "html": "Otherwise if state.depthBiasClamp
< 0
:",
"rationale": "set",
"steps": [
{
@@ -3090,7 +3090,7 @@
]
},
{
- "html": "The biased fragment depth for a fragment being written to depthStencilAttachment
attachment when drawing using GPUDepthStencilState
state is calculated by running the following queue timeline steps:",
+ "html": "If state.depthBias
≠ 0
or state.depthBiasSlopeScale
≠ 0
:",
"rationale": "set",
"steps": [
{
@@ -3118,7 +3118,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "validating GPUVertexBufferLayout(device, descriptor, vertexStage) \n Arguments:
\nGPUDevice
device
GPUVertexBufferLayout
descriptor
GPUProgrammableStage
vertexStage
Device timeline steps:
", + "html": "The type T of var is compatible with attrib.format
's vertex data type:",
"rationale": ".switch",
"steps": [
{
@@ -3174,7 +3174,7 @@
"html": "Let texture be copyTexture.texture
.
GPUImageCopyTexture
copyTexture is determined by running the following steps:",
+ "html": "If texture.dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -3182,7 +3182,7 @@
"steps": [
{
"case": "1d",
- "html": "The texture copy sub-region for depth slice or array layer index of GPUImageCopyTexture
copyTexture is determined by running the following steps:",
+ "html": "",
"rationale": "assert",
"steps": [
{
@@ -3269,7 +3269,7 @@
"html": "Let offsetAlignment = texel block copy footprint of texture.format
.
Arguments:
\nGPUImageCopyTexture
imageCopyTexture
GPUImageDataLayout
dataLayout
GPUSize64Out
dataLength
GPUExtent3D
copySize
GPUTextureUsage
textureUsage
boolean
aligned
Returns: boolean
Device timeline steps:
", + "html": "Return true
if and only if all of the following conditions apply:
texture.usage
contains textureUsage.
Arguments:
\nGPUImageCopyTexture
imageCopyTexture
GPUImageDataLayout
dataLayout
GPUSize64Out
dataLength
GPUExtent3D
copySize
GPUTextureUsage
textureUsage
boolean
aligned
Returns: boolean
Device timeline steps:
", + "html": "If texture.format
is a depth-or-stencil format format:",
"rationale": "if",
"steps": [
{
"html": "imageCopyTexture.aspect
must refer to a single aspect of texture.format
.
Arguments:
\nGPUImageCopyTexture
imageCopyTexture
GPUImageDataLayout
dataLayout
GPUSize64Out
dataLength
GPUExtent3D
copySize
GPUTextureUsage
textureUsage
boolean
aligned
Returns: boolean
Device timeline steps:
", + "html": "If textureUsage is:", "rationale": ".switch", "steps": [ { @@ -3347,14 +3347,14 @@ "html": "Let requiredBytesInCopy be 0.
" }, { - "html": "validating linear texture data(layout, byteSize, format, copyExtent) \nArguments:
\nGPUImageDataLayout
layout\n Layout of the linear texture data.
\nGPUSize64
byteSize\n Total size of the linear data, in bytes.
\nGPUTextureFormat
format\n Format of the texture.
\nGPUExtent3D
copyExtent\n Extent of the texture to copy.
\nDevice timeline steps:
", + "html": "If copyExtent.depthOrArrayLayers > 0:", "rationale": "increment", "steps": [ { "html": "Increment requiredBytesInCopy by bytesPerRow × rowsPerImage × (copyExtent.depthOrArrayLayers − 1).
" }, { - "html": "validating linear texture data(layout, byteSize, format, copyExtent) \nArguments:
\nGPUImageDataLayout
layout\n Layout of the linear texture data.
\nGPUSize64
byteSize\n Total size of the linear data, in bytes.
\nGPUTextureFormat
format\n Format of the texture.
\nGPUExtent3D
copyExtent\n Extent of the texture to copy.
\nDevice timeline steps:
", + "html": "If heightInBlocks > 0:", "rationale": "increment", "steps": [ { @@ -3396,7 +3396,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To Validate the encoder state ofGPUCommandsMixin
encoder run the [[state]]
is:",
"rationale": ".switch",
"steps": [
{
@@ -3430,7 +3430,7 @@
"html": "Append command to encoder.[[commands]]
.
GPUCommandsMixin
encoder which issues the steps of a GPU Command command, run the following device timeline steps:",
+ "html": "When command is executed as part of a GPUCommandBuffer
:",
"rationale": "issue",
"steps": [
{
@@ -3475,7 +3475,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
null
colorAttachment in descriptor.colorAttachments
:",
"rationale": "if",
"steps": [
{
@@ -3513,14 +3513,14 @@
"html": "Let attachmentRegions be a list of [texture subresource, depthSlice
?]\npairs, initially empty. Each pair describes the region of the texture to be rendered to, which\nincludes a single depth slice for \"3d\"
textures only.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
null
colorAttachment in descriptor.colorAttachments
:",
"rationale": "add",
"steps": [
{
"html": "Add [colorAttachment.view
, colorAttachment.depthSlice
] to attachmentRegions.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
null
:",
"rationale": "add",
"steps": [
{
@@ -3540,7 +3540,7 @@
"html": "Let depthStencilAttachment be descriptor.depthStencilAttachment
,\nor null
if not provided.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
null
:",
"rationale": "let",
"steps": [
{
@@ -3564,7 +3564,7 @@
"html": "Set pass.[[layout]]
to derive render targets layout from pass(descriptor).
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
timestampWrites
is provided:",
"rationale": "let",
"steps": [
{
@@ -3614,14 +3614,14 @@
"html": "Set [[renderState]]
.[[depthStencilAttachment]]
to descriptor.depthStencilAttachment
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
null
colorAttachment in descriptor.colorAttachments
:",
"rationale": "let",
"steps": [
{
"html": "Let colorView be colorAttachment.view
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
[[descriptor]]
.dimension
is:",
"rationale": ".switch",
"steps": [
{
@@ -3640,7 +3640,7 @@
]
},
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
loadOp
is:",
"rationale": ".switch",
"steps": [
{
@@ -3661,11 +3661,11 @@
]
},
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
null
:",
"rationale": "if",
"steps": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
depthLoadOp
is:",
"rationale": ".switch",
"steps": [
{
@@ -3688,7 +3688,7 @@
]
},
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderPassDescriptor \n | ✘\n | ✘\n | Description of the GPURenderPassEncoder to create. \n |
stencilLoadOp
is:",
"rationale": ".switch",
"steps": [
{
@@ -3747,7 +3747,7 @@
"html": "If any of the following requirements are unmet, invalidate pass and return.
\nIf descriptor.timestampWrites
is provided:
Validate timestampWrites(this.[[device]]
, descriptor.timestampWrites
)\nmust return true.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUComputePassDescriptor \n | ✘\n | ✔\n | \n |
timestampWrites
is provided:",
"rationale": "let",
"steps": [
{
@@ -3921,18 +3921,18 @@
"html": "Assert that dstBlockOriginX, dstBlockOriginY, blockColumns, and blockRows are integers.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyBuffer \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source buffer. \n |
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination texture subresource. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Let dstSubregion be texture copy sub-region (z + dstOrigin.z) of destination.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyBuffer \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source buffer. \n |
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination texture subresource. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyBuffer \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source buffer. \n |
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination texture subresource. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Assert that srcBlockOriginX, srcBlockOriginY, blockColumns, and blockRows are integers.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source texture subresources. \n |
destination \n | GPUImageCopyBuffer \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination buffer. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Let srcSubregion be texture copy sub-region (z + srcOrigin.z) of source.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source texture subresources. \n |
destination \n | GPUImageCopyBuffer \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination buffer. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source texture subresources. \n |
destination \n | GPUImageCopyBuffer \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination buffer. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Assert that srcBlockOriginX, srcBlockOriginY, dstBlockOriginX, dstBlockOriginY, blockColumns, and blockRows are integers.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source texture subresources. \n |
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination texture subresources. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Let dstSubregion be texture copy sub-region (z + dstOrigin.z) of destination.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source texture subresources. \n |
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination texture subresources. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the source texture subresources. \n |
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | Combined with copySize, defines the region of the destination texture subresources. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | \n |
Let offset be destinationOffset.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
querySet \n | GPUQuerySet \n | ✘\n | ✘\n | \n |
firstQuery \n | GPUSize32 \n | ✘\n | ✘\n | \n |
queryCount \n | GPUSize32 \n | ✘\n | ✘\n | \n |
destination \n | GPUBuffer \n | ✘\n | ✘\n | \n |
destinationOffset \n | GPUSize64 \n | ✘\n | ✘\n | \n |
Set this.[[state]]
to \"ended\".
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUCommandBufferDescriptor \n | ✘\n | ✔\n | \n |
false
, then:",
"rationale": "generate",
"steps": [
{
@@ -4283,7 +4283,7 @@
"html": "If any of the following requirements are unmet, invalidate this and stop.
\nindex must be < this.[[device]]
.[[limits]]
.maxBindGroups
.
dynamicOffsets.length must equal dynamicOffsetCount.
\nGPUBindingCommandsMixin
this. \n Arguments:
\nindex
, of type GPUIndex32
, non-nullable, required\n The index to set the bind group at.
\nbindGroup
, of type GPUBindGroup
, nullable, required\n Bind group to use for subsequent render or compute commands.
\ndynamicOffsets
, of type sequence<GPUBufferDynamicOffset
>, non-nullable, defaulting to []
\n Array containing buffer offsets in bytes for each entry in bindGroup marked as buffer
.hasDynamicOffset
.
Returns: undefined
Content timeline steps:
", + "html": "If bindGroup isnull
:",
"rationale": "remove",
"steps": [
{
@@ -4295,7 +4295,7 @@
],
"additional": [
{
- "html": "Called on: GPUBindingCommandsMixin
this. \n Arguments:
\nindex
, of type GPUIndex32
, non-nullable, required\n The index to set the bind group at.
\nbindGroup
, of type GPUBindGroup
, nullable, required\n Bind group to use for subsequent render or compute commands.
\ndynamicOffsets
, of type sequence<GPUBufferDynamicOffset
>, non-nullable, defaulting to []
\n Array containing buffer offsets in bytes for each entry in bindGroup marked as buffer
.hasDynamicOffset
.
Returns: undefined
Content timeline steps:
", + "html": "Otherwise:", "rationale": "if", "steps": [ { @@ -4343,14 +4343,14 @@ "html": "Let layout be bindGroup.[[layout]]
.
GPUBindGroup
bindGroup with a given list of steps to be executed for each dynamic offset, run the following device timeline steps:",
+ "html": "For each GPUBindGroupEntry
entry in bindGroup.[[entries]]
ordered in increasing values of entry.binding
:",
"rationale": "let",
"steps": [
{
"html": "Let bindingDescriptor be the GPUBindGroupLayoutEntry
at layout.[[entryMap]]
[entry.binding
]:
GPUBindGroup
bindGroup with a given list of steps to be executed for each dynamic offset, run the following device timeline steps:",
+ "html": "If bindingDescriptor.buffer
?.hasDynamicOffset
is true
:",
"rationale": "let",
"steps": [
{
@@ -4389,7 +4389,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "Encoder bind groups alias a writable resource(encoder, pipeline)\n if any writable buffer binding range overlaps with any other binding range of the same buffer,\n or any writable texture binding overlaps in texture subresources with any other texture binding\n (which may use the same or a different GPUTextureView
object). \n Arguments:
\nGPUBindingCommandsMixin
encoder\n Encoder whose bind groups are being validated.
\nGPUPipelineBase
pipeline\n Pipeline to validate encoders bind groups are compatible with.
\nDevice timeline steps:
", + "html": "For each stage in [VERTEX
, FRAGMENT
, COMPUTE
]:",
"rationale": "let",
"steps": [
{
@@ -4399,7 +4399,7 @@
"html": "Let textureViews be a list of (GPUTextureView
, boolean
) pairs,\nwhere the latter indicates whether the resource was used as writable.
GPUTextureView
object). \n Arguments:
\nGPUBindingCommandsMixin
encoder\n Encoder whose bind groups are being validated.
\nGPUPipelineBase
pipeline\n Pipeline to validate encoders bind groups are compatible with.
\nDevice timeline steps:
", + "html": "For each pair of (GPUIndex32
bindGroupIndex, GPUBindGroupLayout
bindGroupLayout) in pipeline.[[layout]]
.[[bindGroupLayouts]]
:",
"rationale": "let",
"steps": [
{
@@ -4412,14 +4412,14 @@
"html": "Let bufferRanges be the bound buffer ranges of bindGroup,\ngiven dynamic offsets encoder.[[dynamic_offsets]]
[bindGroupIndex]
GPUTextureView
object). \n Arguments:
\nGPUBindingCommandsMixin
encoder\n Encoder whose bind groups are being validated.
\nGPUPipelineBase
pipeline\n Pipeline to validate encoders bind groups are compatible with.
\nDevice timeline steps:
", + "html": "For each (GPUBindGroupLayoutEntry
bindGroupLayoutEntry, GPUBufferBinding
resource) in bufferRanges, in which bindGroupLayoutEntry.visibility
contains stage:",
"rationale": "let",
"steps": [
{
"html": "Let resourceWritable be (bindGroupLayoutEntry.buffer
.type
== \"storage\"
).
GPUTextureView
object). \n Arguments:
\nGPUBindingCommandsMixin
encoder\n Encoder whose bind groups are being validated.
\nGPUPipelineBase
pipeline\n Pipeline to validate encoders bind groups are compatible with.
\nDevice timeline steps:
", + "html": "For each pair (GPUBufferBinding
pastResource, boolean
pastResourceWritable) in bufferBindings:",
"rationale": "if",
"steps": [
{
@@ -4433,7 +4433,7 @@
]
},
{
- "html": "Encoder bind groups alias a writable resource(encoder, pipeline)\n if any writable buffer binding range overlaps with any other binding range of the same buffer,\n or any writable texture binding overlaps in texture subresources with any other texture binding\n (which may use the same or a different GPUTextureView
object). \n Arguments:
\nGPUBindingCommandsMixin
encoder\n Encoder whose bind groups are being validated.
\nGPUPipelineBase
pipeline\n Pipeline to validate encoders bind groups are compatible with.
\nDevice timeline steps:
", + "html": "For eachGPUBindGroupLayoutEntry
bindGroupLayoutEntry in bindGroupLayoutEntries, and corresponding GPUTextureView
resource in bindGroup, in which bindGroupLayoutEntry.visibility
contains stage:",
"rationale": "let",
"steps": [
{
@@ -4443,7 +4443,7 @@
"html": "If bindGroupLayoutEntry.storageTexture
is not provided, continue.
GPUTextureView
object). \n Arguments:
\nGPUBindingCommandsMixin
encoder\n Encoder whose bind groups are being validated.
\nGPUPipelineBase
pipeline\n Pipeline to validate encoders bind groups are compatible with.
\nDevice timeline steps:
", + "html": "For each pair (GPUTextureView
pastResource, boolean
pastResourceWritable) in textureViews,",
"rationale": "if",
"steps": [
{
@@ -4719,14 +4719,14 @@
"html": "this.colorAttachments
.length must be ≤ device.[[limits]]
.maxColorAttachments
.
Given a GPUDevice
device and GPURenderPassDescriptor
this, the following validation rules apply:
null
colorAttachment in this.colorAttachments
:",
"rationale": "if",
"steps": [
{
"html": "colorAttachment.view
must be valid to use with device.
Given a GPUDevice
device and GPURenderPassDescriptor
this, the following validation rules apply:
resolveTarget
is provided:",
"rationale": "resolve",
"steps": [
{
@@ -4778,7 +4778,7 @@
"html": "Let formats be an empty list<GPUTextureFormat
?>
Arguments:
\nGPUDevice
device
sequence<GPURenderPassColorAttachment
?> colorAttachments
Device timeline steps:
", + "html": "For each colorAttachment in colorAttachments:", "rationale": "if", "steps": [ { @@ -4851,7 +4851,7 @@ "html": "Let total be 0.
" }, { - "html": "Calculating color attachment bytes per sample(formats) \nArguments:
\nsequence<GPUTextureFormat
?> formats
Returns: GPUSize32
Let layout be a new GPURenderPassLayout
object.
Arguments:
\nGPURenderPassDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "For each colorAttachment in descriptor.colorAttachments
:",
"rationale": "if",
"steps": [
{
- "html": "derive render targets layout from pass \n Arguments:
\nGPURenderPassDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "If colorAttachment is notnull
:",
"rationale": "set",
"steps": [
{
@@ -4902,7 +4902,7 @@
]
},
{
- "html": "derive render targets layout from pass \n Arguments:
\nGPURenderPassDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "Otherwise:", "rationale": "append", "steps": [ { @@ -4916,7 +4916,7 @@ "html": "Let depthStencilAttachment be descriptor.depthStencilAttachment
,\nor null
if not provided.
Arguments:
\nGPURenderPassDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "If depthStencilAttachment is notnull
:",
"rationale": "let",
"steps": [
{
@@ -4948,7 +4948,7 @@
"html": "Set layout.sampleCount
to descriptor.multisample
.count
.
Arguments:
\nGPURenderPipelineDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "If descriptor.depthStencil
is provided:",
"rationale": "set",
"steps": [
{
@@ -4957,11 +4957,11 @@
]
},
{
- "html": "derive render targets layout from pipeline \n Arguments:
\nGPURenderPipelineDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "If descriptor.fragment
is provided:",
"rationale": "for",
"steps": [
{
- "html": "derive render targets layout from pipeline \n Arguments:
\nGPURenderPipelineDescriptor
descriptor
Returns: GPURenderPassLayout
Device timeline steps:
", + "html": "For each colorTarget in descriptor.fragment
.targets
:",
"rationale": "append",
"steps": [
{
@@ -5154,7 +5154,7 @@
"html": "Append command to encoder.[[commands]]
.
GPURenderCommandsMixin
encoder which\n issues the steps of a GPU Command command with RenderState renderState, run the\n following device timeline steps:",
+ "html": "When command is executed as part of a GPUCommandBuffer
commandBuffer:",
"rationale": "issue",
"steps": [
{
@@ -5268,7 +5268,7 @@
"html": "If any of the following requirements are unmet, invalidate this and stop.
\nslot must be < this.[[device]]
.[[limits]]
.maxVertexBuffers
.
offset must be a multiple of 4.
\noffset + size must be ≤ bufferSize.
\nParameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
slot \n | GPUIndex32 \n | ✘\n | ✘\n | The vertex buffer slot to set the vertex buffer for. \n |
buffer \n | GPUBuffer? \n | ✔\n | ✘\n | Buffer containing vertex data to use for subsequent drawing commands. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into buffer where the vertex data begins. Defaults to 0 . \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the vertex data in buffer. Defaults to the size of the buffer minus the offset. \n |
null
:",
"rationale": "remove",
"steps": [
{
@@ -5280,7 +5280,7 @@
],
"additional": [
{
- "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
slot \n | GPUIndex32 \n | ✘\n | ✘\n | The vertex buffer slot to set the vertex buffer for. \n |
buffer \n | GPUBuffer? \n | ✔\n | ✘\n | Buffer containing vertex data to use for subsequent drawing commands. \n |
offset \n | GPUSize64 \n | ✘\n | ✔\n | Offset in bytes into buffer where the vertex data begins. Defaults to 0 . \n |
size \n | GPUSize64 \n | ✘\n | ✔\n | Size in bytes of the vertex data in buffer. Defaults to the size of the buffer minus the offset. \n |
Validate the encoder state of this. If it returns false, stop.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
vertexCount \n | GPUSize32 \n | ✘\n | ✘\n | The number of vertices to draw. \n |
instanceCount \n | GPUSize32 \n | ✘\n | ✔\n | The number of instances to draw. \n |
firstVertex \n | GPUSize32 \n | ✘\n | ✔\n | Offset into the vertex buffers, in vertices, to begin drawing from. \n |
firstInstance \n | GPUSize32 \n | ✘\n | ✔\n | First instance to draw. \n |
All of the requirements in the following steps must be met.\nIf any are unmet, invalidate this and stop.
\nLet buffers be this.[[pipeline]]
.[[descriptor]]
.vertex
.buffers
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
vertexCount \n | GPUSize32 \n | ✘\n | ✘\n | The number of vertices to draw. \n |
instanceCount \n | GPUSize32 \n | ✘\n | ✔\n | The number of instances to draw. \n |
firstVertex \n | GPUSize32 \n | ✘\n | ✔\n | Offset into the vertex buffers, in vertices, to begin drawing from. \n |
firstInstance \n | GPUSize32 \n | ✘\n | ✔\n | First instance to draw. \n |
GPUIndex32
slot from 0
to buffers.length (non-inclusive):",
"rationale": "if",
"steps": [
{
@@ -5351,7 +5351,7 @@
"html": "Let lastStride be the maximum value of\n(attribute.offset
+ sizeof(attribute.format
))\nover each attribute in attributes, or 0 if attributes is empty.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
vertexCount \n | GPUSize32 \n | ✘\n | ✘\n | The number of vertices to draw. \n |
instanceCount \n | GPUSize32 \n | ✘\n | ✔\n | The number of instances to draw. \n |
firstVertex \n | GPUSize32 \n | ✘\n | ✔\n | Offset into the vertex buffers, in vertices, to begin drawing from. \n |
firstInstance \n | GPUSize32 \n | ✘\n | ✔\n | First instance to draw. \n |
stepMode
:",
"rationale": ".switch",
"steps": [
{
@@ -5554,7 +5554,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To determine if it’s valid to draw with GPURenderCommandsMixin
encoder,\n run the following device timeline steps:",
+ "html": "Validate maxBindGroupsPlusVertexBuffers
:",
"rationale": "let",
"steps": [
{
@@ -5851,14 +5851,14 @@
"html": "If any of the following conditions are unsatisfied, invalidate this and stop.
\nFor each bundle in bundles:
\nbundle must be valid to use with this.
\nthis.[[layout]]
must equal bundle.[[layout]]
.
If this.[[depthReadOnly]]
is true, bundle.[[depthReadOnly]]
must be true.
If this.[[stencilReadOnly]]
is true, bundle.[[stencilReadOnly]]
must be true.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
bundles \n | sequence<GPURenderBundle> \n | ✘\n | ✘\n | List of render bundles to execute. \n |
Increment this.[[drawCount]]
by bundle.[[drawCount]]
.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
bundles \n | sequence<GPURenderBundle> \n | ✘\n | ✘\n | List of render bundles to execute. \n |
Set this.[[state]]
to \"ended\".
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPURenderBundleDescriptor \n | ✘\n | ✔\n | \n |
false
, then:",
"rationale": "generate",
"steps": [
{
@@ -6105,18 +6105,18 @@
"html": "Assert that dstBlockOriginX, dstBlockOriginY, blockColumns, and blockRows are integers.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | The texture subresource and origin to write to. \n |
data \n | AllowSharedBufferSource \n | ✘\n | ✘\n | Data to write into destination. \n |
dataLayout \n | GPUImageDataLayout \n | ✘\n | ✘\n | Layout of the content in data. \n |
size \n | GPUExtent3D \n | ✘\n | ✘\n | Extents of the content to write from data to destination. \n |
Let dstSubregion be texture copy sub-region (z + dstOrigin.z) of destination.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | The texture subresource and origin to write to. \n |
data \n | AllowSharedBufferSource \n | ✘\n | ✘\n | Data to write into destination. \n |
dataLayout \n | GPUImageDataLayout \n | ✘\n | ✘\n | Layout of the content in data. \n |
size \n | GPUExtent3D \n | ✘\n | ✘\n | Extents of the content to write from data to destination. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
destination \n | GPUImageCopyTexture \n | ✘\n | ✘\n | The texture subresource and origin to write to. \n |
data \n | AllowSharedBufferSource \n | ✘\n | ✘\n | Data to write into destination. \n |
dataLayout \n | GPUImageDataLayout \n | ✘\n | ✘\n | Layout of the content in data. \n |
size \n | GPUExtent3D \n | ✘\n | ✘\n | Extents of the content to write from data to destination. \n |
Let dstSubregion be texture copy sub-region (dstOrigin.z) of destination.
" }, { - "html": "Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyExternalImage \n | ✘\n | ✘\n | source image and origin to copy to destination. \n |
destination \n | GPUImageCopyTextureTagged \n | ✘\n | ✘\n | The texture subresource and origin to write to, and its encoding metadata. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | Extents of the content to write from source to destination. \n |
Let srcY be y if source.flipY
is false
and\n(copySize.height − 1 − y) otherwise.
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
source \n | GPUImageCopyExternalImage \n | ✘\n | ✘\n | source image and origin to copy to destination. \n |
destination \n | GPUImageCopyTextureTagged \n | ✘\n | ✘\n | The texture subresource and origin to write to, and its encoding metadata. \n |
copySize \n | GPUExtent3D \n | ✘\n | ✘\n | Extents of the content to write from source to destination. \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
commandBuffers \n | sequence<GPUCommandBuffer> \n | ✘\n | ✘\n | \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
commandBuffers \n | sequence<GPUCommandBuffer> \n | ✘\n | ✘\n | \n |
Parameter \n | Type \n | Nullable \n | Optional \n | Description \n |
---|---|---|---|---|
descriptor \n | GPUQuerySetDescriptor \n | ✘\n | ✘\n | Description of the GPUQuerySet to create. \n |
type
is \"timestamp\"
,\nbut \"timestamp-query\"
is not enabled for this:",
"rationale": "throw",
"steps": [
{
@@ -6517,7 +6517,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To get a copy of the image contents of a context: \n Arguments:
\ncontext: the GPUCanvasContext
Returns: image contents
\nContent timeline steps:
", + "html": "If context.[[configuration]]
is null
:",
"rationale": "return",
"steps": [
{
@@ -6535,7 +6535,7 @@
"html": "Let alphaMode be context.[[configuration]]
.alphaMode
.
Arguments:
\ncontext: the GPUCanvasContext
Returns: image contents
\nContent timeline steps:
", + "html": "\"opaque\"
:\n Tag snapshot with alphaMode.
\nArguments:
\ncontext: the GPUCanvasContext
Returns: image contents
\nContent timeline steps:
", + "html": "", "rationale": "clear", "steps": [ { @@ -6591,7 +6591,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "To Expire the current texture of aGPUCanvasContext
context, run\n the following content timeline steps:",
+ "html": "If context.[[currentTexture]]
is not null
:",
"rationale": "call",
"steps": [
{
@@ -6648,7 +6648,7 @@
"html": "Let configuration be context.[[configuration]]
HTMLCanvasElement
or OffscreenCanvas
canvas with a GPUCanvasContext
context has its width
or height
attributes set, update the canvas size by running the following content timeline steps:",
+ "html": "If configuration is not null
:",
"rationale": "set",
"steps": [
{
@@ -6728,7 +6728,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The current error scope for a GPUError
error and GPUDevice
device is determined by issuing the following steps to the device timeline of device: \n Device timeline steps:
", + "html": "If error is an instance of:", "rationale": ".switch", "steps": [ { @@ -6754,7 +6754,7 @@ "html": "Let scope be the last item of device.[[errorScopeStack]]
.
GPUError
error and GPUDevice
device is determined by issuing the following steps to the device timeline of device: \n Device timeline steps:
", + "html": "While scope is notundefined
:",
"rationale": "if",
"steps": [
{
@@ -6783,7 +6783,7 @@
"html": "Let scope be the current error scope for error and device.
" }, { - "html": "To dispatch an errorGPUError
error on GPUDevice
device, run the following device timeline steps: \n undefined
:",
"rationale": "append",
"steps": [
{
@@ -6806,7 +6806,7 @@
"rationale": "if",
"steps": [
{
- "html": "To dispatch an error GPUError
error on GPUDevice
device, run the following device timeline steps: \n If the user agent chooses, queue a global task for GPUDevice device with the following steps:
\nLet workgroupSize be the computed workgroup size for computeStage.entryPoint
after\napplying computeStage.constants
to computeStage.module
.
Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
[0, dispatchCall.workgroupCountX
]
:",
"rationale": "for",
"steps": [
{
- "html": "compute(descriptor, drawCall, state) \n Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
[0, dispatchCall.workgroupCountY
]
:",
"rationale": "for",
"steps": [
{
- "html": "compute(descriptor, drawCall, state) \n Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
[0, dispatchCall.workgroupCountZ
]
:",
"rationale": "for",
"steps": [
{
- "html": "compute(descriptor, drawCall, state) \n Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
[0, workgroupSize.x
]
:",
"rationale": "for",
"steps": [
{
- "html": "compute(descriptor, drawCall, state) \n Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
[0, workgroupSize.y
]
:",
"rationale": "for",
"steps": [
{
- "html": "compute(descriptor, drawCall, state) \n Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
[0, workgroupSize.y
]
:",
"rationale": "let",
"steps": [
{
@@ -6965,7 +6965,7 @@
]
},
{
- "html": "compute(descriptor, drawCall, state) \n Arguments:
\ndescriptor: Description of the current GPUComputePipeline
.
dispatchCall: The dispatch call parameters. May come from function arguments or an INDIRECT
buffer.
Let vertexIndexList be an empty list of indices.
" }, { - "html": "resolve indices(drawCall, state) \nArguments:
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Returns: list of integer indices.
", + "html": "If drawCall is an indexed draw call:", "rationale": "initialize", "steps": [ { "html": "Initialize the vertexIndexList with drawCall.indexCount integers.
" }, { - "html": "resolve indices(drawCall, state) \nArguments:
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Returns: list of integer indices.
", + "html": "For i in range 0 .. drawCall.indexCount (non-inclusive):", "rationale": "let", "steps": [ { @@ -7044,7 +7044,7 @@ ] }, { - "html": "resolve indices(drawCall, state) \nArguments:
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Returns: list of integer indices.
", + "html": "Otherwise:", "rationale": "initialize", "steps": [ { @@ -7067,7 +7067,7 @@ "rationale": ".algorithm", "steps": [ { - "html": "fetch index(i, buffer, offset, format) \nArguments:
\ni: Index of a vertex index to fetch.
\nstate: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Returns: unsigned integer or \"out of bounds\"
[[index_format]]
:",
"rationale": ".switch",
"steps": [
{
@@ -7103,7 +7103,7 @@
"html": "Let instanceIndex be rawInstanceIndex + drawCall.firstInstance.
" }, { - "html": "process vertices(vertexIndexList, drawCall, desc, state) \nArguments:
\nvertexIndexList: List of vertex indices to process (mutable, passed by reference).
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
desc: The descriptor of type GPUVertexState
.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Each vertex vertexIndex in the vertexIndexList,\n in each instance of index rawInstanceIndex, is processed independently.\n The rawInstanceIndex is in range from 0 to drawCall.instanceCount - 1, inclusive.\n This processing happens in parallel, and any side effects, such as\n writes into GPUBufferBindingType.\"storage\"
bindings,\n may happen in any order.
null
vertexBufferLayout in the list of desc.buffers
:",
"rationale": "let",
"steps": [
{
@@ -7113,7 +7113,7 @@
"html": "Let vertexBuffer, vertexBufferOffset, and vertexBufferBindingSize be the\nbuffer, offset, and size at slot i of state.[[vertex_buffers]]
.
Arguments:
\nvertexIndexList: List of vertex indices to process (mutable, passed by reference).
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
desc: The descriptor of type GPUVertexState
.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Each vertex vertexIndex in the vertexIndexList,\n in each instance of index rawInstanceIndex, is processed independently.\n The rawInstanceIndex is in range from 0 to drawCall.instanceCount - 1, inclusive.\n This processing happens in parallel, and any side effects, such as\n writes into GPUBufferBindingType.\"storage\"
bindings,\n may happen in any order.
stepMode
:",
"rationale": ".switch",
"steps": [
{
@@ -7132,7 +7132,7 @@
]
},
{
- "html": "process vertices(vertexIndexList, drawCall, desc, state) \n Arguments:
\nvertexIndexList: List of vertex indices to process (mutable, passed by reference).
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
desc: The descriptor of type GPUVertexState
.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Each vertex vertexIndex in the vertexIndexList,\n in each instance of index rawInstanceIndex, is processed independently.\n The rawInstanceIndex is in range from 0 to drawCall.instanceCount - 1, inclusive.\n This processing happens in parallel, and any side effects, such as\n writes into GPUBufferBindingType.\"storage\"
bindings,\n may happen in any order.
attributes
:",
"rationale": "let",
"steps": [
{
@@ -7158,11 +7158,11 @@
]
},
{
- "html": "process vertices(vertexIndexList, drawCall, desc, state) \n Arguments:
\nvertexIndexList: List of vertex indices to process (mutable, passed by reference).
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
desc: The descriptor of type GPUVertexState
.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Each vertex vertexIndex in the vertexIndexList,\n in each instance of index rawInstanceIndex, is processed independently.\n The rawInstanceIndex is in range from 0 to drawCall.instanceCount - 1, inclusive.\n This processing happens in parallel, and any side effects, such as\n writes into GPUBufferBindingType.\"storage\"
bindings,\n may happen in any order.
GPUBindGroup
group at index in state.[[bind_groups]]
:",
"rationale": "for",
"steps": [
{
- "html": "process vertices(vertexIndexList, drawCall, desc, state) \n Arguments:
\nvertexIndexList: List of vertex indices to process (mutable, passed by reference).
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
desc: The descriptor of type GPUVertexState
.
state: The snapshot of the GPURenderCommandsMixin
state at the time of the draw call.
Each vertex vertexIndex in the vertexIndexList,\n in each instance of index rawInstanceIndex, is processed independently.\n The rawInstanceIndex is in range from 0 to drawCall.instanceCount - 1, inclusive.\n This processing happens in parallel, and any side effects, such as\n writes into GPUBufferBindingType.\"storage\"
bindings,\n may happen in any order.
GPUBindingResource
in the bind group:",
"rationale": "let",
"steps": [
{
@@ -7193,7 +7193,7 @@
"html": "First, if the primitive topology is a strip, (which means that desc.stripIndexFormat
is not undefined)\nand the drawCall is indexed, the vertexIndexList is split into\nsub-lists using the maximum value of desc.stripIndexFormat
as a separator.
Example: a vertexIndexList with values [1, 2, 65535, 4, 5, 6]
of type \"uint16\"
will be split in sub-lists [1, 2]
and [4, 5, 6]
.
Arguments:
\nvertexIndexList: List of vertex indices to process.
\ndrawCall: The draw call parameters. May come from function arguments or an INDIRECT
buffer.
desc: The descriptor of type GPUPrimitiveState
.
For each instance, the primitives get assembled from the vertices that have been\n processed by the shaders, based on the vertexIndexList.
", + "html": "For each of the sub-lists vl, primitive generation is done according to the desc.topology
:",
"rationale": ".switch",
"steps": [
{
@@ -7260,7 +7260,7 @@
"html": "Let rasterizationPoints be the list of points, each having its attributes (divisor(p)
, framebufferCoords(n)
, depth(n)
, etc.) interpolated according to its position on the\nprimitive, using the same interpolation as § 23.2.4 Primitive Clipping. If the attribute is\nuser-defined (not a built-in output value) then the interpolation type specified by\nthe @interpolate WGSL attribute is used.
Arguments:
\nprimitiveList: List of primitives to rasterize.
\nstate: The active RenderState.
\nReturns: list of RasterizationPoint.
\nEach primitive in primitiveList is processed independently.\n However, the order of primitives affects later stages, such as depth/stencil operations and pixel writes.
", + "html": "Proceed with a specific rasterization algorithm,\ndepending onprimitive
.topology
:",
"rationale": ".switch",
"steps": [
{
@@ -7326,7 +7326,7 @@
"html": "Let v(i) be the framebuffer coordinates for the clipped vertex number i (starting with 1)\nin a rasterized polygon of n vertices.
" }, { - "html": "rasterize polygon() \nArguments:
\nReturns: list of RasterizationPoint.
", + "html": "The sign of area is interpreted based on theprimitive
.frontFace
:",
"rationale": ".switch",
"steps": [
{
@@ -7345,7 +7345,7 @@
]
},
{
- "html": "rasterize polygon() \n Arguments:
\nReturns: list of RasterizationPoint.
", + "html": "Cull based onprimitive
.cullMode
:",
"rationale": ".switch",
"steps": [
{
@@ -7368,7 +7368,7 @@
]
},
{
- "html": "rasterize polygon() \n Arguments:
\nReturns: list of RasterizationPoint.
", + "html": "Determine a set of fragments inside the polygon in framebuffer space -\nthese are locations scheduled for the per-fragment operations.\nThis operation is known as \"point sampling\".\nThe logic is based on descriptor.multisample
:",
"rationale": ".switch",
"steps": [
{
@@ -7387,7 +7387,7 @@
]
},
{
- "html": "rasterize polygon() \n Arguments:
\nReturns: list of RasterizationPoint.
", + "html": "For each produced fragment of type FragmentDestination:", "rationale": "let", "steps": [ { @@ -7431,11 +7431,11 @@ "html": "Set fragment.depth to rp.depth.
" }, { - "html": "process fragment(rp, desc, state) \nArguments:
\nrp: The RasterizationPoint, produced by § 23.2.5 Rasterization.
\ndesc: The descriptor of type GPUFragmentState
.
state: The active RenderState.
\nReturns: Fragment or null
.
null
:",
"rationale": "set",
"steps": [
{
- "html": "process fragment(rp, desc, state) \n Arguments:
\nrp: The RasterizationPoint, produced by § 23.2.5 Rasterization.
\ndesc: The descriptor of type GPUFragmentState
.
state: The active RenderState.
\nReturns: Fragment or null
.
Arguments:
\nrp: The RasterizationPoint, produced by § 23.2.5 Rasterization.
\ndesc: The descriptor of type GPUFragmentState
.
state: The active RenderState.
\nReturns: Fragment or null
.
Set fragment.colors to the user-specified shader stage output values from the shader.
" }, { - "html": "process fragment(rp, desc, state) \nArguments:
\nrp: The RasterizationPoint, produced by § 23.2.5 Rasterization.
\ndesc: The descriptor of type GPUFragmentState
.
state: The active RenderState.
\nReturns: Fragment or null
.
Arguments:
\nrp: The RasterizationPoint, produced by § 23.2.5 Rasterization.
\ndesc: The descriptor of type GPUFragmentState
.
state: The active RenderState.
\nReturns: Fragment or null
.
frag_depth
builtin is produced by the shader as value:",
"rationale": "let",
"steps": [
{
@@ -7501,7 +7501,7 @@
]
},
{
- "html": "process fragment(rp, desc, state) \n Arguments:
\nrp: The RasterizationPoint, produced by § 23.2.5 Rasterization.
\ndesc: The descriptor of type GPUFragmentState
.
state: The active RenderState.
\nReturns: Fragment or null
.
sample_mask
builtin is produced by the shader as value:",
"rationale": "set",
"steps": [
{
diff --git a/tr/algorithms/webnn.json b/tr/algorithms/webnn.json
index 05c97a746c16..55b52e81dde8 100644
--- a/tr/algorithms/webnn.json
+++ b/tr/algorithms/webnn.json
@@ -741,7 +741,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The argMin(input, axis, options)
method steps are:",
+ "html": "Let output be the result of running the create argMin/argMax operation given \"argMin\", input, axis and options.",
"rationale": "if",
"steps": [
{
@@ -761,7 +761,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The argMax(input, axis, options)
method steps are:",
+ "html": "Let output be the result of running the create argMin/argMax operation given \"argMax\", input, axis and options.",
"rationale": "if",
"steps": [
{
@@ -1743,7 +1743,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The add(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"add\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1763,7 +1763,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The sub(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"sub\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1783,7 +1783,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The mul(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"mul\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1803,7 +1803,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The div(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"div\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1823,7 +1823,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The max(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"max\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1843,7 +1843,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The min(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"min\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1863,7 +1863,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The pow(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise binary operation given \"pow\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1959,7 +1959,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The equal(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise logical operation given \"equal\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1979,7 +1979,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The greater(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise logical operation given \"greater\", a and b.",
"rationale": "if",
"steps": [
{
@@ -1999,7 +1999,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The greaterOrEqual(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise logical operation given \"greaterOrEqual\", a and b.",
"rationale": "if",
"steps": [
{
@@ -2019,7 +2019,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The lesser(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise logical operation given \"lesser\", a and b.",
"rationale": "if",
"steps": [
{
@@ -2039,7 +2039,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The lesserOrEqual(a, b)
method steps are:",
+ "html": "Let output be the result of running the create element-wise logical operation given \"lesserOrEqual\", a and b.",
"rationale": "if",
"steps": [
{
@@ -2059,7 +2059,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The logicalNot(a)
method steps are:",
+ "html": "Let output be the result of running the create element-wise logical operation given \"logicalNot\" and a.",
"rationale": "if",
"steps": [
{
@@ -2122,7 +2122,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The abs(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"abs\", input, and « \"float32\"
, \"float16\"
, \"int32\"
, \"int8\"
».",
"rationale": "if",
"steps": [
{
@@ -2142,7 +2142,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The ceil(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"ceil\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2162,7 +2162,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The cos(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"cos\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2182,7 +2182,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The erf(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"erf\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2202,7 +2202,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The exp(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"exp\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2222,7 +2222,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The floor(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"floor\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2242,7 +2242,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The identity(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"identity\" and input.",
"rationale": "if",
"steps": [
{
@@ -2262,7 +2262,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The log(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"log\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2282,7 +2282,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The neg(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"neg\", input, and « \"float32\"
, \"float16\"
, \"int32\"
, \"int8\"
».",
"rationale": "if",
"steps": [
{
@@ -2302,7 +2302,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reciprocal(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"reciprocal\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2322,7 +2322,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The sin(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"sin\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2342,7 +2342,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The sqrt(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"sqrt\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -2362,7 +2362,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The tan(input)
method steps are:",
+ "html": "Let output be the result of running the create element-wise unary operation given \"tan\", input, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4221,7 +4221,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The averagePool2d(input, options)
method steps are:",
+ "html": "Let output be the result of running the create pooling operation given \"averagePool2d\", input, options, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4241,7 +4241,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The l2Pool2d(input, options)
method steps are:",
+ "html": "Let output be the result of running the create pooling operation given \"l2Pool2d\", input, options, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4261,7 +4261,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The maxPool2d(input, options)
method steps are:",
+ "html": "Let output be the result of running the create pooling operation given \"maxPool2d\", input and options.",
"rationale": "if",
"steps": [
{
@@ -4449,7 +4449,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceL1(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceL1\", input, options, and « \"float32\"
, \"float16\"
, \"int32\"
, \"uint32\"
».",
"rationale": "if",
"steps": [
{
@@ -4469,7 +4469,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceL2(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceL2\", input, options, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4489,7 +4489,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceLogSum(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceLogSum\", input, options, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4509,7 +4509,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceLogSumExp(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceLogSumExp\", input, options, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4529,7 +4529,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceMax(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceMax\", input and options.",
"rationale": "if",
"steps": [
{
@@ -4549,7 +4549,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceMean(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceMean\", input, options, and « \"float32\"
, \"float16\"
».",
"rationale": "if",
"steps": [
{
@@ -4569,7 +4569,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceMin(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceMin\", input and options.",
"rationale": "if",
"steps": [
{
@@ -4589,7 +4589,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceProduct(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceProduct\", input, options, and « \"float32\"
, \"float16\"
, \"int32\"
, \"uint32\"
».",
"rationale": "if",
"steps": [
{
@@ -4609,7 +4609,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceSum(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceSum\", input, options, and « \"float32\"
, \"float16\"
, \"int32\"
, \"uint32\"
».",
"rationale": "if",
"steps": [
{
@@ -4629,7 +4629,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The reduceSumSquare(input, options)
method steps are:",
+ "html": "Let output be the result of running the create reduce operation given \"reduceSumSquare\", input, options, and « \"float32\"
, \"float16\"
, \"int32\"
, \"uint32\"
».",
"rationale": "if",
"steps": [
{
@@ -5502,8 +5502,8 @@
]
},
{
- "name": "ConvertToFloat",
- "href": "https://www.w3.org/TR/webnn/#converttofloat",
+ "name": "cast",
+ "href": "https://www.w3.org/TR/webnn/#cast",
"html": "The ConvertToFloat(x, bitLength) steps are:",
"rationale": ".algorithm",
"steps": [
@@ -5511,7 +5511,7 @@
"html": "If x is NaN, then return NaN.
" }, { - "html": "The ConvertToFloat(x, bitLength) steps are:", + "html": "Switch on bitLength:", "rationale": ".switch", "steps": [ { @@ -5519,7 +5519,7 @@ "steps": [ { "case": "32", - "html": "The ConvertToFloat(x, bitLength) steps are:", + "html": "", "rationale": "let", "steps": [ { @@ -5535,7 +5535,7 @@ }, { "case": "16", - "html": "The ConvertToFloat(x, bitLength) steps are:", + "html": "", "rationale": "let", "steps": [ { @@ -5571,13 +5571,13 @@ ] }, { - "name": "ConvertToInt", - "href": "https://www.w3.org/TR/webnn/#converttoint", + "name": "cast", + "href": "https://www.w3.org/TR/webnn/#cast", "html": "The ConvertToInt(x, bitLength, signedness) steps are:", "rationale": ".algorithm", "steps": [ { - "html": "The ConvertToInt(x, bitLength, signedness) steps are:", + "html": "If signedness is \"unsigned\", then:", "rationale": "let", "steps": [ { @@ -5589,7 +5589,7 @@ ] }, { - "html": "The ConvertToInt(x, bitLength, signedness) steps are:", + "html": "Otherwise:", "rationale": "let", "steps": [ { diff --git a/tr/algorithms/webrtc.json b/tr/algorithms/webrtc.json index dbfcea93d726..d17fe3b12593 100644 --- a/tr/algorithms/webrtc.json +++ b/tr/algorithms/webrtc.json @@ -19,7 +19,7 @@ { "name": "RTCPeerConnection/[[DocumentOrigin]]", "href": "https://www.w3.org/TR/webrtc/#dfn-documentorigin", - "html": "Let connection have a\n [[DocumentOrigin]] internal slot, initialized to\n the relevant settings object's\n origin.", + "html": "When theRTCPeerConnection.constructor()
is\n invoked, the user agent MUST run the following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -35,7 +35,7 @@
"html": "Let configuration be the\n method's first argument."
},
{
- "html": "Let connection have a\n [[DocumentOrigin]] internal slot, initialized to\n the relevant settings object's\n origin.",
+ "html": "If the certificates
value in\n configuration is non-empty, run the following\n steps for each certificate in certificates:",
"rationale": "if",
"steps": [
{
@@ -1010,7 +1010,7 @@
{
"name": "ICE transports setting",
"href": "https://www.w3.org/TR/webrtc/#ice-transports-setting",
- "html": "Set the ICE Agent's ICE transports setting to the\n value of\n configuration.iceTransportPolicy
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.",
+ "html": "To set a configuration with\n configuration, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -1020,7 +1020,7 @@
"html": "\n Let oldConfig be\n connection.[[Configuration]]
.\n
iceTransportPolicy
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.",
+ "html": "If oldConfig is not null
, run the\n following steps, and if any of them fail, throw\n an InvalidModificationError
:",
"rationale": "if",
"steps": [
{
@@ -1030,7 +1030,7 @@
"html": "\n Let index be 0.\n
" }, { - "html": "Set the ICE Agent's ICE transports setting to the\n value of\n configuration.iceTransportPolicy
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.",
+ "html": "While index is less than the length of\n configuration.certificates
,\n run the following steps:",
"rationale": "if",
"steps": [
{
@@ -1053,7 +1053,7 @@
]
},
{
- "html": "Set the ICE Agent's ICE transports setting to the\n value of\n configuration.iceTransportPolicy
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.",
+ "html": "For each server in\n configuration.iceServers
,\n run the following steps:",
"rationale": "let",
"steps": [
{
@@ -1066,7 +1066,7 @@
"html": "\n If urls is empty, throw a\n SyntaxError
.\n
iceTransportPolicy
.\n As defined in [RFC8829] (section 4.1.18.), if the new ICE transports setting changes the existing setting, no action\n will be taken until the next gathering phase. If a script\n wants this to happen immediately, it should do an ICE\n restart.",
+ "html": "For each url in urls run the\n following steps:",
"rationale": "parse",
"steps": [
{
@@ -1827,14 +1827,14 @@
{
"name": "clear the negotiation-needed flag",
"href": "https://www.w3.org/TR/webrtc/#dfn-clear-the-negotiation-needed-flag",
- "html": "If the result of checking if negotiation is needed is false
,\n clear the negotiation-needed flag by setting\n connection.[[NegotiationNeeded]]
to\n false
, and abort these steps.",
+ "html": "To update the negotiation-needed flag for\n connection, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
"html": "\n If the length of connection.[[Operations]]
\n is not 0
, then set\n connection.[[UpdateNegotiationNeededFlagOnEmptyChain]]
\n to true
, and abort these steps.\n
false
,\n clear the negotiation-needed flag by setting\n connection.[[NegotiationNeeded]]
to\n false
, and abort these steps.",
+ "html": "Queue a task to run the following steps:",
"rationale": "if",
"steps": [
{
@@ -2652,7 +2652,6 @@
{
"name": "RTCRtpSender/[[SenderTrack]]",
"href": "https://www.w3.org/TR/webrtc/#dfn-sendertrack",
- "html": "Let sender have a [[SenderTrack]] internal\n slot initialized to track.",
"rationale": ".algorithm",
"steps": [
{
@@ -2791,7 +2790,6 @@
{
"name": "Read-only parameter",
"href": "https://www.w3.org/TR/webrtc/#dfn-read-only-parameter",
- "html": "[Exposed=Window]\ninterface RTCRtpSender
{\n readonly attribute MediaStreamTrack? track
;\n readonly attribute RTCDtlsTransport
? transport
;\n static RTCRtpCapabilities
? getCapabilities
(DOMString kind);\n Promise<undefined> setParameters
(RTCRtpSendParameters
parameters);\n RTCRtpSendParameters
getParameters
();\n Promise<undefined> replaceTrack
(MediaStreamTrack? withTrack);\n undefined setStreams
(MediaStream... streams);\n Promise<RTCStatsReport
> getStats
();\n};
\n track
of type MediaStreamTrack
, readonly, nullable\n \n The track
attribute is the track that is associated with\n this RTCRtpSender
object. If track
is ended, or if\n the track's output is disabled, i.e. the track is disabled\n and/or muted, the RTCRtpSender
MUST send black frames\n (video) and MUST NOT send (audio). In the case of video, the\n RTCRtpSender
SHOULD send one black frame per second. If\n track
is null
then the RTCRtpSender
does\n not send. On getting, the attribute MUST return the value of\n the [[SenderTrack]]
slot.\n
transport
of type RTCDtlsTransport
, readonly, nullable\n \n The transport
attribute is the transport over which media\n from track
is sent in the form of RTP packets. Prior to\n construction of the RTCDtlsTransport
object, the\n transport
attribute will be null. When bundling is used,\n multiple RTCRtpSender
objects will share one\n transport
and will all send RTP and RTCP over the same\n transport.\n
\n On getting, the attribute MUST return the value of the\n [[SenderTransport]]
slot.\n
getCapabilities
, static\n \n The getCapabilities
()
method returns the most optimistic\n view of the capabilities of the system for sending media of\n the given kind. It does not reserve any resources, ports, or\n other state but is meant to provide a way to discover the\n types of capabilities of the browser including which codecs\n may be supported. User agents MUST support kind\n values of \"audio\"
and \"video\"
. If\n the system has no capabilities corresponding to the value of\n the kind argument, getCapabilities
returns\n null
.\n
\n These capabilities provide generally persistent cross-origin\n information on the device and thus increases the\n fingerprinting surface of the application. In\n privacy-sensitive contexts, browsers can consider mitigations\n such as reporting only a common subset of the capabilities.\n
setParameters
\n \n The setParameters
method updates how track
is encoded\n and transmitted to a remote peer.\n
\n When the setParameters
method is called, the user agent\n MUST run the following steps:\n
\n setParameters
does not cause SDP renegotiation and can\n only be used to change what the media stack is sending or\n receiving within the envelope negotiated by Offer/Answer. The\n attributes in the RTCRtpSendParameters
dictionary are\n designed to not enable this, so attributes like\n cname
that cannot be changed are\n read-only. Other things, like bitrate, are controlled using\n limits such as maxBitrate
, where\n the user agent needs to ensure it does not exceed the maximum\n bitrate specified by maxBitrate
,\n while at the same time making sure it satisfies constraints\n on bitrate specified in other places such as the SDP.\n
getParameters
\n \n The getParameters
()
method returns the RTCRtpSender
\n object's current parameters for how track
is encoded and\n transmitted to a remote RTCRtpReceiver
.\n
\n When getParameters
is called, the user agent MUST run the\n following steps:\n
\n getParameters
may be used with setParameters
to\n change the parameters in the following way:\n
\n After a completed call to setParameters
, subsequent calls\n to getParameters
will return the modified set of\n parameters.\n
replaceTrack
\n \n Attempts to replace the RTCRtpSender
's current track
\n with another track provided (or with a null
\n track), without renegotiation.\n
\n When the replaceTrack
method is invoked, the user agent\n MUST run the following steps:\n
setStreams
\n \n Sets the MediaStream
s to be associated with this sender's\n track.\n
\n When the setStreams
method is invoked, the user agent\n MUST run the following steps:\n
getStats
\n \n Gathers stats for this sender only and reports the result\n asynchronously.\n
\n\n When the getStats
()
method is invoked, the user agent\n MUST run the following steps:\n
[[LastReturnedParameters]]
is\n null
, return a promise rejected with a\n newly created InvalidStateError
."
},
{
- "html": "[Exposed=Window]\ninterface RTCRtpSender
{\n readonly attribute MediaStreamTrack? track
;\n readonly attribute RTCDtlsTransport
? transport
;\n static RTCRtpCapabilities
? getCapabilities
(DOMString kind);\n Promise<undefined> setParameters
(RTCRtpSendParameters
parameters);\n RTCRtpSendParameters
getParameters
();\n Promise<undefined> replaceTrack
(MediaStreamTrack? withTrack);\n undefined setStreams
(MediaStream... streams);\n Promise<RTCStatsReport
> getStats
();\n};
\n track
of type MediaStreamTrack
, readonly, nullable\n \n The track
attribute is the track that is associated with\n this RTCRtpSender
object. If track
is ended, or if\n the track's output is disabled, i.e. the track is disabled\n and/or muted, the RTCRtpSender
MUST send black frames\n (video) and MUST NOT send (audio). In the case of video, the\n RTCRtpSender
SHOULD send one black frame per second. If\n track
is null
then the RTCRtpSender
does\n not send. On getting, the attribute MUST return the value of\n the [[SenderTrack]]
slot.\n
transport
of type RTCDtlsTransport
, readonly, nullable\n \n The transport
attribute is the transport over which media\n from track
is sent in the form of RTP packets. Prior to\n construction of the RTCDtlsTransport
object, the\n transport
attribute will be null. When bundling is used,\n multiple RTCRtpSender
objects will share one\n transport
and will all send RTP and RTCP over the same\n transport.\n
\n On getting, the attribute MUST return the value of the\n [[SenderTransport]]
slot.\n
getCapabilities
, static\n \n The getCapabilities
()
method returns the most optimistic\n view of the capabilities of the system for sending media of\n the given kind. It does not reserve any resources, ports, or\n other state but is meant to provide a way to discover the\n types of capabilities of the browser including which codecs\n may be supported. User agents MUST support kind\n values of \"audio\"
and \"video\"
. If\n the system has no capabilities corresponding to the value of\n the kind argument, getCapabilities
returns\n null
.\n
\n These capabilities provide generally persistent cross-origin\n information on the device and thus increases the\n fingerprinting surface of the application. In\n privacy-sensitive contexts, browsers can consider mitigations\n such as reporting only a common subset of the capabilities.\n
setParameters
\n \n The setParameters
method updates how track
is encoded\n and transmitted to a remote peer.\n
\n When the setParameters
method is called, the user agent\n MUST run the following steps:\n
\n setParameters
does not cause SDP renegotiation and can\n only be used to change what the media stack is sending or\n receiving within the envelope negotiated by Offer/Answer. The\n attributes in the RTCRtpSendParameters
dictionary are\n designed to not enable this, so attributes like\n cname
that cannot be changed are\n read-only. Other things, like bitrate, are controlled using\n limits such as maxBitrate
, where\n the user agent needs to ensure it does not exceed the maximum\n bitrate specified by maxBitrate
,\n while at the same time making sure it satisfies constraints\n on bitrate specified in other places such as the SDP.\n
getParameters
\n \n The getParameters
()
method returns the RTCRtpSender
\n object's current parameters for how track
is encoded and\n transmitted to a remote RTCRtpReceiver
.\n
\n When getParameters
is called, the user agent MUST run the\n following steps:\n
\n getParameters
may be used with setParameters
to\n change the parameters in the following way:\n
\n After a completed call to setParameters
, subsequent calls\n to getParameters
will return the modified set of\n parameters.\n
replaceTrack
\n \n Attempts to replace the RTCRtpSender
's current track
\n with another track provided (or with a null
\n track), without renegotiation.\n
\n When the replaceTrack
method is invoked, the user agent\n MUST run the following steps:\n
setStreams
\n \n Sets the MediaStream
s to be associated with this sender's\n track.\n
\n When the setStreams
method is invoked, the user agent\n MUST run the following steps:\n
getStats
\n \n Gathers stats for this sender only and reports the result\n asynchronously.\n
\n\n When the getStats
()
method is invoked, the user agent\n MUST run the following steps:\n
[Exposed=Window]\ninterface RTCRtpSender
{\n readonly attribute MediaStreamTrack? track
;\n readonly attribute RTCDtlsTransport
? transport
;\n static RTCRtpCapabilities
? getCapabilities
(DOMString kind);\n Promise<undefined> setParameters
(RTCRtpSendParameters
parameters);\n RTCRtpSendParameters
getParameters
();\n Promise<undefined> replaceTrack
(MediaStreamTrack? withTrack);\n undefined setStreams
(MediaStream... streams);\n Promise<RTCStatsReport
> getStats
();\n};
\n track
of type MediaStreamTrack
, readonly, nullable\n \n The track
attribute is the track that is associated with\n this RTCRtpSender
object. If track
is ended, or if\n the track's output is disabled, i.e. the track is disabled\n and/or muted, the RTCRtpSender
MUST send black frames\n (video) and MUST NOT send (audio). In the case of video, the\n RTCRtpSender
SHOULD send one black frame per second. If\n track
is null
then the RTCRtpSender
does\n not send. On getting, the attribute MUST return the value of\n the [[SenderTrack]]
slot.\n
transport
of type RTCDtlsTransport
, readonly, nullable\n \n The transport
attribute is the transport over which media\n from track
is sent in the form of RTP packets. Prior to\n construction of the RTCDtlsTransport
object, the\n transport
attribute will be null. When bundling is used,\n multiple RTCRtpSender
objects will share one\n transport
and will all send RTP and RTCP over the same\n transport.\n
\n On getting, the attribute MUST return the value of the\n [[SenderTransport]]
slot.\n
getCapabilities
, static\n \n The getCapabilities
()
method returns the most optimistic\n view of the capabilities of the system for sending media of\n the given kind. It does not reserve any resources, ports, or\n other state but is meant to provide a way to discover the\n types of capabilities of the browser including which codecs\n may be supported. User agents MUST support kind\n values of \"audio\"
and \"video\"
. If\n the system has no capabilities corresponding to the value of\n the kind argument, getCapabilities
returns\n null
.\n
\n These capabilities provide generally persistent cross-origin\n information on the device and thus increases the\n fingerprinting surface of the application. In\n privacy-sensitive contexts, browsers can consider mitigations\n such as reporting only a common subset of the capabilities.\n
setParameters
\n \n The setParameters
method updates how track
is encoded\n and transmitted to a remote peer.\n
\n When the setParameters
method is called, the user agent\n MUST run the following steps:\n
\n setParameters
does not cause SDP renegotiation and can\n only be used to change what the media stack is sending or\n receiving within the envelope negotiated by Offer/Answer. The\n attributes in the RTCRtpSendParameters
dictionary are\n designed to not enable this, so attributes like\n cname
that cannot be changed are\n read-only. Other things, like bitrate, are controlled using\n limits such as maxBitrate
, where\n the user agent needs to ensure it does not exceed the maximum\n bitrate specified by maxBitrate
,\n while at the same time making sure it satisfies constraints\n on bitrate specified in other places such as the SDP.\n
getParameters
\n \n The getParameters
()
method returns the RTCRtpSender
\n object's current parameters for how track
is encoded and\n transmitted to a remote RTCRtpReceiver
.\n
\n When getParameters
is called, the user agent MUST run the\n following steps:\n
\n getParameters
may be used with setParameters
to\n change the parameters in the following way:\n
\n After a completed call to setParameters
, subsequent calls\n to getParameters
will return the modified set of\n parameters.\n
replaceTrack
\n \n Attempts to replace the RTCRtpSender
's current track
\n with another track provided (or with a null
\n track), without renegotiation.\n
\n When the replaceTrack
method is invoked, the user agent\n MUST run the following steps:\n
setStreams
\n \n Sets the MediaStream
s to be associated with this sender's\n track.\n
\n When the setStreams
method is invoked, the user agent\n MUST run the following steps:\n
getStats
\n \n Gathers stats for this sender only and reports the result\n asynchronously.\n
\n\n When the getStats
()
method is invoked, the user agent\n MUST run the following steps:\n
[[SenderTrack]]
.",
"rationale": "if",
"steps": [
{
- "html": "[Exposed=Window]\ninterface RTCRtpSender
{\n readonly attribute MediaStreamTrack? track
;\n readonly attribute RTCDtlsTransport
? transport
;\n static RTCRtpCapabilities
? getCapabilities
(DOMString kind);\n Promise<undefined> setParameters
(RTCRtpSendParameters
parameters);\n RTCRtpSendParameters
getParameters
();\n Promise<undefined> replaceTrack
(MediaStreamTrack? withTrack);\n undefined setStreams
(MediaStream... streams);\n Promise<RTCStatsReport
> getStats
();\n};
\n track
of type MediaStreamTrack
, readonly, nullable\n \n The track
attribute is the track that is associated with\n this RTCRtpSender
object. If track
is ended, or if\n the track's output is disabled, i.e. the track is disabled\n and/or muted, the RTCRtpSender
MUST send black frames\n (video) and MUST NOT send (audio). In the case of video, the\n RTCRtpSender
SHOULD send one black frame per second. If\n track
is null
then the RTCRtpSender
does\n not send. On getting, the attribute MUST return the value of\n the [[SenderTrack]]
slot.\n
transport
of type RTCDtlsTransport
, readonly, nullable\n \n The transport
attribute is the transport over which media\n from track
is sent in the form of RTP packets. Prior to\n construction of the RTCDtlsTransport
object, the\n transport
attribute will be null. When bundling is used,\n multiple RTCRtpSender
objects will share one\n transport
and will all send RTP and RTCP over the same\n transport.\n
\n On getting, the attribute MUST return the value of the\n [[SenderTransport]]
slot.\n
getCapabilities
, static\n \n The getCapabilities
()
method returns the most optimistic\n view of the capabilities of the system for sending media of\n the given kind. It does not reserve any resources, ports, or\n other state but is meant to provide a way to discover the\n types of capabilities of the browser including which codecs\n may be supported. User agents MUST support kind\n values of \"audio\"
and \"video\"
. If\n the system has no capabilities corresponding to the value of\n the kind argument, getCapabilities
returns\n null
.\n
\n These capabilities provide generally persistent cross-origin\n information on the device and thus increases the\n fingerprinting surface of the application. In\n privacy-sensitive contexts, browsers can consider mitigations\n such as reporting only a common subset of the capabilities.\n
setParameters
\n \n The setParameters
method updates how track
is encoded\n and transmitted to a remote peer.\n
\n When the setParameters
method is called, the user agent\n MUST run the following steps:\n
\n setParameters
does not cause SDP renegotiation and can\n only be used to change what the media stack is sending or\n receiving within the envelope negotiated by Offer/Answer. The\n attributes in the RTCRtpSendParameters
dictionary are\n designed to not enable this, so attributes like\n cname
that cannot be changed are\n read-only. Other things, like bitrate, are controlled using\n limits such as maxBitrate
, where\n the user agent needs to ensure it does not exceed the maximum\n bitrate specified by maxBitrate
,\n while at the same time making sure it satisfies constraints\n on bitrate specified in other places such as the SDP.\n
getParameters
\n \n The getParameters
()
method returns the RTCRtpSender
\n object's current parameters for how track
is encoded and\n transmitted to a remote RTCRtpReceiver
.\n
\n When getParameters
is called, the user agent MUST run the\n following steps:\n
\n getParameters
may be used with setParameters
to\n change the parameters in the following way:\n
\n After a completed call to setParameters
, subsequent calls\n to getParameters
will return the modified set of\n parameters.\n
replaceTrack
\n \n Attempts to replace the RTCRtpSender
's current track
\n with another track provided (or with a null
\n track), without renegotiation.\n
\n When the replaceTrack
method is invoked, the user agent\n MUST run the following steps:\n
setStreams
\n \n Sets the MediaStream
s to be associated with this sender's\n track.\n
\n When the setStreams
method is invoked, the user agent\n MUST run the following steps:\n
getStats
\n \n Gathers stats for this sender only and reports the result\n asynchronously.\n
\n\n When the getStats
()
method is invoked, the user agent\n MUST run the following steps:\n
[Exposed=Window]\ninterface RTCRtpSender
{\n readonly attribute MediaStreamTrack? track
;\n readonly attribute RTCDtlsTransport
? transport
;\n static RTCRtpCapabilities
? getCapabilities
(DOMString kind);\n Promise<undefined> setParameters
(RTCRtpSendParameters
parameters);\n RTCRtpSendParameters
getParameters
();\n Promise<undefined> replaceTrack
(MediaStreamTrack? withTrack);\n undefined setStreams
(MediaStream... streams);\n Promise<RTCStatsReport
> getStats
();\n};
\n track
of type MediaStreamTrack
, readonly, nullable\n \n The track
attribute is the track that is associated with\n this RTCRtpSender
object. If track
is ended, or if\n the track's output is disabled, i.e. the track is disabled\n and/or muted, the RTCRtpSender
MUST send black frames\n (video) and MUST NOT send (audio). In the case of video, the\n RTCRtpSender
SHOULD send one black frame per second. If\n track
is null
then the RTCRtpSender
does\n not send. On getting, the attribute MUST return the value of\n the [[SenderTrack]]
slot.\n
transport
of type RTCDtlsTransport
, readonly, nullable\n \n The transport
attribute is the transport over which media\n from track
is sent in the form of RTP packets. Prior to\n construction of the RTCDtlsTransport
object, the\n transport
attribute will be null. When bundling is used,\n multiple RTCRtpSender
objects will share one\n transport
and will all send RTP and RTCP over the same\n transport.\n
\n On getting, the attribute MUST return the value of the\n [[SenderTransport]]
slot.\n
getCapabilities
, static\n \n The getCapabilities
()
method returns the most optimistic\n view of the capabilities of the system for sending media of\n the given kind. It does not reserve any resources, ports, or\n other state but is meant to provide a way to discover the\n types of capabilities of the browser including which codecs\n may be supported. User agents MUST support kind\n values of \"audio\"
and \"video\"
. If\n the system has no capabilities corresponding to the value of\n the kind argument, getCapabilities
returns\n null
.\n
\n These capabilities provide generally persistent cross-origin\n information on the device and thus increases the\n fingerprinting surface of the application. In\n privacy-sensitive contexts, browsers can consider mitigations\n such as reporting only a common subset of the capabilities.\n
setParameters
\n \n The setParameters
method updates how track
is encoded\n and transmitted to a remote peer.\n
\n When the setParameters
method is called, the user agent\n MUST run the following steps:\n
\n setParameters
does not cause SDP renegotiation and can\n only be used to change what the media stack is sending or\n receiving within the envelope negotiated by Offer/Answer. The\n attributes in the RTCRtpSendParameters
dictionary are\n designed to not enable this, so attributes like\n cname
that cannot be changed are\n read-only. Other things, like bitrate, are controlled using\n limits such as maxBitrate
, where\n the user agent needs to ensure it does not exceed the maximum\n bitrate specified by maxBitrate
,\n while at the same time making sure it satisfies constraints\n on bitrate specified in other places such as the SDP.\n
getParameters
\n \n The getParameters
()
method returns the RTCRtpSender
\n object's current parameters for how track
is encoded and\n transmitted to a remote RTCRtpReceiver
.\n
\n When getParameters
is called, the user agent MUST run the\n following steps:\n
\n getParameters
may be used with setParameters
to\n change the parameters in the following way:\n
\n After a completed call to setParameters
, subsequent calls\n to getParameters
will return the modified set of\n parameters.\n
replaceTrack
\n \n Attempts to replace the RTCRtpSender
's current track
\n with another track provided (or with a null
\n track), without renegotiation.\n
\n When the replaceTrack
method is invoked, the user agent\n MUST run the following steps:\n
setStreams
\n \n Sets the MediaStream
s to be associated with this sender's\n track.\n
\n When the setStreams
method is invoked, the user agent\n MUST run the following steps:\n
getStats
\n \n Gathers stats for this sender only and reports the result\n asynchronously.\n
\n\n When the getStats
()
method is invoked, the user agent\n MUST run the following steps:\n
MediaStreamTrack
object\n [GETUSERMEDIA]. The source of track is a\n remote source provided by receiver. Note\n that the track.id
is\n generated by the user agent and does not map to any track\n IDs on the remote side.",
+ "html": "To create an RTCRtpReceiver with a string,\n kind, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -3117,7 +3115,7 @@
{
"name": "RTCRtpTransceiver/[[Sender]]",
"href": "https://www.w3.org/TR/webrtc/#dfn-sender",
- "html": "Let transceiver have a [[Sender]] internal\n slot, initialized to sender.",
+ "html": "To create an RTCRtpTransceiver with an RTCRtpReceiver
\n object, receiver, RTCRtpSender
object,\n sender, and an RTCRtpTransceiverDirection
value,\n direction, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -3664,7 +3662,7 @@
{
"name": "RTCSctpTransport/[[SctpTransportState]]",
"href": "https://www.w3.org/TR/webrtc/#dfn-sctptransportstate",
- "html": "Let transport have a\n [[SctpTransportState]] internal slot initialized\n to initialState.",
+ "html": "To create an RTCSctpTransport
with an initial\n state, initialState, run the following steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -3748,7 +3746,7 @@
{
"name": "RTCDataChannel/[[ReadyState]]",
"href": "https://www.w3.org/TR/webrtc/#dfn-readystate",
- "html": "Let channel have a [[ReadyState]]\n internal slot initialized to\n \"connecting
\".",
+ "html": "To create an RTCDataChannel
, run the following\n steps:",
"rationale": ".algorithm",
"steps": [
{
@@ -3969,7 +3967,7 @@
{
"name": "RTCDTMFSender/[[Duration]]",
"href": "https://www.w3.org/TR/webrtc/#dfn-duration",
- "html": "Let dtmf have a [[Duration]] internal\n slot.",
+ "html": "To create an RTCDTMFSender, the user agent MUST run the\n following steps:",
"rationale": ".algorithm",
"steps": [
{
diff --git a/tr/algorithms/webtransport.json b/tr/algorithms/webtransport.json
index 4e33b35381dc..177ff477d90b 100644
--- a/tr/algorithms/webtransport.json
+++ b/tr/algorithms/webtransport.json
@@ -354,14 +354,14 @@
"html": "If duration is null, then set duration to an implementation-defined value.
" }, { - "html": "To sendDatagrams, given aWebTransport
object transport, run these steps:",
+ "html": "While queue is not empty:",
"rationale": "let",
"steps": [
{
"html": "Let bytes, timestamp and promise be queue’s first element.
" }, { - "html": "To sendDatagrams, given aWebTransport
object transport, run these steps:",
+ "html": "If more than duration milliseconds have passed since timestamp, then:",
"rationale": "remove",
"steps": [
{
@@ -384,14 +384,14 @@
"html": "Let maxSize be datagrams.[[OutgoingMaxDatagramSize]]
.
WebTransport
object transport, run these steps:",
+ "html": "While queue is not empty:",
"rationale": "let",
"steps": [
{
"html": "Let bytes, timestamp and promise be queue’s first element.
" }, { - "html": "To sendDatagrams, given aWebTransport
object transport, run these steps:",
+ "html": "If bytes’s length ≤ maxSize:",
"rationale": "if",
"steps": [
{
@@ -529,7 +529,7 @@
"html": "Run report Content Security Policy violations for request.
" }, { - "html": "To initialize WebTransport over HTTP, given aWebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "If should request be blocked by Content Security Policy? with request returns \"Blocked\", or if request should be blocked due to a bad port returns blocked, then abort the remaining steps and queue a network task with transport to run these steps:",
"rationale": "if",
"steps": [
{
@@ -547,7 +547,7 @@
"html": "Let networkPartitionKey be the result of determining the network partition key with transport’s relevant settings object.
" }, { - "html": "To initialize WebTransport over HTTP, given aWebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "Run the following steps in parallel, but abort when transport.[[State]]
becomes \"closed\"
or \"failed\"
:",
"rationale": "let",
"steps": [
{
@@ -557,7 +557,7 @@
"html": "Let connection be the result of obtaining a connection with networkPartitionKey, url, false, newConnection, and http3Only. If the user agent\n supports more than one congestion control algorithm, choose one appropriate for congestionControl for sending of data on this connection. When obtaining a connection, if serverCertificateHashes is specified, instead of using the default certificate verification\n algorithm, consider the certificate valid if it meets the custom certificate\n requirements and if verifying the certificate hash against serverCertificateHashes returns true. If either condition is not met, let connection be\n failure.
" }, { - "html": "To initialize WebTransport over HTTP, given aWebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "If connection is failure, then abort the remaining steps and queue a network task with transport to run these steps:",
"rationale": "if",
"steps": [
{
@@ -575,7 +575,7 @@
"html": "Wait for connection to receive the first SETTINGS frame, and let settings be a dictionary that\n represents the SETTINGS frame.
" }, { - "html": "To initialize WebTransport over HTTP, given aWebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "If settings doesn’t contain SETTINGS_ENABLE_WEBTRANPORT with a value of 1, or it doesn’t\n contain H3_DATAGRAM with a value of 1, then abort the remaining steps and queue a network\n task with transport to run these steps:",
"rationale": "if",
"steps": [
{
@@ -593,7 +593,7 @@
"html": "Establish a WebTransport session with origin on connection.
" }, { - "html": "To initialize WebTransport over HTTP, given aWebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "If the previous step fails, abort the remaining steps and queue a network task with transport to run these steps:",
"rationale": "if",
"steps": [
{
@@ -614,11 +614,11 @@
"html": "Assert: maxDatagramSize is an integer.
" }, { - "html": "To initialize WebTransport over HTTP, given aWebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "Queue a network task with transport to run these steps:",
"rationale": "if",
"steps": [
{
- "html": "To initialize WebTransport over HTTP, given a WebTransport
object transport, a URL record url, a boolean dedicated, a boolean http3Only, a WebTransportCongestionControl
congestionControl, and a\nsequence<WebTransportHash
> serverCertificateHashes, run these steps.",
+ "html": "If transport.[[State]]
is not \"connecting\"
:",
"rationale": "in parallel",
"steps": [
{
@@ -657,7 +657,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To pullBidirectionalStream, given a WebTransport
object transport, run\nthese steps.",
+ "html": "If transport.[[State]]
is \"connecting\"
, then return the result of performing the\n following steps upon fulfillment of transport.[[Ready]]
:",
"rationale": "return",
"steps": [
{
@@ -675,7 +675,7 @@
"html": "Let p be a new promise.
" }, { - "html": "To pullBidirectionalStream, given aWebTransport
object transport, run\nthese steps.",
+ "html": "Run the following steps in parallel:",
"rationale": "wait",
"steps": [
{
@@ -685,7 +685,7 @@
"html": "Let internalStream be the result of receiving a bidirectional stream.
" }, { - "html": "To pullBidirectionalStream, given aWebTransport
object transport, run\nthese steps.",
+ "html": "Queue a network task with transport to run these steps:",
"rationale": "let",
"steps": [
{
@@ -713,7 +713,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To pullUnidirectionalStream, given a WebTransport
object transport, run\nthese steps.",
+ "html": "If transport.[[State]]
is \"connecting\"
, then return the result of performing the\n following steps upon fulfillment of transport.[[Ready]]
:",
"rationale": "return",
"steps": [
{
@@ -731,7 +731,7 @@
"html": "Let p be a new promise.
" }, { - "html": "To pullUnidirectionalStream, given aWebTransport
object transport, run\nthese steps.",
+ "html": "Run the following steps in parallel:",
"rationale": "wait",
"steps": [
{
@@ -741,7 +741,7 @@
"html": "Let internalStream be the result of receiving an incoming unidirectional stream.
" }, { - "html": "To pullUnidirectionalStream, given aWebTransport
object transport, run\nthese steps.",
+ "html": "Queue a network task with transport to run these steps:",
"rationale": "let",
"steps": [
{
@@ -808,7 +808,7 @@
"html": "If transport.[[State]]
is \"closed\"
or \"failed\"
, then abort these steps.
close(closeInfo)
\n Terminates the WebTransport session associated with the WebTransport object.
\nWhen close is called, the user agent MUST run the following steps:
\n \n[[State]]
is \"connecting\"
:",
"rationale": "let",
"steps": [
{
@@ -1086,7 +1086,7 @@
"html": "If closeInfo is given, then set transport.[[State]]
to \"closed\"
.\n Otherwise, set transport.[[State]]
to \"failed\"
.
WebTransport
transport with error and\noptionally closeInfo, run these steps:",
+ "html": "For each stream in sendStreams, run the following steps:",
"rationale": "if",
"steps": [
{
@@ -1101,7 +1101,7 @@
"html": "For each stream in receiveStreams, error stream with error.
" }, { - "html": "To cleanup aWebTransport
transport with error and\noptionally closeInfo, run these steps:",
+ "html": "If closeInfo is given, then:",
"rationale": "resolve",
"steps": [
{
@@ -1125,7 +1125,7 @@
]
},
{
- "html": "To cleanup a WebTransport
transport with error and\noptionally closeInfo, run these steps:",
+ "html": "Otherwise:",
"rationale": "reject",
"steps": [
{
@@ -1279,11 +1279,11 @@
"html": "Let referenceHash be the result of computing a certificate hash with certificate.
" }, { - "html": "To verify a certificate hash, given a certificate and an array of hashes hashes,\nperform the following steps:", + "html": "For every hash hash in hashes:", "rationale": "if", "steps": [ { - "html": "To verify a certificate hash, given a certificate and an array of hashes hashes,\nperform the following steps:", + "html": "If hash.value
is not null and hash.algorithm
is an ASCII case-insensitive match with \"sha-256\":",
"rationale": "let",
"steps": [
{
@@ -1411,7 +1411,7 @@
"html": "Let abortSignal be stream’s [[controller]].[[abortController]].[[signal]].
" }, { - "html": "To create aWebTransportSendStream
, with an outgoing unidirectional or bidirectional WebTransport stream internalStream, a WebTransport
transport, sendGroup, and a sendOrder, run these steps:",
+ "html": "Add the following steps to abortSignal.",
"rationale": "let",
"steps": [
{
@@ -1470,11 +1470,11 @@
"html": "Let atomic be true if stream.[[AtomicWriteRequests]]
contains inFlightWriteRequest, otherwise false.
WebTransportSendStream
stream, run these steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "if",
"steps": [
{
- "html": "To write chunk to a WebTransportSendStream
stream, run these steps:",
+ "html": "If atomic is true and the current flow control window is too small for bytes to be sent\n in its entirety, then abort the remaining steps and queue a network task with transport to run these sub-steps:",
"rationale": "set",
"steps": [
{
@@ -1492,7 +1492,7 @@
"html": "If the previous step failed due to a network error, abort the remaining steps.
" }, { - "html": "To write chunk to aWebTransportSendStream
stream, run these steps:",
+ "html": "Otherwise, queue a network task with transport to run these steps:",
"rationale": "set",
"steps": [
{
@@ -1532,7 +1532,7 @@
"html": "Set stream.[[PendingOperation]]
to promise.
WebTransportSendStream
stream, run these steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "send",
"steps": [
{
@@ -1542,7 +1542,7 @@
"html": "Wait for stream.[[InternalStream]]
to enter the \"Data Recvd\" state. [QUIC]
WebTransportSendStream
stream, run these steps:",
+ "html": "Queue a network task with transport to run these steps:",
"rationale": "set",
"steps": [
{
@@ -1588,7 +1588,7 @@
"html": "If code > 4294967295, then set code to 4294967295.
" }, { - "html": "To abort aWebTransportSendStream
stream with reason, run these steps:",
+ "html": "Run the following steps in parallel:",
"rationale": "reset",
"steps": [
{
@@ -1796,7 +1796,7 @@
"html": "Let buffer, offset, and maxBytes be null.
" }, { - "html": "To pull bytes from aWebTransportReceiveStream
stream, run these steps.",
+ "html": "If stream’s current BYOB request view for stream is not null:",
"rationale": "set",
"steps": [
{
@@ -1811,7 +1811,7 @@
]
},
{
- "html": "To pull bytes from a WebTransportReceiveStream
stream, run these steps.",
+ "html": "Otherwise:",
"rationale": "set",
"steps": [
{
@@ -1826,7 +1826,7 @@
]
},
{
- "html": "To pull bytes from a WebTransportReceiveStream
stream, run these steps.",
+ "html": "Run the following steps in parallel:",
"rationale": "if",
"steps": [
{
@@ -1836,11 +1836,11 @@
"html": "If the previous step failed, abort the remaining steps.
" }, { - "html": "To pull bytes from aWebTransportReceiveStream
stream, run these steps.",
+ "html": "Queue a network task with transport to run these steps:",
"rationale": "if",
"steps": [
{
- "html": "To pull bytes from a WebTransportReceiveStream
stream, run these steps.",
+ "html": "If read > 0:",
"rationale": "set",
"steps": [
{
@@ -1852,7 +1852,7 @@
]
},
{
- "html": "To pull bytes from a WebTransportReceiveStream
stream, run these steps.",
+ "html": "If hasReceivedFIN is true:",
"rationale": "remove",
"steps": [
{
@@ -1906,14 +1906,14 @@
"html": "Remove stream from transport.[[SendStreams]]
.
WebTransportReceiveStream
stream with reason, run these\nsteps.",
+ "html": "Run the following steps in parallel:",
"rationale": "send",
"steps": [
{
"html": "Send STOP_SENDING with internalStream and code.
" }, { - "html": "To cancel aWebTransportReceiveStream
stream with reason, run these\nsteps.",
+ "html": "Queue a network task with transport to run these steps:",
"rationale": "remove",
"steps": [
{
diff --git a/tr/algorithms/webvtt1.json b/tr/algorithms/webvtt1.json
index b55c2a7333d1..e9567dc07ac8 100644
--- a/tr/algorithms/webvtt1.json
+++ b/tr/algorithms/webvtt1.json
@@ -860,7 +860,7 @@
{
"name": "WebVTT cue text parsing",
"href": "https://www.w3.org/TR/webvtt1/#attach-a-webvtt-internal-node-object",
- "html": "When the steps above say to attach a WebVTT Internal Node Object of a particular\n concrete class, the user agent must run the following steps:",
+ "html": "The WebVTT cue text parsing rules consist of the following algorithm. The input is a\nstring input supposedly containing WebVTT caption or subtitle cue text, and optionally a\nfallback language language. This algorithm returns a list of WebVTT Node Objects.",
"rationale": ".algorithm",
"steps": [
{
diff --git a/tr/algorithms/webxr-depth-sensing-1.json b/tr/algorithms/webxr-depth-sensing-1.json
index 601949c78e64..2ed9372dbf5b 100644
--- a/tr/algorithms/webxr-depth-sensing-1.json
+++ b/tr/algorithms/webxr-depth-sensing-1.json
@@ -14,7 +14,7 @@
"html": "Let selectedUsage be null
.
Let selectedDataFormat be null
.
Initialize result’s view to view.
" }, { - "html": "In order to create a WebGL depth information instance givenXRFrame
frame and XRView
view, the user agent MUST run the following steps:",
+ "html": "Initialize result’s textureType
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -338,7 +338,7 @@
]
},
{
- "html": "In order to create a WebGL depth information instance given XRFrame
frame and XRView
view, the user agent MUST run the following steps:",
+ "html": "Initialize result’s imageIndex
as follows:",
"rationale": ".switch",
"steps": [
{
diff --git a/tr/algorithms/webxr-hand-input-1.json b/tr/algorithms/webxr-hand-input-1.json
index 2e346c36a17c..e654055a5af9 100644
--- a/tr/algorithms/webxr-hand-input-1.json
+++ b/tr/algorithms/webxr-hand-input-1.json
@@ -69,7 +69,7 @@
"html": "If frame’s active boolean is false
, throw an InvalidStateError
and abort these steps.
fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii)
method populates radii with the radii of the jointSpaces, and returns a boolean indicating whether all of the spaces have a valid pose.",
+ "html": "For each joint in the jointSpaces:",
"rationale": "if",
"steps": [
{
@@ -87,11 +87,11 @@
"html": "Let allValid be true
.
fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii)
method populates radii with the radii of the jointSpaces, and returns a boolean indicating whether all of the spaces have a valid pose.",
+ "html": "For each joint in the jointSpaces:",
"rationale": "set",
"steps": [
{
- "html": "The fillJointRadii(sequence<XRJointSpace> jointSpaces, Float32Array radii)
method populates radii with the radii of the jointSpaces, and returns a boolean indicating whether all of the spaces have a valid pose.",
+ "html": "Set the float value of radii at offset as follows:",
"rationale": ".switch",
"steps": [
{
@@ -135,7 +135,7 @@
"html": "If frame’s active boolean is false
, throw an InvalidStateError
and abort these steps.
fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms)
method populates transforms with the matrices of the poses of the spaces relative to the baseSpace, and returns a boolean indicating whether all of the spaces have a valid pose.",
+ "html": "For each space in the spaces sequence:",
"rationale": "if",
"steps": [
{
@@ -153,7 +153,7 @@
"html": "let offset be a new number with the initial value of 0
.
fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms)
method populates transforms with the matrices of the poses of the spaces relative to the baseSpace, and returns a boolean indicating whether all of the spaces have a valid pose.",
+ "html": "Initialize pose as follows:",
"rationale": ".switch",
"steps": [
{
@@ -175,7 +175,7 @@
"html": "Let allValid be true
.
fillPoses(sequence<XRSpace> spaces, XRSpace baseSpace, Float32Array transforms)
method populates transforms with the matrices of the poses of the spaces relative to the baseSpace, and returns a boolean indicating whether all of the spaces have a valid pose.",
+ "html": "For each space in the spaces sequence:",
"rationale": "populate",
"steps": [
{
diff --git a/tr/algorithms/webxr-hit-test-1.json b/tr/algorithms/webxr-hit-test-1.json
index 6cc1acc5e659..a559ccbe33b3 100644
--- a/tr/algorithms/webxr-hit-test-1.json
+++ b/tr/algorithms/webxr-hit-test-1.json
@@ -167,7 +167,7 @@
"html": "Let results be an empty array of XRHitTestResult
s.
XRInputSource
inputSource, XRFrame
frame, array of XRHitTestTrackableType
entityTypes, and array of native hit test results nativeResults, the user agent MUST run the following steps:",
+ "html": "For each nativeResult in nativeResults:",
"rationale": "create",
"steps": [
{
@@ -298,7 +298,7 @@
"html": "Let hitTestResults be an empty list.
" }, { - "html": "In order to compute hit test results for a givenXRFrame
frame, for each hit test source, hitTestSource, that is present in session
's set of active hit test sources, the user agent MUST perform the following steps:",
+ "html": "For each native hit test result nativeResult in nativeResults, perform the following steps:",
"rationale": "create",
"steps": [
{
@@ -342,7 +342,7 @@
"html": "Let hitTestResults be an empty array of XRTransientInputHitTestResults.
" }, { - "html": "In order to compute hit test results for transient input for a givenXRFrame
frame, for each hit test source, hitTestSource, that is present in session
's set of active hit test sources for transient input, the user agent MUST perform the following steps:",
+ "html": "For each transient input source inputSource in matchingInputSources:",
"rationale": "query",
"steps": [
{
@@ -484,7 +484,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To obtain the matrix for a given XRRay
ray",
+ "html": "If ray’s matrix is not null
, perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -502,7 +502,7 @@
"html": "Let cos_angle be the scalar dot product of z and ray’s direction
, z · direction
.
XRRay
ray",
+ "html": "Set rotation based on the following:",
"rationale": ".switch",
"steps": [
{
@@ -551,7 +551,7 @@
"html": "Let entityType be a new XRHitTestTrackableType
.
XRHitTestTrackableType
, the user agent MUST run the following steps:",
+ "html": "Initialize entityType as follows:",
"rationale": ".switch",
"steps": [
{
diff --git a/tr/algorithms/webxr-lighting-estimation-1.json b/tr/algorithms/webxr-lighting-estimation-1.json
index e5d0dc40e2c8..b4a98adec30c 100644
--- a/tr/algorithms/webxr-lighting-estimation-1.json
+++ b/tr/algorithms/webxr-lighting-estimation-1.json
@@ -17,7 +17,7 @@
"html": "If the light-estimation feature descriptor is not contained in the session’s list of enabled features, reject promise with NotSupportedError
and abort these steps.
requestLightProbe(options)
method is invoked on XRSession
session, the user agent MUST run the following steps:",
+ "html": "If session’s ended value is true
, throw an InvalidStateError
and abort these steps.",
"rationale": ".switch",
"steps": [
{
@@ -25,7 +25,7 @@
"steps": [
{
"case": "If options’s reflectionFormat is \"srgba8\" or matches session’s preferredReflectionFormat:",
- "html": "When the requestLightProbe(options)
method is invoked on XRSession
session, the user agent MUST run the following steps:",
+ "html": "",
"rationale": "let",
"steps": [
{
@@ -44,7 +44,7 @@
},
{
"case": "else",
- "html": "When the requestLightProbe(options)
method is invoked on XRSession
session, the user agent MUST run the following steps:",
+ "html": "",
"rationale": "reject",
"steps": [
{
@@ -83,7 +83,7 @@
"html": "Let estimate be a new XRLightEstimate
.
getLightEstimate(lightProbe)
method is invoked on XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "Populate estimate’s sphericalHarmonicsCoefficients
, with the coefficients provided by device.",
"rationale": ".switch",
"steps": [
{
@@ -91,7 +91,7 @@
"steps": [
{
"case": "If device has an estimated direction for the light source",
- "html": "When the getLightEstimate(lightProbe)
method is invoked on XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "",
"rationale": "set",
"steps": [
{
@@ -101,7 +101,7 @@
},
{
"case": "else",
- "html": "When the getLightEstimate(lightProbe)
method is invoked on XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "",
"rationale": "set",
"steps": [
{
@@ -114,7 +114,7 @@
],
"additional": [
{
- "html": "When the getLightEstimate(lightProbe)
method is invoked on XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "Populate estimate’s sphericalHarmonicsCoefficients
, with the coefficients provided by device.",
"rationale": ".switch",
"steps": [
{
@@ -122,7 +122,7 @@
"steps": [
{
"case": "If device has an estimated intensity for the light source",
- "html": "When the getLightEstimate(lightProbe)
method is invoked on XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "",
"rationale": "set",
"steps": [
{
@@ -132,7 +132,7 @@
},
{
"case": "else",
- "html": "When the getLightEstimate(lightProbe)
method is invoked on XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "",
"rationale": "set",
"steps": [
{
diff --git a/tr/algorithms/webxr.json b/tr/algorithms/webxr.json
index fce4b5531b18..5bb18c027863 100644
--- a/tr/algorithms/webxr.json
+++ b/tr/algorithms/webxr.json
@@ -20,7 +20,7 @@
"html": "If the list of immersive XR devices's size is one, set the immersive XR device to the list of immersive XR devices[0].
" }, { - "html": "Each time the list of immersive XR devices changes the user agent should select an immersive XR device by running the following steps:", + "html": "Set the immersive XR device as follows:", "rationale": ".switch", "steps": [ { @@ -94,7 +94,7 @@ "html": "If the requesting document’s origin is not allowed to use the \"xr-spatial-tracking\" permissions policy, reject promise with a \"SecurityError
\" DOMException
and return it.
isSessionSupported(mode)
method queries if a given mode may be supported by the user agent and device capabilities. \n When this method is invoked, it MUST run the following steps:
", + "html": "Check whether the session mode is supported as follows:", "rationale": ".switch", "steps": [ { @@ -110,7 +110,7 @@ }, { "case": "Otherwise", - "html": "TheisSessionSupported(mode)
method queries if a given mode may be supported by the user agent and device capabilities. \n When this method is invoked, it MUST run the following steps:
", + "html": "Run the following steps in parallel:", "rationale": "let", "steps": [ { @@ -155,7 +155,7 @@ "html": "Let global object be the relevant Global object for the XRSystem
on which this method was invoked.
requestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "Check whether the session request is allowed as follows:",
"rationale": ".switch",
"steps": [
{
@@ -163,7 +163,7 @@
"steps": [
{
"case": "If immersive is true:",
- "html": "The requestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "",
"rationale": "check",
"steps": [
{
@@ -186,7 +186,7 @@
]
},
{
- "html": "The requestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "Run the following steps in parallel:",
"rationale": "let",
"steps": [
{
@@ -199,11 +199,11 @@
"html": "Set device to the result of obtaining the current device for mode, requiredFeatures, and optionalFeatures.
" }, { - "html": "TherequestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "Queue a task to perform the following steps:",
"rationale": "if",
"steps": [
{
- "html": "The requestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "If device is null
or device’s list of supported modes does not contain mode, run the following steps:",
"rationale": "reject",
"steps": [
{
@@ -227,7 +227,7 @@
"html": "Request the xr permission with descriptor and status.
" }, { - "html": "TherequestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "If status’ state
is \"denied\"
run the following steps:",
"rationale": "reject",
"steps": [
{
@@ -251,7 +251,7 @@
"html": "Initialize the session with session, mode, granted, and device.
" }, { - "html": "TherequestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "Potentially set the active immersive session as follows:",
"rationale": ".switch",
"steps": [
{
@@ -273,7 +273,7 @@
"html": "Resolve promise with session.
" }, { - "html": "TherequestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "Queue a task to perform the following steps:",
"rationale": "set",
"steps": [
{
@@ -283,7 +283,7 @@
"html": "Let sources be any existing input sources attached to session.
" }, { - "html": "TherequestSession(mode, options)
method attempts to initialize an XRSession
for the given mode if possible, entering immersive mode if necessary.",
+ "html": "If sources is non-empty, perform the following steps:",
"rationale": "set",
"steps": [
{
@@ -312,7 +312,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To obtain the current device for an XRSessionMode
mode, requiredFeatures, and optionalFeatures the user agent MUST run the following steps:",
+ "html": "Choose device as follows:",
"rationale": ".switch",
"steps": [
{
@@ -403,7 +403,7 @@
"html": ""
},
{
- "html": "The end()
method provides a way to manually shut down a session. When invoked, it MUST run the following steps:",
+ "html": "Queue a task to perform the following steps:",
"rationale": "wait",
"steps": [
{
@@ -475,7 +475,7 @@
"html": "Set session’s internal target framerate to rate.
" }, { - "html": "TheupdateTargetFrameRate(rate)
method passes the target frame rate rate to the XRSession
.",
+ "html": "Queue a task to perform the following steps:",
"rationale": "let",
"steps": [
{
@@ -485,7 +485,7 @@
"html": "Let newrate be the new nominal frame rate.
" }, { - "html": "TheupdateTargetFrameRate(rate)
method passes the target frame rate rate to the XRSession
.",
+ "html": "Queue a task to perform the following steps:",
"rationale": "apply",
"steps": [
{
@@ -572,7 +572,7 @@
"html": "Let oldLayers be activeState’s layers
.
XRSession
session MUST apply the pending render state by running the following steps:",
+ "html": "Queue a task to perform the following steps:",
"rationale": "set",
"steps": [
{
@@ -597,7 +597,7 @@
"html": "Let baseLayer be activeState’s baseLayer
.
XRSession
session MUST apply the pending render state by running the following steps:",
+ "html": "Set activeState’s composition enabled and output canvas as follows:",
"rationale": ".switch",
"steps": [
{
@@ -629,7 +629,7 @@
"html": "Let promise be a new Promise in the relevant realm of this XRSession
.
requestReferenceSpace(type)
method constructs a new XRReferenceSpace
of a given type, if possible. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Run the following steps in parallel:", "rationale": "if", "steps": [ { @@ -667,7 +667,7 @@ "html": "Let added be a new list.
" }, { - "html": "When new XR input sources become available forXRSession
session, the user agent MUST run the following steps:",
+ "html": "For each new XR input source:",
"rationale": "let",
"steps": [
{
@@ -679,7 +679,7 @@
]
},
{
- "html": "When new XR input sources become available for XRSession
session, the user agent MUST run the following steps:",
+ "html": "Queue a task to perform the following steps:",
"rationale": "extend",
"steps": [
{
@@ -705,7 +705,7 @@
"html": "Let removed be a new list.
" }, { - "html": "When any previously added XR input sources are no longer available forXRSession
session, the user agent MUST run the following steps:",
+ "html": "For each XR input source that is no longer available:",
"rationale": "let",
"steps": [
{
@@ -717,7 +717,7 @@
]
},
{
- "html": "When any previously added XR input sources are no longer available for XRSession
session, the user agent MUST run the following steps:",
+ "html": "Queue a task to perform the following steps:",
"rationale": "remove",
"steps": [
{
@@ -746,7 +746,7 @@
"html": "Let removed be a new list.
" }, { - "html": "When thehandedness
, targetRayMode
, profiles
, or presence of a gripSpace
for any XR input sources change for XRSession
session, the user agent MUST run the following steps:",
+ "html": "For each changed XR input source:",
"rationale": "let",
"steps": [
{
@@ -764,7 +764,7 @@
]
},
{
- "html": "When the handedness
, targetRayMode
, profiles
, or presence of a gripSpace
for any XR input sources change for XRSession
session, the user agent MUST run the following steps:",
+ "html": "Queue a task to perform the following steps:",
"rationale": "remove",
"steps": [
{
@@ -796,7 +796,7 @@
"html": "Initialize state’s depthFar
to 1000.0
.
XRRenderState
object is created for an XRSession
session, the user agent MUST initialize the render state by running the following steps:",
+ "html": "Initialize state’s inlineVerticalFieldOfView
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -897,7 +897,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "When an XRSession
session receives updated viewer state for timestamp frameTime from the XR device, it runs an XR animation frame, which MUST run the following steps regardless of if the list of animation frame callbacks is empty or not:",
+ "html": "Queue a task to perform the following steps:",
"rationale": "let",
"steps": [
{
@@ -922,7 +922,7 @@
"html": "If the active flag of any view in the list of views has changed since the last XR animation frame, update the viewports.
" }, { - "html": "When anXRSession
session receives updated viewer state for timestamp frameTime from the XR device, it runs an XR animation frame, which MUST run the following steps regardless of if the list of animation frame callbacks is empty or not:",
+ "html": "If the frame should be rendered for session:",
"rationale": "set",
"steps": [
{
@@ -992,7 +992,7 @@
"html": "Let xrviews be an empty list.
" }, { - "html": "ThegetViewerPose(referenceSpace)
method provides the pose of the viewer relative to referenceSpace as an XRViewerPose
, at the XRFrame
's time.",
+ "html": "For each active view view in the list of views on session
, perform the following steps:",
"rationale": "let",
"steps": [
{
@@ -1056,7 +1056,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To apply frame updates for an XRFrame
frame, the user agent MUST run the following steps:",
+ "html": "For each frame update in frame’s session
's list of frame updates, perform the following steps:",
"rationale": "run",
"steps": [
{
@@ -1097,7 +1097,7 @@
"html": "Let transform be pose’s transform
.
XRSpace
space in an XRSpace
baseSpace at the time represented by an XRFrame
frame into an XRPose
pose, with an optional force emulation flag, the user agent MUST run the following steps:",
+ "html": "Query the XR device's tracking system for space’s pose relative to baseSpace at the frame’s time, then perform the following steps:",
"rationale": ".switch",
"steps": [
{
@@ -1132,7 +1132,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "When an XRReferenceSpace
is requested with XRReferenceSpaceType
type for XRSession
session, the user agent MUST create a reference space by running the following steps:",
+ "html": "Initialize referenceSpace as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1200,7 +1200,7 @@
"html": "Let base be the XRReferenceSpace
the method was called on.
getOffsetReferenceSpace(originOffset)
method MUST perform the following steps when invoked:",
+ "html": "Initialize offsetSpace as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1276,7 +1276,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To obtain the projection matrix for a given XRView
view:",
+ "html": "If view’s internal projection matrix is not null
, perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -1308,7 +1308,7 @@
"html": "Set layer’s list of viewport objects to the empty list.
" }, { - "html": "When the active flag of any view in the list of views changes, one can update the viewports for anXRSession
session by performing the following steps:",
+ "html": "For each active view view in list of views:",
"rationale": "let",
"steps": [
{
@@ -1439,7 +1439,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "To obtain the matrix for a given XRRigidTransform
transform:",
+ "html": "If transform’s internal matrix is not null
, perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -1686,7 +1686,7 @@
"html": "Initialize layer’s session to session.
" }, { - "html": "TheXRWebGLLayer(session, context, layerInit)
constructor MUST perform the following steps when invoked:",
+ "html": "Initialize layer’s ignoreDepthValues
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1705,7 +1705,7 @@
]
},
{
- "html": "The XRWebGLLayer(session, context, layerInit)
constructor MUST perform the following steps when invoked:",
+ "html": "Initialize layer’s composition enabled boolean as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1724,7 +1724,7 @@
]
},
{
- "html": "The XRWebGLLayer(session, context, layerInit)
constructor MUST perform the following steps when invoked:",
+ "html": "true
:\n XRWebGLLayer(session, context, layerInit)
constructor MUST perform the following steps when invoked:",
+ "html": "",
"rationale": "initialize",
"steps": [
{
@@ -1760,7 +1760,7 @@
},
{
"case": "Otherwise:",
- "html": "The XRWebGLLayer(session, context, layerInit)
constructor MUST perform the following steps when invoked:",
+ "html": "",
"rationale": "initialize",
"steps": [
{
@@ -1802,7 +1802,7 @@
"html": "If view’s frame is not equal to frame, throw an InvalidStateError
and abort these steps.
getViewport(view)
method, when invoked on an XRWebGLLayer
layer, MUST run the following steps:",
+ "html": "If the viewport modifiable flag is true
and view’s requested viewport scale is not equal to current viewport scale:",
"rationale": "set",
"steps": [
{
@@ -1870,14 +1870,14 @@
"html": "Let context be this.
" }, { - "html": "ThemakeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Run the following steps in parallel:", "rationale": "let", "steps": [ { "html": "Let device be the result of ensuring an immersive XR device is selected.
" }, { - "html": "ThemakeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Set context’s XR compatible boolean as follows:", "rationale": ".switch", "steps": [ { @@ -1901,14 +1901,14 @@ }, { "case": "Otherwise:", - "html": "ThemakeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Queue a task on the WebGL task source to perform the following steps:", "rationale": "handle", "steps": [ { "html": "Force context to be lost.
" }, { - "html": "ThemakeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Handle the context loss as described by the WebGL specification:", "rationale": "let", "steps": [ { @@ -1927,7 +1927,7 @@ "html": "Disable all extensions except \"WEBGL_lose_context\".
" }, { - "html": "ThemakeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Queue a task on the WebGL task source to perform the following steps:", "rationale": "fire", "steps": [ { @@ -1937,14 +1937,14 @@ "html": "If e’s canceled flag is not set, reject promise with an AbortError
and abort these steps.
makeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Run the following steps in parallel.", "rationale": "queue", "steps": [ { "html": "Await a restorable drawing buffer on a compatible graphics adapter for device.
" }, { - "html": "ThemakeXRCompatible()
method ensures the WebGLRenderingContextBase
is running on a compatible graphics adapter for the immersive XR device. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Queue a task on the WebGL task source to perform the following steps:", "rationale": "restore", "steps": [ { @@ -2057,7 +2057,7 @@ "html": "If session’s visibilityState
is , return
false
.
XRSession
session, the user agent MUST run the following steps:",
+ "html": "Determine if the pose data can be returned as follows:",
"rationale": ".switch",
"steps": [
{
@@ -2167,7 +2167,7 @@
"html": "Let result be the result of resolving the requested features given requiredFeatures,optionalFeatures, and mode
.
XRPermissionDescriptor
descriptor and a XRPermissionStatus
status, the UA MUST run the following steps:",
+ "html": "If result is null
, run the following steps:",
"rationale": "set",
"steps": [
{
@@ -2185,7 +2185,7 @@
"html": "The user agent MAY at this point ask the user’s permission for the calling algorithm to use any of the features in consentRequired and consentOptional. The results of these prompts should be included when determining if there is a clear signal of user intent for enabling these features.
" }, { - "html": "To request the \"xr\" permission with anXRPermissionDescriptor
descriptor and a XRPermissionStatus
status, the UA MUST run the following steps:",
+ "html": "For each feature in consentRequired perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -2200,7 +2200,7 @@
]
},
{
- "html": "To request the \"xr\" permission with an XRPermissionDescriptor
descriptor and a XRPermissionStatus
status, the UA MUST run the following steps:",
+ "html": "For each feature in consentOptional perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -2247,7 +2247,7 @@
"html": "Let previouslyEnabled be device’s set of granted features for mode.
" }, { - "html": "To resolve the requested features given requiredFeatures and optionalFeatures for anXRSessionMode
mode, the user agent MUST run the following steps:",
+ "html": "If device is null
or device’s list of supported modes does not contain mode, run the following steps:",
"rationale": "return",
"steps": [
{
@@ -2259,7 +2259,7 @@
"html": "Add every feature descriptor in the default features table associated with mode to granted if it is not already present.
" }, { - "html": "To resolve the requested features given requiredFeatures and optionalFeatures for anXRSessionMode
mode, the user agent MUST run the following steps:",
+ "html": "For each feature in requiredFeatures perform the following steps:",
"rationale": "if",
"steps": [
{
@@ -2286,7 +2286,7 @@
]
},
{
- "html": "To resolve the requested features given requiredFeatures and optionalFeatures for an XRSessionMode
mode, the user agent MUST run the following steps:",
+ "html": "For each feature in optionalFeatures perform the following steps:",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/webxrlayers-1.json b/tr/algorithms/webxrlayers-1.json
index 3fabc6840a0c..dc7987dbc1c8 100644
--- a/tr/algorithms/webxrlayers-1.json
+++ b/tr/algorithms/webxrlayers-1.json
@@ -84,7 +84,7 @@
"html": "Let layer’s space
be the init’s space
.
XRQuadLayer
layer with an XRQuadLayerInit
init, the user agent MUST run the following steps:",
+ "html": "Initialize layer’s transform
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -126,7 +126,7 @@
"html": "Let layer’s space
be the init’s space
.
XRCylinderLayer
layer with an XRCylinderLayerInit
init, the user agent MUST run the following steps:",
+ "html": "Initialize layer’s transform
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -187,7 +187,7 @@
"html": "Let layer’s space
be the init’s space
.
XREquirectLayer
layer with an XREquirectLayerInit
init, the user agent MUST run the following steps:",
+ "html": "Initialize layer’s transform
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -274,7 +274,7 @@
"html": "If layout is \"mono\"
, return layout and abort these steps.
XRTextureType
textureType, an XRWebGLRenderingContext
context and an XRLayerLayout
layout, the user agent MUST run the following steps:",
+ "html": "If layout is \"default\"
, run the following steps:",
"rationale": "if",
"steps": [
{
@@ -286,7 +286,7 @@
]
},
{
- "html": "To determine the layout attribute using an XRTextureType
textureType, an XRWebGLRenderingContext
context and an XRLayerLayout
layout, the user agent MUST run the following steps:",
+ "html": "If layout is \"default\"
or \"stereo\"
and textureType is \"texture\"
, run the following steps:",
"rationale": "if",
"steps": [
{
@@ -362,7 +362,7 @@
"html": "If textureFormat is not in the list of color formats for projection layers, throw a NotSupportedError
and abort these steps.
XRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"mono\"
or \"default\"
:",
"rationale": ".switch",
"steps": [
{
@@ -374,7 +374,7 @@
},
{
"case": "Otherwise",
- "html": "To allocate color textures for projection layers using an XRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "For each view in the session’s list of views:",
"rationale": "if",
"steps": [
{
@@ -449,7 +449,7 @@
"html": "Let height be the height of view’s recommended WebGL depth texture resolution multiplied by scaleFactor.
" }, { - "html": "To allocate depth textures for projection layers using anXRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"mono\"
or \"default\"
:",
"rationale": ".switch",
"steps": [
{
@@ -461,7 +461,7 @@
},
{
"case": "Otherwise",
- "html": "To allocate depth textures for projection layers using an XRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "For each view in the session’s list of views:",
"rationale": "if",
"steps": [
{
@@ -533,7 +533,7 @@
"html": "Let height be the height of view’s recommended motion vector texture resolution multiplied by scaleFactor.
" }, { - "html": "To allocate motion vector textures for projection layers using anXRProjectionLayer
layer, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"mono\"
or \"default\"
:",
"rationale": ".switch",
"steps": [
{
@@ -545,7 +545,7 @@
},
{
"case": "Otherwise",
- "html": "To allocate motion vector textures for projection layers using an XRProjectionLayer
layer, the user agent MUST run the following steps:",
+ "html": "For each view in the session’s list of views:",
"rationale": "if",
"steps": [
{
@@ -602,7 +602,7 @@
"html": "If textureFormat is not in the list of color formats for projection layers, throw a NotSupportedError
and abort these steps.
XRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "For each view in the session’s list of views:",
"rationale": "if",
"steps": [
{
@@ -615,7 +615,7 @@
"html": "Let height be the height of view’s recommended WebGL color texture resolution multiplied by scaleFactor.
" }, { - "html": "To allocate the color textures for the secondary views using anXRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "Initialize texture as follows:",
"rationale": ".switch",
"steps": [
{
@@ -668,7 +668,7 @@
"html": "Let array be a new array in the relevant realm of context.
" }, { - "html": "To allocate the depth textures for the secondary views using anXRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "For each view in the session’s list of views:",
"rationale": "if",
"steps": [
{
@@ -681,7 +681,7 @@
"html": "Let height be the height of view’s recommended WebGL depth texture resolution multiplied by scaleFactor.
" }, { - "html": "To allocate the depth textures for the secondary views using anXRProjectionLayer
layer, an XRTextureType
textureType, a GLenum
textureFormat and a float scaleFactor, the user agent MUST run the following steps:",
+ "html": "Initialize texture as follows:",
"rationale": ".switch",
"steps": [
{
@@ -731,7 +731,7 @@
"html": "If init’s mipLevels
is larger than 1
and viewPixelWidth
and viewPixelHeight
are not powers of 2
, throw a InvalidStateError
and abort these steps
XRCompositionLayer
layer, an XRTextureType
textureType and an XRLayerInit
init, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"mono\"
:",
"rationale": ".switch",
"steps": [
{
@@ -750,7 +750,7 @@
]
},
{
- "html": "To allocate color textures using an XRCompositionLayer
layer, an XRTextureType
textureType and an XRLayerInit
init, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"stereo\"
:",
"rationale": ".switch",
"steps": [
{
@@ -804,7 +804,7 @@
"html": "If init’s mipLevels
is larger than 1
and viewPixelWidth
and viewPixelHeight
are not powers of 2
, throw a InvalidStateError
and abort these steps.
XRCompositionLayer
layer, an XRTextureType
textureType and an XRLayerInit
init, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"mono\"
:",
"rationale": ".switch",
"steps": [
{
@@ -823,7 +823,7 @@
]
},
{
- "html": "To allocate depth textures using an XRCompositionLayer
layer, an XRTextureType
textureType and an XRLayerInit
init, the user agent MUST run the following steps:",
+ "html": "If layer’s layout
is \"stereo\"
:",
"rationale": ".switch",
"steps": [
{
@@ -880,7 +880,7 @@
"html": "Initialize layer’s isStatic to false
.
createProjectionLayer(optional XRProjectionLayerInit init)
method creates a new XRProjectionLayer
layer. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Initialize layer’signoreDepthValues
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -926,7 +926,7 @@
"html": "let layer’s motionVectorTextures be the result of allocating motion vector textures for projection layers with layer, init’s depthFormat
and init’s scaleFactor
.
createProjectionLayer(optional XRProjectionLayerInit init)
method creates a new XRProjectionLayer
layer. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Initialize the colortextures for secondary views as follows:", "rationale": ".switch", "steps": [ { @@ -945,7 +945,7 @@ ] }, { - "html": "ThecreateProjectionLayer(optional XRProjectionLayerInit init)
method creates a new XRProjectionLayer
layer. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Initialize the depthstenciltextures for secondary views as follows:", "rationale": ".switch", "steps": [ { @@ -1197,7 +1197,7 @@ "html": "Initialize layer’s isStatic to init’s isStatic
createCubeLayer(XRCubeLayerInit init)
method creates a new XRCubeLayer
layer. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Initialize layer’sorientation
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1228,7 +1228,7 @@
"html": "Let layer’s colorTextures be a new array in the relevant realm of this XRCubeLayer
.
createCubeLayer(XRCubeLayerInit init)
method creates a new XRCubeLayer
layer. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "Initialize layer’s colorTextures as follows, based on the value of layout:", "rationale": ".switch", "steps": [ { @@ -1253,7 +1253,7 @@ "html": "Let layer’s motionVectorTextures be a new array in the relevant realm of this XRCubeLayer
.
createCubeLayer(XRCubeLayerInit init)
method creates a new XRCubeLayer
layer. \n When this method is invoked, the user agent MUST run the following steps:
", + "html": "If init’sdepthFormat
is set, initialize layer’s depthStencilTextures as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1334,7 +1334,7 @@
"html": "Set viewport’s height
to the pixelh eight of texture.
XRViewport
viewport with a opaque texture texture, a XRLayerLayout
layout, an integer offset and a integer num, the user agent MUST run the following steps:",
+ "html": "Update viewport as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1361,7 +1361,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The getSubImage(XRCompositionLayer layer, XRFrame frame, optional XREye eye = \"none\"
)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
Let index be 0
.
getSubImage(XRCompositionLayer layer, XRFrame frame, optional XREye eye = \"none\"
)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
layout
attribute is \"stereo\"
:",
"rationale": "if",
"steps": [
{
@@ -1410,7 +1410,7 @@
"html": "If validate the state of the XRWebGLSubImage creation function with layer and frame is false
, throw an InvalidStateError
and abort these steps.
getSubImage(XRCompositionLayer layer, XRFrame frame, optional XREye eye = \"none\"
)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
imageIndex
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1429,7 +1429,7 @@
]
},
{
- "html": "The getSubImage(XRCompositionLayer layer, XRFrame frame, optional XREye eye = \"none\"
)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
colorTexture
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1448,7 +1448,7 @@
]
},
{
- "html": "The getSubImage(XRCompositionLayer layer, XRFrame frame, optional XREye eye = \"none\"
)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
depthStencilTexture
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1509,7 +1509,7 @@
"rationale": ".algorithm",
"steps": [
{
- "html": "The getViewSubImage(XRProjectionLayer layer, XRView view)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
If view’s active flag is false
, throw an InvalidStateError
and abort these steps.
getViewSubImage(XRProjectionLayer layer, XRView view)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
getViewSubImage(XRProjectionLayer layer, XRView view)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
imageIndex
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1581,7 +1581,7 @@
]
},
{
- "html": "The getViewSubImage(XRProjectionLayer layer, XRView view)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
colorTexture
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1604,7 +1604,7 @@
]
},
{
- "html": "The getViewSubImage(XRProjectionLayer layer, XRView view)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
depthStencilTexture
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1631,7 +1631,7 @@
]
},
{
- "html": "The getViewSubImage(XRProjectionLayer layer, XRView view)
method creates a new XRWebGLSubImage
. \n When this method is invoked on an XRWebGLBinding
binding, it MUST run the following steps:
motionVectorTexture
as follows:",
"rationale": ".switch",
"steps": [
{
@@ -1918,7 +1918,7 @@
"html": "Let activeState be session’s active render state.
" }, { - "html": "This module replaces the steps given by \"update the pending layers state\" from the WebXR specification. Instead when the user agent will update the pending layers state withXRSession
session and XRRenderStateInit
newState, it must run the following steps:",
+ "html": "If newState’s baseLayer
is set:",
"rationale": "if",
"steps": [
{
@@ -1930,7 +1930,7 @@
]
},
{
- "html": "This module replaces the steps given by \"update the pending layers state\" from the WebXR specification. Instead when the user agent will update the pending layers state with XRSession
session and XRRenderStateInit
newState, it must run the following steps:",
+ "html": "If newState’s layers
is set:",
"rationale": "if",
"steps": [
{
@@ -1943,7 +1943,7 @@
"html": "If newState’s layers
contains duplicate instances, throw a TypeError
and abort these steps.
XRSession
session and XRRenderStateInit
newState, it must run the following steps:",
+ "html": "For each layer in newState’s layers
:",
"rationale": "if",
"steps": [
{
diff --git a/tr/algorithms/window-management.json b/tr/algorithms/window-management.json
index e698db7f69df..209360292919 100644
--- a/tr/algorithms/window-management.json
+++ b/tr/algorithms/window-management.json
@@ -75,14 +75,14 @@
"html": "If this's relevant global object's associated Document is not allowed to use the policy-controlled feature named \"window-management
\", then reject promise with a \"NotAllowedError\"
DOMException
and abort these steps.
getScreenDetails()
method steps are:",
+ "html": "Run the following steps in parallel:",
"rationale": "let",
"steps": [
{
"html": "Let permissionState be request permission to use \"window-management
\".
getScreenDetails()
method steps are:",
+ "html": "Queue a global task on the relevant global object of this using the window placement task source to run the following steps:",
"rationale": "if",
"steps": [
{
@@ -125,7 +125,7 @@
"html": "Let screens be a new list.
" }, { - "html": "Thescreens
getter steps are:",
+ "html": "For each screen of the device’s screens:",
"rationale": "let",
"steps": [
{
diff --git a/tr/css/css-conditional-5.json b/tr/css/css-conditional-5.json
index 2de41a87858c..bdee1885ad9d 100644
--- a/tr/css/css-conditional-5.json
+++ b/tr/css/css-conditional-5.json
@@ -3,21 +3,174 @@
"title": "CSS Conditional Rules Module Level 5",
"url": "https://www.w3.org/TR/css-conditional-5/"
},
- "properties": [],
+ "properties": [
+ {
+ "name": "container-type",
+ "href": "https://www.w3.org/TR/css-conditional-5/#propdef-container-type",
+ "value": "normal | size | inline-size",
+ "initial": "normal",
+ "appliesTo": "all elements",
+ "inherited": "no",
+ "percentages": "n/a",
+ "computedValue": "specified keyword",
+ "canonicalOrder": "per grammar",
+ "animationType": "not animatable",
+ "values": [
+ {
+ "name": "size",
+ "prose": "Establishes a query container for container size queries on both the inline and block axis. Applies layout containment, style containment, and size containment to the principal box.",
+ "href": "https://www.w3.org/TR/css-conditional-5/#valdef-container-type-size",
+ "type": "value",
+ "value": "size"
+ },
+ {
+ "name": "inline-size",
+ "prose": "Establishes a query container for container size queries on the container’s own inline axis. Applies layout containment, style containment, and inline-size containment to the principal box.",
+ "href": "https://www.w3.org/TR/css-conditional-5/#valdef-container-type-inline-size",
+ "type": "value",
+ "value": "inline-size"
+ },
+ {
+ "name": "normal",
+ "prose": "The element is not a query container for any container size queries, but remains a query container for container style queries.",
+ "href": "https://www.w3.org/TR/css-conditional-5/#valdef-container-type-normal",
+ "type": "value",
+ "value": "normal"
+ }
+ ],
+ "styleDeclaration": [
+ "container-type",
+ "containerType"
+ ]
+ },
+ {
+ "name": "container-name",
+ "href": "https://www.w3.org/TR/css-conditional-5/#propdef-container-name",
+ "value": "none |