diff --git a/grammars/mediawiki.js b/grammars/mediawiki.js index 25800db..bfacdba 100644 --- a/grammars/mediawiki.js +++ b/grammars/mediawiki.js @@ -293,6 +293,8 @@ mediawiki = rr.Parser({ 'main': rr.Node('wikidoc', rr.Sequence( rr.ZeroOrMore(rr.Ref('paragraph')), rr.EndOfText())) -}, [ - rr.SplitTagAndNest('bi', ['b', 'i']) -]); +}, { + 'bi': [ + rr.SplitTagAndNest('b', 'i') + ] +}); diff --git a/recentrunes.js b/recentrunes.js index 91fddae..1e18bd8 100644 --- a/recentrunes.js +++ b/recentrunes.js @@ -726,18 +726,15 @@ rr.SingleLineText = function() { /** - * @param {string} originalName - * @param {Array.} newNames + * @param {...string} var_args * @return {rr.typeFilter} */ -rr.SplitTagAndNest = function(originalName, newNames) { +rr.SplitTagAndNest = function(var_args) { + var hierarchy = Array.prototype.slice.call(arguments); return function(node) { - if (node.nodeName.toLowerCase() != originalName) { - return; - } var outerNode, innerNode; - for (var i = 0; i < newNames.length; i++) { - var newNode = document.createElement(newNames[i]); + for (var i = 0; i < hierarchy.length; i++) { + var newNode = document.createElement(hierarchy[i]); if (i == 0) { outerNode = innerNode = newNode; } else { @@ -762,8 +759,9 @@ rr.SplitTagAndNest = function(originalName, newNames) { * @param {Object.} filters */ rr.ApplyFilters = function(node, filters) { - for (var i = 0; i < filters.length; i++) { - filters[i](node); + var nodeFilters = filters[node.nodeName.toLowerCase()] || []; + for (var i = 0; i < nodeFilters.length; i++) { + nodeFilters[i](node); } for (var i = 0; i < node.childNodes.length; i++) { rr.ApplyFilters(node.childNodes[i], filters);