Change filtering model again to allow more complex filters.

This commit is contained in:
Ian Gulliver
2014-07-01 17:23:41 -07:00
parent 8b7b0670db
commit a49c9f6db8
2 changed files with 13 additions and 13 deletions

View File

@@ -293,8 +293,6 @@ mediawiki = rr.Parser({
'main': rr.Node('wikidoc', rr.Sequence( 'main': rr.Node('wikidoc', rr.Sequence(
rr.ZeroOrMore(rr.Ref('paragraph')), rr.ZeroOrMore(rr.Ref('paragraph')),
rr.EndOfText())) rr.EndOfText()))
}, { }, [
'bi': [ rr.SplitTagAndNest('bi', ['b', 'i'])
rr.SplitTagAndNest('b', 'i') ]);
]
});

View File

@@ -726,15 +726,18 @@ rr.SingleLineText = function() {
/** /**
* @param {...string} var_args * @param {string} originalName
* @param {Array.<string>} newNames
* @return {rr.typeFilter} * @return {rr.typeFilter}
*/ */
rr.SplitTagAndNest = function(var_args) { rr.SplitTagAndNest = function(originalName, newNames) {
var hierarchy = Array.prototype.slice.call(arguments);
return function(node) { return function(node) {
if (node.nodeName.toLowerCase() != originalName) {
return;
}
var outerNode, innerNode; var outerNode, innerNode;
for (var i = 0; i < hierarchy.length; i++) { for (var i = 0; i < newNames.length; i++) {
var newNode = document.createElement(hierarchy[i]); var newNode = document.createElement(newNames[i]);
if (i == 0) { if (i == 0) {
outerNode = innerNode = newNode; outerNode = innerNode = newNode;
} else { } else {
@@ -759,9 +762,8 @@ rr.SplitTagAndNest = function(var_args) {
* @param {Object.<string, rr.typeFilter>} filters * @param {Object.<string, rr.typeFilter>} filters
*/ */
rr.ApplyFilters = function(node, filters) { rr.ApplyFilters = function(node, filters) {
var nodeFilters = filters[node.nodeName.toLowerCase()] || []; for (var i = 0; i < filters.length; i++) {
for (var i = 0; i < nodeFilters.length; i++) { filters[i](node);
nodeFilters[i](node);
} }
for (var i = 0; i < node.childNodes.length; i++) { for (var i = 0; i < node.childNodes.length; i++) {
rr.ApplyFilters(node.childNodes[i], filters); rr.ApplyFilters(node.childNodes[i], filters);