1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
'use strict';
module.exports = visit;
var is = require('unist-util-is');
var CONTINUE = true;
var SKIP = 'skip';
var EXIT = false;
visit.CONTINUE = CONTINUE;
visit.SKIP = SKIP;
visit.EXIT = EXIT;
function visit(tree, test, visitor, reverse) {
if (typeof test === 'function' && typeof visitor !== 'function') {
reverse = visitor;
visitor = test;
test = null;
}
one(tree);
/* Visit a single node. */
function one(node, index, parent) {
var result;
index = index || (parent ? 0 : null);
if (!test || node.type === test || is(test, node, index, parent || null)) {
result = visitor(node, index, parent || null);
}
if (result === EXIT) {
return result;
}
if (node.children && result !== SKIP) {
return all(node.children, node) === EXIT ? EXIT : result;
}
return result;
}
/* Visit children in `parent`. */
function all(children, parent) {
var step = reverse ? -1 : 1;
var index = (reverse ? children.length : -1) + step;
var child;
var result;
while (index > -1 && index < children.length) {
child = children[index];
result = child && one(child, index, parent);
if (result === EXIT) {
return result;
}
index = typeof result === 'number' ? result : index + step;
}
return CONTINUE;
}
}
|