Added wfProfileOut for early returns in ResourceLoaderModule::getDefinitionMtime
[mediawiki.git] / resources / mediawiki / mediawiki.jqueryMsg.peg
blob7879d6fa222c121bed1b35deba2b224f899dce74
1 /* PEG grammar for a subset of wikitext, useful in the MediaWiki frontend */
3 start
4   = e:expression* { return e.length > 1 ? [ "CONCAT" ].concat(e) : e[0]; }
6 expression
7   = template
8   / link
9   / extlink
10   / replacement
11   / literal
13 paramExpression
14   = template
15   / link
16   / extlink
17   / replacement
18   / literalWithoutBar
20 template
21   = "{{" t:templateContents "}}" { return t; }
23 templateContents
24   = twr:templateWithReplacement p:templateParam* { return twr.concat(p) }
25   / twr:templateWithOutReplacement p:templateParam* { return twr.concat(p) }
26   / t:templateName p:templateParam* { return p.length ? [ t, p ] : [ t ] }
28 templateWithReplacement
29   = t:templateName ":" r:replacement { return [ t, r ] }
31 templateWithOutReplacement
32   = t:templateName ":" p:paramExpression { return [ t, p ] }
34 templateParam
35   = "|" e:paramExpression* { return e.length > 1 ? [ "CONCAT" ].concat(e) : e[0]; }
37 templateName
38   = tn:[A-Za-z_]+ { return tn.join('').toUpperCase() }
40 /* TODO: Update to reflect separate piped and unpiped handling */
41 link
42   = "[[" w:expression "]]" { return [ 'WLINK', w ]; }
44 extlink
45   = "[" url:url whitespace text:expression "]" { return [ 'LINK', url, text ] }
47 url
48   = url:[^ ]+ { return url.join(''); }
50 whitespace
51   = [ ]+
53 replacement
54   = '$' digits:digits { return [ 'REPLACE', parseInt( digits, 10 ) - 1 ] }
56 digits
57   = [0-9]+
59 literal
60   = lit:escapedOrRegularLiteral+ { return lit.join(''); }
62 literalWithoutBar
63   = lit:escapedOrLiteralWithoutBar+ { return lit.join(''); }
65 escapedOrRegularLiteral
66   = escapedLiteral
67   / regularLiteral
69 escapedOrLiteralWithoutBar
70   = escapedLiteral
71   / regularLiteralWithoutBar
73 escapedLiteral
74   = "\\" escaped:. { return escaped; }
76 regularLiteral
77   = [^{}\[\]$\\]
79 regularLiteralWithoutBar
80   = [^{}\[\]$\\|]