Hi Matjaž,

Yes, it very much is. In L20n grammar [0] we define strings as complex 
structures which can contain so called expanders.

In runtime we optimize it by separating simple and complex strings. Simple 
string is just a string:

<foo "hey world!">

Complex string is an Array|List or strings and expressions:

<foo "one {{ n }} two {{ $m }}">

The latter will produce:
[
  "one ",
  {t: "id", v: "n"},
  " two ",
  {t: "var", v: "m"}
]

It actually is not a naive optimization. Because of the way expanders work, I 
cannot in the parser find the end of the string without parsing the expanders. 
Look at this:

<foo "Hello {{ @global("foo") }}">

Without lexing the string, I would have to assume that the end of the string is 
at global(". In the old days (huh!) we tried to approach of double parsing - 
where such an entity would require escaped quotes and then would be 
double-parser, first time to just find the whole string (and remove 
backslashes), second to parse expander in the string[1]:

<foo "Hello {{ @global(\"foo\") }}">

This unfortunately didn't work [2] (I'd like to point out that arguments for 
double-parsing and against double-parsing were raised, with the full power of 
reason, by Stas over the span of two days. Stas is amazing).

===============

Bottom line is that I believe that parser should store parsed complex string. 
What we may want to do is:

a) Store a source of the string as well

which would require the Array|List of a complex string to be turned into an 
object with {'v': [], 's': "..."} value and source.

b) Let you serialize and parse string easily

which would keep the AST as it is, but you'd have access to 
Serializer.serializeString() and Parser.parseString() which you'd be using 
whenever a value is an Array|List.

How does it sound to you?

zb.


[0] http://l20n.github.io/spec/grammar.html
[1] https://bugzilla.mozilla.org/show_bug.cgi?id=918655#c11 , 
https://bugzilla.mozilla.org/show_bug.cgi?id=918655#c16
[2] https://bugzilla.mozilla.org/show_bug.cgi?id=918655
_______________________________________________
tools-l10n mailing list
[email protected]
https://lists.mozilla.org/listinfo/tools-l10n

Reply via email to