templateContents
= twr:templateWithReplacement p:templateParam* { return twr.concat(p) }
/ twr:templateWithOutReplacement p:templateParam* { return twr.concat(p) }
+ / twr:templateWithOutFirstParameter p:templateParam* { return twr.concat(p) }
/ t:templateName p:templateParam* { return p.length ? [ t, p ] : [ t ] }
templateWithReplacement
templateWithOutReplacement
= t:templateName ":" p:paramExpression { return [ t, p ] }
+templateWithOutFirstParameter
+ = t:templateName ":" { return [ t, "" ] }
+
templateParam
= "|" e:paramExpression* { return e.length > 1 ? [ "CONCAT" ].concat(e) : e[0]; }
templateName
= tn:[A-Za-z_]+ { return tn.join('').toUpperCase() }
+/* TODO: Update to reflect separate piped and unpiped handling */
link
= "[[" w:expression "]]" { return [ 'WLINK', w ]; }