Syntax 0.7 is now feature-frozen

I’m happy to announce that all issues in the Syntax 0.7 milestone have been closed! Thanks to everyone who commented and contributed!

Summary of accepted changes

Relaxation of the indentation requirement

Thanks to (#87), attributes, variant keys and placeables may now be written without indent. This makes it finally possible to write the closing brace of a placeable on the first column of a line! This has been a very common paper-cut and I’m very happy that Fluent will no longer surprise translation authors with this tiny quirk.

emails = { $unreadEmails ->
    [one] You have one unread email.
   *[other] You have { $unreadEmails } unread emails.
}

Multiline TextElements still require indent to aid error recovery.

multiline-text =
    Lorem ipsum dolor sit amet, consectetur adipiscing elit,
    sed do eiusmod tempor incididunt ut labore et dolore
    magna aliqua.

Additionally, the syntax whitespace (i.e. the whitespace around grammar productions rather than as text content of translations) has been more strictly defined as allowing only new lines and the space character. Tabs are now parsed as part of TextElement's value and are not allowed outside of them (#165).

Line endings changes

We removed support for CR as a line ending (#154). Valid line endings for Fluent files are: LF (U+0A) and CRLF (U+0D U+0A).

The AST now stores line endings using the line feed character (LF, U+0A), even if the input file used CRLF or a mix of CRLF and LF (#163).

Changes to variant keys

Variant keys can now only be NumberLiterals or Identifiers (#127). Using multi-word keys is now not permitted. There are plans, however, to allow more types and characters to be used in variant names. See #117 and #90.

Next steps

The feature-frozen state means that we don’t plan to extend the scope of Syntax 0.7 any more. We’ll now focus on the implementations in JavaScript, Python and Rust. If no blocking issues are found in the spec during this work, Syntax 0.7 will be published around mid-September.

In parallel, we’re going to start working on the Syntax 0.8 milestone. I’ll kick off an RFC for it tomorrow.