On Tue, Jul 4, 2017 at 10:15 AM, Daniel Dekany <ddek...@apache.org> wrote: > Tuesday, July 4, 2017, 7:57:18 AM, Woonsan Ko wrote: > >> On Wed, Jun 21, 2017 at 2:30 PM, Daniel Dekany <ddek...@apache.org> wrote: >>> Friday, June 16, 2017, 8:41:37 PM, Daniel Dekany wrote: >>> >>>> A problem in FM2 is that when calling a directive (as a macro), either >>>> all parameters are positional (`<@message "Hi" 2 />`), or all >>>> parameters are named (`<@message content="Hi" height=2 />`); you can't >>>> mix the two (`<@message "Hi" height=2 />`). Also you can't use named >>>> parameters for functions/methods, only for directives. Worse, core >>>> directives don't even use named parameters, but some keyword like >>>> `as`, `using`... their syntax is hard coded into the parser, which is >>>> not nice, and will be a problem for the custom dialects feature. >>>> >>>> I think that with the exception of a few core directives (see them >>>> later) all directive calls should be like this, if for now (in this >>>> thread) we ignore loop variables: >>>> >>>> <#name posPar1 posPar2 namedPar1Name=namedPar1Value >>>> namedPar2=namedPar2Value> >>> >>> An adjustment to the above... I think that we should require comma >>> between positional arguments (but not between positional and named >>> arguments and between named arguments): >> >> "but not between ..." means that a comma can be *optionally* placed >> between named arguments or between a positioned argument and a named >> argument, right? > > I wouldn't allow that. If we do, then where to put comma becomes a > matter of taste, and the taste of individuals in the same project > differ, or for OS projects, whoever bumps into the templates might has > a different taste. So overall, you just end up with chaos, and if some > cares much, it's just unnecessary struggle (which of the 3 > combinations is the Right Way). So I believe it's better overall if we > decide what's the right way for everyone... Especially as our taste is > based on more knowledge. FTL tags have this HTML-ish look-and-feel, so > naturally you write `<#foo n1=v1 n2=v2 m3=v3>`, and not > `<#foo n1=v1, n2=v2, m3=v3>`. So now, if we add a single positional > parameter, I think most will find it consistent like this: > `<#foo v0 n1=v1 n2=v2 m3=v3>` (like in `<@message "Hi" height=2 />`). > Still no comas anywhere. In the hopefully rare case when you have > multiple positional parameters, we unfortunately ran into ambiguity > issues, so then, and only then, and only between the positional > parameters you add commas. I think that's also matches common > conventions, where if you list something, you put commas *between* the > listed items, but not after the last one. Named parameters aren't > really listed (their order doesn't mater). So it's more logical to > only use comma where you must, not just a matter of taste.
I concur with you now! Indeed, listing (positional args) requires comma delimiter, but non-listing (named args) doesn't. > > BTW, I was never a fan of this HTML-ish look-and-feel, because of the > confusing differences; people keep writing `foo="${x}"` instead of > `foo=x`. But that's the FM tradition, so I try to remain consistent > with the original idea. (When we manage to separate the expression > syntax from the top-level syntax, I think I will try to introduce an > officially supported alternative, something like `#foo(v0, n1=v1, > n2=v2, m3=v3)`.) That sounds great, too! Thanks again for the thorough thoughts and clarifications! Cheers, Woonsan > >> In other words, it is allowed to omit a comma between positional arg >> and named arg or between named args. >> >> Woonsan >> >>> >>> <#name posPar1, posPar2 namedPar1Name=namedPar1Value >>> namedPar2=namedPar2Value> >> > > -- > Thanks, > Daniel Dekany >