Brion Vibber wrote:
Any thoughts? Does anybody happen to have a PHP implementation of a Lua or JavaScript interpreter?
Rather than reinventing the wheel, why not look at fixing the existing template syntax?
The biggest problem that I see is the excessive dependence on the parentheses { and }. In a moderately complex template, you've got a mix of double {{...}} and triple {{{...}}} brackets, occasionally nested, that result in an unreadable mess.
If {{{xxx}}} was replaced with a local-variable-like syntax, say $xxx (where xxx is whatever name you wish, $1, $2... for unnamed), then the mess is reduced from something like:
{{blah|{{{xxx}}}|{{{yyy}}}}}{{#if: {{{ggg}}}|{{{h}}}|{{{4}}}}}{{{5}}}
becomes:
{{blah|$xxx|$yyy}}{{#if: $ggg|$h|$4}}$5
which is somewhat more tolerable. (whether or not the above makes real sense is not my objective - I'm just trying to show how removing the blizzard of {{{}}} reduces visual clutter).
Since $ doesn't have a close, that makes things like {{{xxx|default value}}} slightly problematic, since "$xxx|$default_value" is slightly more awkward to parse. But that only shows how templates are also overly reliant on the pipe (|) symbol - as anyone who has tried to use tables in templates has discovered.
If parsing templates allows the semi-restricted use of a couple of symbols (unlike parsing other pages - I know... don't go there), then both {{{}}} and | could be replaced with $ and I-don't-care-what-make-a-choice. Then templates become a tad more readable and we get rid of kludges like {{!}} and other clutter or confusion in tables, parser functions, etc.
As an aside - obliging template writers to declare variables used in the template, say, as a definition of the input format at the top of the template definition, would make parsing the variables out later a tad easier. If it's declared, it's a variable; if not, it's not a variable and is treated as plain text. Thus the first line of a template would be the example of its use:
Template:foobar ---------------------------------------------------------------------- {{Foobar|$var1|$var2|$andAnotherVar}} ...(implementation)... ----------------------------------------------------------------------
But what do I know, I've only implemented one OO language compiler in my life and that was 20 years ago.
Mike