projectfluent / fluent

Fluent — planning, spec and documentation
https://projectfluent.org
Apache License 2.0
1.37k stars 43 forks source link

Select expression breaks if you have dot character on the second line of any branch #342

Open slavafomin opened 2 years ago

slavafomin commented 2 years ago

Hello!

Consider the following example:

shared-photos =
  {$photoCount ->
    *[one]
      .
  }
  "

https://projectfluent.org/play/?id=fcbc0ff1daf506a0e6943ab9658b1340

This causes a syntax error. However, if you would replace dot character with any other one, it's working OK.

These also causes errors:

shared-photos =
  "
  {$photoCount ->
    *[one]
      A
      .
  }
  "
shared-photos =
  "
  {$photoCount ->
    *[one]
      .A
  }
  "

It looks like first character of the line can't be a dot. Why is that?

slavafomin commented 2 years ago

Now, I'm guessing that this relates to the attributes feature, however, this shouldn't be a problem, because parser shouldn't expect attributes in the middle of select expression. I think it's a parser bug.

zbraniecki commented 2 years ago

It is not. FTL syntax focuses on error recoverability from any syntactic error ensuring that the parser can find the start of the next entry.

In result a compromise had to be made for multi-line values - several characters have to be escaped - https://github.com/projectfluent/fluent/blob/master/spec/fluent.ebnf#L110

You need { "." } if you need . character at the beginning of an intended line.