Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Select "Match on variables instead of expressions" for selection-declarations #824

Merged
merged 3 commits into from
Aug 28, 2024

Conversation

eemeli
Copy link
Collaborator

@eemeli eemeli commented Jul 15, 2024

This design doc was first proposed back in March, and we should finally start discussing which of its options to choose.

I think the problem originally presented in #736 is real, and not well served by our current syntax. Of the options we've identified in the design document, using variables instead of expressions in .match statements seems like the only one that would simplify rather than complicate our syntax and runtime behaviour, as it removes rather than adds to what we already have.

@eemeli eemeli requested a review from aphillips July 15, 2024 10:25
@eemeli eemeli added syntax Issues related with MF Syntax design Design principles, decisions labels Jul 15, 2024
@@ -1,6 +1,6 @@
# Effect of Selectors on Subsequent Placeholders

Status: **Proposed**
Status: **Accepted**
Copy link
Member

Choose a reason for hiding this comment

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

Let's not do this until we've agreed on a course to take. We can make this annotation when merging.

Comment on lines +153 to +154
The design alternative [Match on variables instead of expressions](#match-on-variables-instead-of-expressions)
described below is selected.
Copy link
Member

Choose a reason for hiding this comment

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

I don't think I agree with this design alternative, since it requires the use of declarations.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

The way I see it, that's the least worst option that we have available. :/

Copy link
Member

Choose a reason for hiding this comment

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

Okay, but it's a breaking change. The other alternatives have quirks for sure (and I think the mutable/immutable labels might be backwards??), but we need to seek consensus.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I agree. On this topic, it seems like we've been avoiding expressing any preferences one way or another for a while, so I didn't know of a better way to start seeking that consensus than proposing one solution above the others. The PR is structured in a way that it should be relatively easy for us to change the selection from my initial proposition, should our consensus land elsewhere.

Copy link
Collaborator

Choose a reason for hiding this comment

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

I prefer a different alternative, "Do nothing", that others also share, as pointed out in this comment. We also discussed it in Monday's 2024-08-19 meeting.

The concern with the following set of alternatives is that they propose doubling up the functionality of .match selectors to also behave like a declaration for the input operand to define implicit function option values.

  • "Allow both local and input declarative selectors with immutability"
  • "Allow mutable input declarative selectors"
  • "Allow immutable input declarative selectors"

They are also implicitly creating a new "lexical scope", if you will, that is needed for this implicit binding (declaration).

The concern with the alternative "Match on variables instead of expressions"
is that it is designed for and assumes the scenario that formatting needed for selection and formatting needed for placeholders in the pattern are the same. As Use Case 6 points out, not only can the formatting options differ -- because selection and formatting are distinct operations -- but we might have different formatting functions altogether. The strictness of this option is not appropriate since it's based on an assumption that is not universally true in practice (although I appreciate the good intent behind the idea).

The concerns with "Provide a #-like Feature" are the obvious strong undesirability of positional arguments and the complexity & downgrade to readability that brings. The last time someone discussed positional arguments in earnest here in MFWG was perhaps early 2020...around 4+ years ago, because there was quick unanimous alignment around named arguments.

Copy link
Collaborator

Choose a reason for hiding this comment

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

On the point of formatting for selection != formatting for display, I dug up this "virtual whiteboard" doc from older times of MFWG when we couldn't meet in person (July 2020, to be exact), in which @mihnita and I had a kind of Socratic dialogue where Mihai explained to me through examples why selectors and placeholders are distinct operations and thus cannot be collapsed into a single construct type in the data model.

@aphillips
Copy link
Member

aphillips commented Aug 9, 2024

In the last call (2024-08-05), which I missed, there was time spent reading the document. In this coming week's call (2024-08-12), please come prepared to discuss the design choice.


(chair hat OFF)

I prefer the alternative "Allow immutable input declarative selectors".

My preference is because I think that most messages can use dual-duty input/selectors and that this shorthand will feel natural to users--much more natural than forcing users to use declarations. The syntax is also cleaner, since curly brackets remain delimiters on statements.

Note that the design preferred here probably needs some syntax adjustment. In the doc it shows this:

.input {$count :number}
.match $count
one {{You have {$count} apple}}
* {{You have {$count} apples}}

.local $empty = {$theList :isEmpty}
.match $empty
true {{You bought nothing}}
* {{You bought {$theList}!}}

But these messages could normalize whitespace as:

.input {$count :number}.match $count one {{You have {$count} apple}} * {{You have {$count} apples}}

.local $empty = {$theList :isEmpty}.match $empty true {{You bought nothing}} * {{You bought {$theList}!}}

The selectors and the first key-list are not visually distinguished, which I think is a problem.

@echeran
Copy link
Collaborator

echeran commented Aug 19, 2024

During the 2024-08-12 meeting, my views changed most recently by discussion from @lucacasonato and @mihnita about the confusion that users would experience with the option "Allow immutable input declarative selectors" since .match would be doing double duty: it's matching, and it's simultaneously behaving like .input. By the end of that discussion, I felt that the option of "Do Nothing" was best (which means .input and .local already work as intended to handle this scenario, and we can document this better for the user), and that the other proposed options made things worse more than they helped.

Going through the discussion in #736 strengthens that view. I interpret the comments from @catamorphism (link), @bearfriend (link) in this view. Also, @mihnita's point in that thread that selectors and formatters are not always the same for a given data type is very important, and it complicates the arguments in favor of doing something other than "Do Nothing".

I agree with their arguments, which are well stated. FWIW, just to restate & elaborate my way of phrasing it: having one thing called .match serve 2 purposes at the same time (matching + .input-like creation of a new context/lexical scope) is the definition of complexity. We already have .input for creating a new context for a binding name. Let one thing represent one thing only. In the original description of #736, the word "implicit" in "Could we consider making the .match expressions also act as implicit declarations, ..." is to me a red flag of complexity. The design doc's use cases list concision as a goal ("As a user, I want to use the least amount of MF special syntax possible."), but concision != simplicity, and concision at the expense of simplicity is a net negative. So "Do Nothing" is best -- leave well enough alone -- but we can have better documentation for users to help them decide best how to author messages as they intend.

Copy link
Collaborator

@echeran echeran left a comment

Choose a reason for hiding this comment

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

I couldn't leave suggested changes in other parts of the doc via this review, so I created #867, which should be resolved / merged before this PR should be merged.

Also, we should get a group consensus before deciding an alternative and marking as accepted. PTAL at comments, thanks!

Comment on lines +153 to +154
The design alternative [Match on variables instead of expressions](#match-on-variables-instead-of-expressions)
described below is selected.
Copy link
Collaborator

Choose a reason for hiding this comment

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

I prefer a different alternative, "Do nothing", that others also share, as pointed out in this comment. We also discussed it in Monday's 2024-08-19 meeting.

The concern with the following set of alternatives is that they propose doubling up the functionality of .match selectors to also behave like a declaration for the input operand to define implicit function option values.

  • "Allow both local and input declarative selectors with immutability"
  • "Allow mutable input declarative selectors"
  • "Allow immutable input declarative selectors"

They are also implicitly creating a new "lexical scope", if you will, that is needed for this implicit binding (declaration).

The concern with the alternative "Match on variables instead of expressions"
is that it is designed for and assumes the scenario that formatting needed for selection and formatting needed for placeholders in the pattern are the same. As Use Case 6 points out, not only can the formatting options differ -- because selection and formatting are distinct operations -- but we might have different formatting functions altogether. The strictness of this option is not appropriate since it's based on an assumption that is not universally true in practice (although I appreciate the good intent behind the idea).

The concerns with "Provide a #-like Feature" are the obvious strong undesirability of positional arguments and the complexity & downgrade to readability that brings. The last time someone discussed positional arguments in earnest here in MFWG was perhaps early 2020...around 4+ years ago, because there was quick unanimous alignment around named arguments.

@@ -149,14 +150,11 @@ _What prior decisions and existing conditions limit the possible design?_

## Proposed Design

_Describe the proposed solution. Consider syntax, formatting, errors, registry, tooling, interchange._
The design alternative [Match on variables instead of expressions](#match-on-variables-instead-of-expressions)
Copy link
Collaborator

Choose a reason for hiding this comment

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

The suggested edit to change the selected alternative is based on my & others' previous comments and meeting discussion. See other comment threads in the PR for specifics.

Suggested change
The design alternative [Match on variables instead of expressions](#match-on-variables-instead-of-expressions)
The design alternative [Do nothing](#do-nothing)

Copy link
Collaborator

Choose a reason for hiding this comment

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

There is also PR #867

I suggested an option there:
#867 (comment)

But we discuss the same thing in so many places that I don't know where to comment anymore...
Let me know if you want me to copy it here.

Copy link
Collaborator

Choose a reason for hiding this comment

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

@mihnita I created #867 to create a quick update to the design doc to reflect the discussion that came up in Monday's 2024-08-19 meeting, as @aphillips's suggested then, and because I couldn't make them as suggested changes in this PR since it's outside the bounds of Github's diff view. I think a separate PR is the way to do it.

(Btw, regarding the idea itself from your comment, I agree with @bearfriend's comment in response. I have more explanation to offer to that position. I can share that with you in a 1:1 chat in case that would affect whether you want to pursue a small PR that adds the option to the design doc so that it gets equal consideration.)

Copy link
Member

Choose a reason for hiding this comment

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

That discussion is not very clear. Can you boil it down to a reasonable use case where the selection should differ from the formatting semantics (eg disregarding different number systems).

Copy link
Collaborator

Choose a reason for hiding this comment

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

Isn't that covered by the added example?

.match {$person :gender}
male {{Bienvenido {$person :personName}}}
female {{Bienvenida {$person :personName}}}
other {{Le damos la bienvenida {$person :personName}}}

One can also imagine similar patterns for non-complex inputs such as {$time :partOfDay} (morning/afternoon/evening/night), {$adjective :affect}, or really any kind of "binning" classification into finite categories for distinct treatment that still needs the original value.

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

I find the "Do Nothing" alternative problematic because it does not signal anything wrong with a message like

.match {$count :integer}
one {{You have {$count} whole apple.}}
* {{You have {$count} whole apples.}}

If that message is formatted with { count: 1.2 }, the result is "You have 1.2 whole apple." which is clearly not what was intended by its author.

This problem is the main reason that I filed #736 originally, and which I think we need some solution for. As we've discussed on many occasions, MF2 will always be an auxiliary language to its users, and we should not expect users to always remember its details. Therefore, I think it's important that we find some way for the above message to be considered invalid, so that this mistake is caught as early as possible, or we add a side effect to .match so that the desired behaviour is realised.

My own first preference is the alternative proposed in this PR, but I've also filed #860 to provide a next-best choice that retains our current syntax, but signals an error in this particular case, where a selector variable is used in a placeholder.

Copy link
Member

Choose a reason for hiding this comment

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

Thinking about this some more. My proposal is:

  • in a match statement, options effectively mutate variables (see below)
  • it is illegal for a variable to occur twice in a match statement.

This keeps most message more concise, producing the expected results: eg without the problems that occur above with input of count : 1.2

Example1.

.match {$count :integer}
one {{You have {$count} whole apple.}}
* {{You have {$count} whole apples.}}

is precisely equivalent to:

.local $count2 {$count :integer}
.match {$count2}
one {{You have {$count2} whole apple.}}
* {{You have {$count2} whole apples.}}

Example 2.
And the following is illegal.

.match {$count <anything>}{$count <anything>}

The message author is required to rewrite it explicitly, eg to:

.local $count3 {$count}
.match {$count <anything1>}{$count3 <anything2>}

I really don't think this is a burden, since the number of times the same variable is used twice in a match (or the older Select) is vanishingly small. Since it is an error — and the advice to fix is easy — that will prevent misbehavior.

Copy link
Member

Choose a reason for hiding this comment

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

@macchiati

I really don't think this is a burden, since the number of times the same variable is used twice in a match (or the older Select) is vanishingly small.

This is true of numbers. Dates offer an alternative... or person names in which one might want multiple selection from a complex value.

Note: I'm not arguing against the proposal.

@sffc
Copy link
Member

sffc commented Aug 26, 2024

A few thoughts on this:

In my experience, this is one of the key problems with MF1 patterns. I filed a bug years ago about how MF1 allowed plural selection to operate on something other than the formatted number. I've reported similar issues in ECMA-402 (tc39/ecma402#397).

Therefore, I think MF2 should absolutely make it easier to do the normally-correct thing (select and format with the same function) than the normally-wrong thing (select and format with different functions). I worry that "do nothing" does not satisfy this.

I find the implicit local scopes confusing. I think it's not an insurmountable problem, but I prefer a simpler solution with slightly more verbosity over one that trades less typing for more complexity and edge cases.

Without taking an opinion on which option to choose, I'll just note that I found .match {$input :function} $local = {$input :function} ("Allow both local and input declarative selectors") to be confusing to read.

An option I don't see listed anywhere that might work would be to say that expressions in a match statement are equivalent to hoisted input declarations. No local scope is introduced. In other words,

.match {$emailCount :integer}

is equivalent to

.input {$emailCount :integer}
.match $emailCount

@macchiati
Copy link
Member

That would work for items that don't result from a previous .input or .local, but would force extra lines and a change in variable name for those that do already. That's why I suggested the hybrid approach.

@sffc
Copy link
Member

sffc commented Aug 26, 2024

That would work for items that don't result from a previous .input or .local, but would force extra lines and a change in variable name for those that do already. That's why I suggested the hybrid approach.

The "hydrid" approach, which I understand to be similar to the "Allow immutable input declarative selectors" approach, seems workable, but it introduces the implicit local scope, and I find the implicit local scopes somewhat confusing. My suggestion avoids the local scope and works for the majority of cases. I would rather avoid the complexity of local scopes for the sake of brevity, when the alternative is just an extra line of code that is more readable anyway.

@aphillips
Copy link
Member

@macchiati and @sffc

Please note that I am about to ballot this issue (there will also be a discussion thread for the ballot, as is customary in this group). I am currently waiting on merging Mark's hybrid approach before launching that.

If there are other options that the group should consider, please file a PR against the design doc, using #870 as a model!

In this case, I'm not sure that what you're suggesting, Shane, is actually different from immutable declaration-selectors, except by how the selector is described. A .match statement has no "scope": nothing can ever appear after it. It is the container of all the patterns when a message contains more than one pattern. The only difference in your example would be that you omit the syntactic sugar of the {/} around the variable name. Actual annotation would be an immutability violation here:

.input {$emailCount :integer}
.match {$emailCount}
* {{{$emailCount} cannot be annotated in the .match because of the .input}}

macchiati and others added 2 commits August 27, 2024 15:12
* Add hybrid option to selection-declaration.md

* Update selection-declaration.md

fixed glitch in original edit

* Update selection-declaration.md

* Apply suggestions from code review

Fixing typos

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update selection-declaration.md

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Eemeli Aro <eemeli@mozilla.com>
@aphillips aphillips merged commit a35e524 into main Aug 28, 2024
1 check passed
@aphillips aphillips deleted the accept-selection-declarations branch August 28, 2024 19:04
aphillips added a commit that referenced this pull request Oct 26, 2024
* Create notes-2024-08-19.md

* Accept attributes design & remove spec note (#845)

* Accept attributes design & remove spec note

* Disallow duplicate attribute names (closes #756)

* Add link to contextual options PR

* Add more prose to tag example text

Co-authored-by: Addison Phillips <addison@unicode.org>

* Mention attribute validity condition in the **_valid_** definition

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update selection-declaration design doc based on mtg / issue discussion (#867)

* Add tests for pattern selection (#863)

* Add tests for pattern selection

* Add missing errors

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add Duplicate Variant to table in test/README.md (#861)

* Add new selection-declaration alternative: Require annotation of selector variables in placeholders (#860)

* Add new selection-declaration alternative: Require annotation of selector variables in placeholders

* Improve examples

* Switch example order

* Update the stability policy (#834)

* Update the stability policy

Based on discussion in the 2024-07-22 call and in PR #829, update the stability policy.

* A deeper, more thorough rewrite

- Standardizes the phrasing completely.
- Moves all potential future changes (which are not, after all, stability policies) to an "important" block
- Removes duplication
- Separates functions, options, and option values into separate guarantees
- Clarifies the note about formatting changing over time

* Update spec/README.md

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Update spec/README.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* remove well-formed

* Update spec/README.md

---------

Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Refine error handling text (#816)

* Refine error handling text

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update fallback text

* Turn bullet point list into paragraphs

* Be more mighty

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Create notes-2024-08-26.md

* Select "Match on variables instead of expressions" for selection-declarations (#824)

* Select "Match on variables instead of expressions" for selection-declarations

* Add hybrid option to selection-declaration.md (#870)

* Add hybrid option to selection-declaration.md

* Update selection-declaration.md

fixed glitch in original edit

* Update selection-declaration.md

* Apply suggestions from code review

Fixing typos

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update selection-declaration.md

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update selection-declaration.md

---------

Co-authored-by: Mark Davis <mark@unicode.org>
Co-authored-by: Addison Phillips <addison@unicode.org>

* Fix "Allow immutable input declarative selectors" example (#874)

* Update README.md (#875)

* Update README.md

* Update README.md

* [DESIGN] Update bidi design document to show proposed design (#871)

* [DESIGN] Update bidi design document to show proposed design

The design I actually think we should adopt is the "hybrid approaches" one. This is a necessary first step on the highway to UAX31 compliance and I think is responsibly contained/managed. It is a hybrid approach, in that it permits testable strict implementations to be created (particularly for message serialization).

This PR consists of moving text around. I added one "pro" to one option also.

* Address comments

* Miscellaneous test fixes (#862)

* Add missing expected bad-selector errors

* Fix expected parts for unsupported-statement test

* Add a few new tests for leading-whitespace and duplicate-variant

* Add tests for escaped-char changes made in #743

* Fix tests for attributes with variable values

* Update contributing and joining info (#876)

* Update contributing and joining info

* Update README.md

* Update CONTRIBUTING.md

* Restore CLA copy

* Clarify error & fallback handling (#879)

* Clarify error & fallback handling

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Select last rather than first attribute

* Drop mention of "starting with Pattern Selection"

* Attributes can't change the formatted output

* Use "nor" instead of "or" regarding attribute restrictions

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Clarify rule selection (#878)

* Clarify rule selection

Fixes #868 

This adds normative SHOULD language to using CLDR plural and ordinal data, which was intended originally.

- clarifies that keyword selection follows exact match
- clarifies the purpose of rule-based selection
- makes non-CLDR-based implementation permitted

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* [DESIGN] Maintaining the Standard, Optional and Unicode Namespace Function Sets (#634)

* Design doc to capture registry maintenance

* Update maintaining-registry.md

* Update exploration/maintaining-registry.md

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Update exploration/maintaining-registry.md

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Add user stories, small updates to RGI

* Update exploration/maintaining-registry.md

* Adding additional detail

* Remove machine readable registry; update prose

* Update maintaining-registry.md

* Further development work

* Update to change format and naming

Per the 2024-08-19 call, we decided to switch towards a specification-per-function model, with statuses. This commit includes the initial set of changes to try and implement this.

* Address some comments.

---------

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Create notes-2024-09-09.md

* Fix a typo in an example (#880)

The upcoming work to implement resolved value might make this patch unnecessary or obsolete, but fixing the typo (missing `{`/`}` around the variable in the pattern) just in case

* Remove forward-compatibility promise and all reserved & private syntax (#883)

* Remove forwards compatibility from stability guarantee

* Drop reserved statements and expressions

* Drop private-use annotations

* Update tests

* Clarify that deprecation is not removal

* Match on variables instead of expressions (#877)

* Match on variables instead of expressions

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Apply suggestions from code review

* Add missing test changes noticed during implementation

* Empty commit to re-trigger CLA check

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Create notes-2024-09-10.md

* Add bidi support and address UAX31/UTS55 requirements (#884)

* Add bidi support and address UAX31/UTS55 requirements

Adds the bidi strong marks ALM, RLM, and LRM plus the bidi isolate controls LRI, RLI, FSI, and PDI to the syntax.

Formally defines optional vs. non-optional whitespace.

Non-optional whitespace must include at least one whitespace character. Optional whitespace may contain only bidi marks (which are invisible)

* Update syntax.md including text from previous PR

* Repair the guidance on strongly directional marks

Include ALM and better specify how to use the marks.

* Fix formatting of the "important"

* Add bidi characters to description of whitespace.

* Permit bidi in a few more places

Add optional whitespace at the start of `variant`

Add optional whitespace around `quoted-pattern`

These changes result in allowing bidi around keys and quoted patterns as intended.

* Update syntax.md ABNF

* Update formatting.md

- Add a note about the difference between formatting and message syntax.
- Clarify the sentence about message directionality.

* Address comment about name/identifier

* Address comments related to bidi in `name`

* Fix variable's location

* Address comment about the list of LRI/PDI targets

* One character typo :-P

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Address comments about rule R3a-1

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Address comment about U+061C

* Change [o]wsp => `o` or `s`

* Match syntax spec to abnf

* Remove *

* Update syntax.md

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/message.abnf

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/message.abnf

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update syntax.md

* Update spec/message.abnf

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Specify `bad-option` for bad digit size option values (#882)

* Specify `bad-option` for bad digit size option values

Fixes #739

* adopt 'non-negative integer'

* Create notes-2024-09-16.md

* Address name and literal equality (#885)

* Address name and literal equality

This change defines equality as discussed in the 2024-09-09 teleconference in the following ways:

- It defines _name_ equality as being under NFC
- It defines _literal_ equality as explicitly **not** under NFC
- It moves _name_ before _identifier_ in that section of text to avoid a forward definition.

Note that this deviates from discussion in 2024-09-09's call in that we didn't discuss literals at length. It also doesn't discuss non-name/non-literal values, which I'll point out are limited to ASCII sequences such as keywords.

* Typo fix

* Add a note about not requiring implementations to actually normalize

* Implement changes dicussed in 2024-09-16 call.

- Make _key_ require NFC for uniqueness/comparison
- Add a note about NFC
- Make _literal_ **_not_** define equality
- Make text in _name_ identical to that in _key_ for consistency

* Update formatting.md to include keys in NFC

* Address comments

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update list of normative changes during the LDML45 period (#890)

* Fix typos in data-model-errors tests (#892)

Fix #886

* Update note on exact numeric match for v46 (#891)

Addresses #887 

Non-normative changes to the notes specifically part of LDML46

* Fix attribute value to be literal (#894)

Fixes #893

* Create notes-2024-09-30.md

* Add Resolved Values and Function Handler sections to formatting (#728)

* Add Resolved Values section to formatting

* Apply suggestions from code review

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Linkify "resolved value"

* Add some examples & explicitly allow wrapping input values

* No throw, only emit

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Add section on Function Handlers, defining the term

* Apply suggestions from code review

* Rephrase initial resolved value definition

* Update spec/formatting.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update resolved value definition again

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Addison Phillips <addison@unicode.org>

* Define function composition for :number and :integer values (#823)

* Define function composition for :number and :integer values

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add operand option priority example

* Add apostrophes'

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Create notes-2024-10-07.md

* Apply NFC normalization during :string key comparison (#905)

* Apply NFC normalization during :string key comparison

* Add link to UAX#15

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add tests for changes due to bidi/whitespace (#902)

* Add tests for changes due to bidi/whitespace

* Correct output

* Make erroneous test a syntax error

* Define function composition for date/time values (#814)

* Define function composition for date/time values

* Apply suggestions from code review

Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>

* Drop the "only"

* Update spec/registry.md

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Make :date and :time composition implementation-defined

---------

Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>
Co-authored-by: Addison Phillips <addison@unicode.org>

* DESIGN: Add alternative designs to the design doc on function composition (#806)

* DESIGN: Add a sequel to the design doc on function composition

This document sketches out some alternatives for the machinery
provided to enable function composition.

The goal is to provide an exhaustive list of alternatives.

* Remove 'part 2' document and move contents to the end of part 1

* Revise introduction to reflect the changed goal

* Edited for conciseness

* Further edits for conciseness

* Give a name to InputType and use it

* Refer to motivating examples

* Update function-composition-part-1.md status

Per 2024-10-14 telecon

* Create notes-2024-10-14.md

* Add test for :integer and :number composition (#907)

* Fix `:integer` option `useGrouping` values (#912)

I noticed that `:integer` does not include the "never" value for the option `useGrouping`. This is a bug.

* Drop syntax note on additional bidi changes (#910)

Drop syntax note on addition bidi changes

* Add tests for changes due to #885 (name/literal equality) (#904)

* Add tests for changes due to #885 (name/literal equality)

* Update test/tests/functions/string.json

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Update test/tests/syntax.json

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Update test/tests/functions/string.json

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Added tests for reordering and special case mapping

* Add another selection test

---------

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Add u: options namespace (#846)

* Move spec/registry.md -> spec/registry/default.md

* Add Unicode Registry definition

* Refer to BCP47, add note about only requiring normal tags

* Call it a namespace

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Fix test file reference

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Apply suggestions from code review

* Update spec/u-namespace.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add mention of functions to namespace description

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Define function composition for :string values (#798)

* Define function composition for :string values

* Update spec/registry.md as suggested by @stasm in #814

* Drop the "only"

* Update text following code review comments

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Drop data model request for feedback on "name" (#909)

* Allow surrogates in content, issue #895 (#906)

* Allow surrogates in content, issue #895

* Grammar and typos, linkify terms, make into a note, and fix 2119 keywords

Thanks Addison!

Co-authored-by: Addison Phillips <addisonI18N@gmail.com>

* Not using "localizable elements"

Co-authored-by: Addison Phillips <addisonI18N@gmail.com>

* Keep syntax.md in sync with message.abnf

* Added note about surrogates to quoted literals

* Moved the note about surrogates from Security Considerations to The Message

* Update spec/syntax.md

* Update spec/syntax.md

* Italicize  in a couple of places

* Implemeted more (all?) feedback from review

---------

Co-authored-by: Addison Phillips <addisonI18N@gmail.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>
Co-authored-by: Elango Cheran <elango@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Mark Davis <mark@unicode.org>
Co-authored-by: Danny Gleckler <daniel.gleckler@d2l.com>
Co-authored-by: Steven R. Loomis <srl295@gmail.com>
Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>
Co-authored-by: Eemeli Aro <eemeli@gmail.com>
Co-authored-by: Mihai Nita <nmihai_2000@yahoo.com>
aphillips added a commit that referenced this pull request Nov 4, 2024
* [DESIGN] Number selection design refinements

This is to build up and capture technical considerations for how to address the issues raised by @eemeli's PR #842.

* Update examples to match changes to syntax

Also responds to the long discussion with @eemeli about significant digits by removing from the example.

* Address 2024-09-16 call comments

This changes the status to "Re-Opened" and adds a link to the PR. Expect to merge this imminently, although discussion on number selection remains.

* Update exploration/number-selection.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update from main (#914)

* Create notes-2024-08-19.md

* Accept attributes design & remove spec note (#845)

* Accept attributes design & remove spec note

* Disallow duplicate attribute names (closes #756)

* Add link to contextual options PR

* Add more prose to tag example text

Co-authored-by: Addison Phillips <addison@unicode.org>

* Mention attribute validity condition in the **_valid_** definition

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update selection-declaration design doc based on mtg / issue discussion (#867)

* Add tests for pattern selection (#863)

* Add tests for pattern selection

* Add missing errors

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add Duplicate Variant to table in test/README.md (#861)

* Add new selection-declaration alternative: Require annotation of selector variables in placeholders (#860)

* Add new selection-declaration alternative: Require annotation of selector variables in placeholders

* Improve examples

* Switch example order

* Update the stability policy (#834)

* Update the stability policy

Based on discussion in the 2024-07-22 call and in PR #829, update the stability policy.

* A deeper, more thorough rewrite

- Standardizes the phrasing completely.
- Moves all potential future changes (which are not, after all, stability policies) to an "important" block
- Removes duplication
- Separates functions, options, and option values into separate guarantees
- Clarifies the note about formatting changing over time

* Update spec/README.md

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Update spec/README.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* remove well-formed

* Update spec/README.md

---------

Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Refine error handling text (#816)

* Refine error handling text

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update fallback text

* Turn bullet point list into paragraphs

* Be more mighty

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Create notes-2024-08-26.md

* Select "Match on variables instead of expressions" for selection-declarations (#824)

* Select "Match on variables instead of expressions" for selection-declarations

* Add hybrid option to selection-declaration.md (#870)

* Add hybrid option to selection-declaration.md

* Update selection-declaration.md

fixed glitch in original edit

* Update selection-declaration.md

* Apply suggestions from code review

Fixing typos

Co-authored-by: Addison Phillips <addison@unicode.org>

* Update selection-declaration.md

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update exploration/selection-declaration.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update selection-declaration.md

---------

Co-authored-by: Mark Davis <mark@unicode.org>
Co-authored-by: Addison Phillips <addison@unicode.org>

* Fix "Allow immutable input declarative selectors" example (#874)

* Update README.md (#875)

* Update README.md

* Update README.md

* [DESIGN] Update bidi design document to show proposed design (#871)

* [DESIGN] Update bidi design document to show proposed design

The design I actually think we should adopt is the "hybrid approaches" one. This is a necessary first step on the highway to UAX31 compliance and I think is responsibly contained/managed. It is a hybrid approach, in that it permits testable strict implementations to be created (particularly for message serialization).

This PR consists of moving text around. I added one "pro" to one option also.

* Address comments

* Miscellaneous test fixes (#862)

* Add missing expected bad-selector errors

* Fix expected parts for unsupported-statement test

* Add a few new tests for leading-whitespace and duplicate-variant

* Add tests for escaped-char changes made in #743

* Fix tests for attributes with variable values

* Update contributing and joining info (#876)

* Update contributing and joining info

* Update README.md

* Update CONTRIBUTING.md

* Restore CLA copy

* Clarify error & fallback handling (#879)

* Clarify error & fallback handling

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Select last rather than first attribute

* Drop mention of "starting with Pattern Selection"

* Attributes can't change the formatted output

* Use "nor" instead of "or" regarding attribute restrictions

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Clarify rule selection (#878)

* Clarify rule selection

Fixes #868 

This adds normative SHOULD language to using CLDR plural and ordinal data, which was intended originally.

- clarifies that keyword selection follows exact match
- clarifies the purpose of rule-based selection
- makes non-CLDR-based implementation permitted

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* [DESIGN] Maintaining the Standard, Optional and Unicode Namespace Function Sets (#634)

* Design doc to capture registry maintenance

* Update maintaining-registry.md

* Update exploration/maintaining-registry.md

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Update exploration/maintaining-registry.md

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Add user stories, small updates to RGI

* Update exploration/maintaining-registry.md

* Adding additional detail

* Remove machine readable registry; update prose

* Update maintaining-registry.md

* Further development work

* Update to change format and naming

Per the 2024-08-19 call, we decided to switch towards a specification-per-function model, with statuses. This commit includes the initial set of changes to try and implement this.

* Address some comments.

---------

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Create notes-2024-09-09.md

* Fix a typo in an example (#880)

The upcoming work to implement resolved value might make this patch unnecessary or obsolete, but fixing the typo (missing `{`/`}` around the variable in the pattern) just in case

* Remove forward-compatibility promise and all reserved & private syntax (#883)

* Remove forwards compatibility from stability guarantee

* Drop reserved statements and expressions

* Drop private-use annotations

* Update tests

* Clarify that deprecation is not removal

* Match on variables instead of expressions (#877)

* Match on variables instead of expressions

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Apply suggestions from code review

* Add missing test changes noticed during implementation

* Empty commit to re-trigger CLA check

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Create notes-2024-09-10.md

* Add bidi support and address UAX31/UTS55 requirements (#884)

* Add bidi support and address UAX31/UTS55 requirements

Adds the bidi strong marks ALM, RLM, and LRM plus the bidi isolate controls LRI, RLI, FSI, and PDI to the syntax.

Formally defines optional vs. non-optional whitespace.

Non-optional whitespace must include at least one whitespace character. Optional whitespace may contain only bidi marks (which are invisible)

* Update syntax.md including text from previous PR

* Repair the guidance on strongly directional marks

Include ALM and better specify how to use the marks.

* Fix formatting of the "important"

* Add bidi characters to description of whitespace.

* Permit bidi in a few more places

Add optional whitespace at the start of `variant`

Add optional whitespace around `quoted-pattern`

These changes result in allowing bidi around keys and quoted patterns as intended.

* Update syntax.md ABNF

* Update formatting.md

- Add a note about the difference between formatting and message syntax.
- Clarify the sentence about message directionality.

* Address comment about name/identifier

* Address comments related to bidi in `name`

* Fix variable's location

* Address comment about the list of LRI/PDI targets

* One character typo :-P

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Address comments about rule R3a-1

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Address comment about U+061C

* Change [o]wsp => `o` or `s`

* Match syntax spec to abnf

* Remove *

* Update syntax.md

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/message.abnf

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/message.abnf

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update syntax.md

* Update spec/message.abnf

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Specify `bad-option` for bad digit size option values (#882)

* Specify `bad-option` for bad digit size option values

Fixes #739

* adopt 'non-negative integer'

* Create notes-2024-09-16.md

* Address name and literal equality (#885)

* Address name and literal equality

This change defines equality as discussed in the 2024-09-09 teleconference in the following ways:

- It defines _name_ equality as being under NFC
- It defines _literal_ equality as explicitly **not** under NFC
- It moves _name_ before _identifier_ in that section of text to avoid a forward definition.

Note that this deviates from discussion in 2024-09-09's call in that we didn't discuss literals at length. It also doesn't discuss non-name/non-literal values, which I'll point out are limited to ASCII sequences such as keywords.

* Typo fix

* Add a note about not requiring implementations to actually normalize

* Implement changes dicussed in 2024-09-16 call.

- Make _key_ require NFC for uniqueness/comparison
- Add a note about NFC
- Make _literal_ **_not_** define equality
- Make text in _name_ identical to that in _key_ for consistency

* Update formatting.md to include keys in NFC

* Address comments

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/syntax.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update list of normative changes during the LDML45 period (#890)

* Fix typos in data-model-errors tests (#892)

Fix #886

* Update note on exact numeric match for v46 (#891)

Addresses #887 

Non-normative changes to the notes specifically part of LDML46

* Fix attribute value to be literal (#894)

Fixes #893

* Create notes-2024-09-30.md

* Add Resolved Values and Function Handler sections to formatting (#728)

* Add Resolved Values section to formatting

* Apply suggestions from code review

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Linkify "resolved value"

* Add some examples & explicitly allow wrapping input values

* No throw, only emit

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Add section on Function Handlers, defining the term

* Apply suggestions from code review

* Rephrase initial resolved value definition

* Update spec/formatting.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update resolved value definition again

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Addison Phillips <addison@unicode.org>

* Define function composition for :number and :integer values (#823)

* Define function composition for :number and :integer values

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add operand option priority example

* Add apostrophes'

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Create notes-2024-10-07.md

* Apply NFC normalization during :string key comparison (#905)

* Apply NFC normalization during :string key comparison

* Add link to UAX#15

Co-authored-by: Addison Phillips <addison@unicode.org>

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add tests for changes due to bidi/whitespace (#902)

* Add tests for changes due to bidi/whitespace

* Correct output

* Make erroneous test a syntax error

* Define function composition for date/time values (#814)

* Define function composition for date/time values

* Apply suggestions from code review

Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>

* Drop the "only"

* Update spec/registry.md

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Update spec/registry.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Make :date and :time composition implementation-defined

---------

Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>
Co-authored-by: Addison Phillips <addison@unicode.org>

* DESIGN: Add alternative designs to the design doc on function composition (#806)

* DESIGN: Add a sequel to the design doc on function composition

This document sketches out some alternatives for the machinery
provided to enable function composition.

The goal is to provide an exhaustive list of alternatives.

* Remove 'part 2' document and move contents to the end of part 1

* Revise introduction to reflect the changed goal

* Edited for conciseness

* Further edits for conciseness

* Give a name to InputType and use it

* Refer to motivating examples

* Update function-composition-part-1.md status

Per 2024-10-14 telecon

* Create notes-2024-10-14.md

* Add test for :integer and :number composition (#907)

* Fix `:integer` option `useGrouping` values (#912)

I noticed that `:integer` does not include the "never" value for the option `useGrouping`. This is a bug.

* Drop syntax note on additional bidi changes (#910)

Drop syntax note on addition bidi changes

* Add tests for changes due to #885 (name/literal equality) (#904)

* Add tests for changes due to #885 (name/literal equality)

* Update test/tests/functions/string.json

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Update test/tests/syntax.json

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Update test/tests/functions/string.json

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Added tests for reordering and special case mapping

* Add another selection test

---------

Co-authored-by: Eemeli Aro <eemeli@gmail.com>

* Add u: options namespace (#846)

* Move spec/registry.md -> spec/registry/default.md

* Add Unicode Registry definition

* Refer to BCP47, add note about only requiring normal tags

* Call it a namespace

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Fix test file reference

Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Apply suggestions from code review

* Update spec/u-namespace.md

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Apply suggestions from code review

Co-authored-by: Addison Phillips <addison@unicode.org>

* Add mention of functions to namespace description

---------

Co-authored-by: Addison Phillips <addison@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>

* Define function composition for :string values (#798)

* Define function composition for :string values

* Update spec/registry.md as suggested by @stasm in #814

* Drop the "only"

* Update text following code review comments

---------

Co-authored-by: Addison Phillips <addison@unicode.org>

* Drop data model request for feedback on "name" (#909)

* Allow surrogates in content, issue #895 (#906)

* Allow surrogates in content, issue #895

* Grammar and typos, linkify terms, make into a note, and fix 2119 keywords

Thanks Addison!

Co-authored-by: Addison Phillips <addisonI18N@gmail.com>

* Not using "localizable elements"

Co-authored-by: Addison Phillips <addisonI18N@gmail.com>

* Keep syntax.md in sync with message.abnf

* Added note about surrogates to quoted literals

* Moved the note about surrogates from Security Considerations to The Message

* Update spec/syntax.md

* Update spec/syntax.md

* Italicize  in a couple of places

* Implemeted more (all?) feedback from review

---------

Co-authored-by: Addison Phillips <addisonI18N@gmail.com>

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>
Co-authored-by: Elango Cheran <elango@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Mark Davis <mark@unicode.org>
Co-authored-by: Danny Gleckler <daniel.gleckler@d2l.com>
Co-authored-by: Steven R. Loomis <srl295@gmail.com>
Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>
Co-authored-by: Eemeli Aro <eemeli@gmail.com>
Co-authored-by: Mihai Nita <nmihai_2000@yahoo.com>

* Add serialization proposal

* Revert "Add serialization proposal"

This reverts commit 17af553.

* Revert "Update from main (#914)"

This reverts commit da9377b.

* Add serialization proposal

---------

Co-authored-by: Eemeli Aro <eemeli@mozilla.com>
Co-authored-by: Elango Cheran <elango@unicode.org>
Co-authored-by: Tim Chevalier <tjc@igalia.com>
Co-authored-by: Mark Davis <mark@unicode.org>
Co-authored-by: Danny Gleckler <daniel.gleckler@d2l.com>
Co-authored-by: Steven R. Loomis <srl295@gmail.com>
Co-authored-by: Stanisław Małolepszy <sta@malolepszy.org>
Co-authored-by: Eemeli Aro <eemeli@gmail.com>
Co-authored-by: Mihai Nita <nmihai_2000@yahoo.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Agenda+ Requested for upcoming teleconference design Design principles, decisions syntax Issues related with MF Syntax
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants