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(
rr.ZeroOrMore(rr.Ref('paragraph')),
rr.EndOfText()))
}, {
'bi': [
rr.SplitTagAndNest('b', 'i')
]
});
}, [
rr.SplitTagAndNest('bi', ['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}
*/
rr.SplitTagAndNest = function(var_args) {
var hierarchy = Array.prototype.slice.call(arguments);
rr.SplitTagAndNest = function(originalName, newNames) {
return function(node) {
if (node.nodeName.toLowerCase() != originalName) {
return;
}
var outerNode, innerNode;
for (var i = 0; i < hierarchy.length; i++) {
var newNode = document.createElement(hierarchy[i]);
for (var i = 0; i < newNames.length; i++) {
var newNode = document.createElement(newNames[i]);
if (i == 0) {
outerNode = innerNode = newNode;
} else {
@@ -759,9 +762,8 @@ rr.SplitTagAndNest = function(var_args) {
* @param {Object.<string, rr.typeFilter>} filters
*/
rr.ApplyFilters = function(node, filters) {
var nodeFilters = filters[node.nodeName.toLowerCase()] || [];
for (var i = 0; i < nodeFilters.length; i++) {
nodeFilters[i](node);
for (var i = 0; i < filters.length; i++) {
filters[i](node);
}
for (var i = 0; i < node.childNodes.length; i++) {
rr.ApplyFilters(node.childNodes[i], filters);