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