From e401d1e77b3d2b29f846e5f360c9765e17f288e9 Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sun, 29 Jun 2014 22:23:06 -0700 Subject: [PATCH] Big grammar expansion. --- grammars/mediawiki.js | 270 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 234 insertions(+), 36 deletions(-) diff --git a/grammars/mediawiki.js b/grammars/mediawiki.js index 7edc361..3bac935 100644 --- a/grammars/mediawiki.js +++ b/grammars/mediawiki.js @@ -1,68 +1,266 @@ var mediawiki = { - 'b': rr.Node('b', rr.Sequence( - rr.Literal("'''"), - rr.Ref('wikichunk'), - rr.Literal("'''"))), - 'del': rr.Node('del', rr.Sequence( - rr.Literal(''), - rr.Ref('wikichunk'), - rr.Literal(''))), - 'h2': rr.Node('h2', rr.Sequence( + 'list-blockquote1': rr.Node('blockquote', rr.Sequence( + rr.StartOfLine(), + rr.Literal(': '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-blockquote2': rr.Node('blockquote2', rr.Sequence( + rr.StartOfLine(), + rr.Literal(':: '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-blockquote3': rr.Node('blockquote3', rr.Sequence( + rr.StartOfLine(), + rr.Literal('::: '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-blockquote4': rr.Node('blockquote4', rr.Sequence( + rr.StartOfLine(), + rr.Literal(':::: '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-blockquote5': rr.Node('blockquote5', rr.Sequence( + rr.StartOfLine(), + rr.Literal('::::: '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-def': rr.Node('def', rr.Sequence( + rr.StartOfLine(), + rr.Literal(';'), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-h2': rr.Node('h2', rr.Sequence( rr.StartOfLine(), rr.Literal('== '), - rr.SingleLineText(), + rr.Ref('singleline-wikichunk'), rr.Literal(' =='), rr.EndOfLine())), - 'h3': rr.Node('h3', rr.Sequence( + 'list-h3': rr.Node('h3', rr.Sequence( rr.StartOfLine(), rr.Literal('=== '), - rr.SingleLineText(), + rr.Ref('singleline-wikichunk'), rr.Literal(' ==='), rr.EndOfLine())), - 'h4': rr.Node('h4', rr.Sequence( + 'list-h4': rr.Node('h4', rr.Sequence( rr.StartOfLine(), rr.Literal('==== '), - rr.SingleLineText(), + rr.Ref('singleline-wikichunk'), rr.Literal(' ===='), rr.EndOfLine())), - 'h5': rr.Node('h5', rr.Sequence( + 'list-h5': rr.Node('h5', rr.Sequence( rr.StartOfLine(), rr.Literal('===== '), - rr.SingleLineText(), + rr.Ref('singleline-wikichunk'), rr.Literal(' ====='), rr.EndOfLine())), - 'h6': rr.Node('h6', rr.Sequence( + 'list-h6': rr.Node('h6', rr.Sequence( rr.StartOfLine(), rr.Literal('====== '), - rr.SingleLineText(), + rr.Ref('singleline-wikichunk'), rr.Literal(' ======'), rr.EndOfLine())), - 'hr': rr.Node('hr', rr.Sequence( + 'list-hr': rr.Node('hr', rr.Sequence( rr.StartOfLine(), rr.Literal('----'), rr.EndOfLine())), - 'i': rr.Node('i', rr.Sequence( + 'list-olli1': rr.Node('olli1', rr.Sequence( + rr.StartOfLine(), + rr.Literal('# '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-olli2': rr.Node('olli2', rr.Sequence( + rr.StartOfLine(), + rr.Literal('## '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-olli3': rr.Node('olli3', rr.Sequence( + rr.StartOfLine(), + rr.Literal('### '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-pre': rr.Node('pre', rr.Sequence( + rr.StartOfLine(), + rr.Literal(' '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-ulli1': rr.Node('ulli1', rr.Sequence( + rr.StartOfLine(), + rr.Literal('* '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-ulli2': rr.Node('ulli2', rr.Sequence( + rr.StartOfLine(), + rr.Literal('** '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + 'list-ulli3': rr.Node('ulli3', rr.Sequence( + rr.StartOfLine(), + rr.Literal('*** '), + rr.Ref('singleline-wikichunk'), + rr.EndOfLine())), + + 'multiline-b': rr.Node('b', rr.Sequence( + rr.Literal("'''"), + rr.Ref('multiline-wikichunk'), + rr.Literal("'''"))), + 'multiline-bi': rr.Node('bi', rr.Sequence( + rr.Literal("'''''"), + rr.Ref('multiline-wikichunk'), + rr.Literal("'''''"))), + 'multiline-blockquote': rr.Node('blockquote', rr.Sequence( + rr.Literal("
"), + rr.Ref('multiline-wikichunk'), + rr.Literal("
"))), + 'multiline-code': rr.Node('code', rr.Sequence( + rr.Literal(""), + rr.Ref('multiline-wikichunk'), + rr.Literal(""))), + 'multiline-comment': rr.Node('comment', rr.Sequence( + rr.Literal(""))), + 'multiline-del1': rr.Node('del', rr.Sequence( + rr.Literal(''), + rr.Ref('multiline-wikichunk'), + rr.Literal(''))), + 'multiline-del2': rr.Node('del', rr.Sequence( + rr.Literal(''), + rr.Ref('multiline-wikichunk'), + rr.Literal(''))), + 'multiline-i': rr.Node('i', rr.Sequence( rr.Literal("''"), - rr.Ref('wikichunk'), + rr.Ref('multiline-wikichunk'), rr.Literal("''"))), - 'nowiki': rr.Sequence( + 'multiline-nowiki': rr.Sequence( rr.Literal(''), rr.MultiLineText(), rr.Literal('')), - 'text': rr.MultiLineText(), - 'wikichunk': rr.Or( - rr.Ref('b'), - rr.Ref('del'), - rr.Ref('h2'), - rr.Ref('h3'), - rr.Ref('h4'), - rr.Ref('h5'), - rr.Ref('h6'), - rr.Ref('hr'), - rr.Ref('i'), - rr.Ref('nowiki'), - rr.Ref('text')), + 'multiline-pre': rr.Node('pre', rr.Sequence( + rr.Literal("
"),
+      rr.MultiLineText(),
+      rr.Literal("
"))), + 'multiline-tt': rr.Node('tt', rr.Sequence( + rr.Literal(''), + rr.Ref('multiline-wikichunk'), + rr.Literal(''))), + 'multiline-u1': rr.Node('u', rr.Sequence( + rr.Literal(''), + rr.Ref('multiline-wikichunk'), + rr.Literal(''))), + 'multiline-u2': rr.Node('u', rr.Sequence( + rr.Literal(''), + rr.Ref('multiline-wikichunk'), + rr.Literal(''))), + + 'singleline-b': rr.Node('b', rr.Sequence( + rr.Literal("'''"), + rr.Ref('singleline-wikichunk'), + rr.Literal("'''"))), + 'singleline-bi': rr.Node('bi', rr.Sequence( + rr.Literal("'''''"), + rr.Ref('singleline-wikichunk'), + rr.Literal("'''''"))), + 'singleline-code': rr.Node('code', rr.Sequence( + rr.Literal(""), + rr.Ref('singleline-wikichunk'), + rr.Literal(""))), + 'singleline-comment': rr.Node('comment', rr.Sequence( + rr.Literal(""))), + 'singleline-del1': rr.Node('del', rr.Sequence( + rr.Literal(''), + rr.Ref('singleline-wikichunk'), + rr.Literal(''))), + 'singleline-del2': rr.Node('del', rr.Sequence( + rr.Literal(''), + rr.Ref('singleline-wikichunk'), + rr.Literal(''))), + 'singleline-i': rr.Node('i', rr.Sequence( + rr.Literal("''"), + rr.Ref('singleline-wikichunk'), + rr.Literal("''"))), + 'singleline-nowiki': rr.Sequence( + rr.Literal(''), + rr.MultiLineText(), + rr.Literal('')), + 'singleline-pre': rr.Node('pre', rr.Sequence( + rr.Literal("
"),
+      rr.SingleLineText(),
+      rr.Literal("
"))), + 'singleline-tt': rr.Node('tt', rr.Sequence( + rr.Literal(''), + rr.Ref('singleline-wikichunk'), + rr.Literal(''))), + 'singleline-u1': rr.Node('u', rr.Sequence( + rr.Literal(''), + rr.Ref('singleline-wikichunk'), + rr.Literal(''))), + 'singleline-u2': rr.Node('u', rr.Sequence( + rr.Literal(''), + rr.Ref('singleline-wikichunk'), + rr.Literal(''))), + + 'special-nowikisingle': rr.Literal(''), + + 'multiline-wikichunk': rr.Or( + rr.Ref('list-blockquote1'), + rr.Ref('list-blockquote2'), + rr.Ref('list-blockquote3'), + rr.Ref('list-blockquote4'), + rr.Ref('list-blockquote5'), + rr.Ref('list-def'), + rr.Ref('list-h2'), + rr.Ref('list-h3'), + rr.Ref('list-h4'), + rr.Ref('list-h5'), + rr.Ref('list-h6'), + rr.Ref('list-hr'), + rr.Ref('list-olli1'), + rr.Ref('list-olli2'), + rr.Ref('list-olli3'), + rr.Ref('list-pre'), + rr.Ref('list-ulli1'), + rr.Ref('list-ulli2'), + rr.Ref('list-ulli3'), + + rr.Ref('multiline-b'), + rr.Ref('multiline-bi'), + rr.Ref('multiline-blockquote'), + rr.Ref('multiline-code'), + rr.Ref('multiline-comment'), + rr.Ref('multiline-del1'), + rr.Ref('multiline-del2'), + rr.Ref('multiline-i'), + rr.Ref('multiline-nowiki'), + rr.Ref('multiline-pre'), + rr.Ref('multiline-tt'), + rr.Ref('multiline-u1'), + rr.Ref('multiline-u2'), + + rr.Ref('special-nowikisingle'), + + rr.MultiLineText()), + + 'singleline-wikichunk': rr.Or( + rr.Ref('singleline-b'), + rr.Ref('singleline-bi'), + rr.Ref('singleline-code'), + rr.Ref('singleline-comment'), + rr.Ref('singleline-del1'), + rr.Ref('singleline-del2'), + rr.Ref('singleline-i'), + rr.Ref('singleline-nowiki'), + rr.Ref('singleline-pre'), + rr.Ref('singleline-tt'), + rr.Ref('singleline-u1'), + rr.Ref('singleline-u2'), + + rr.Ref('special-nowikisingle'), + + rr.SingleLineText()), + 'wikidoc': rr.Node('wikidoc', rr.Sequence( - rr.ZeroOrMore(rr.Ref('wikichunk')), + rr.ZeroOrMore(rr.Ref('multiline-wikichunk')), rr.EndOfText())) };