forked from meteor/meteor
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathjsparse-docs.js
67 lines (60 loc) · 2.18 KB
/
jsparse-docs.js
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
66
67
if (Meteor.isClient) {
Template.page.nodespec = function (fn) {
var parts = [fn()];
var replaceParts = function(regex, replacementFunc) {
var newParts = [];
_.each(parts, function (part) {
if (typeof part !== 'string') {
newParts.push(part);
return;
}
regex.lastIndex = 0;
var charsTaken = 0;
var matchResult;
while ((matchResult = regex.exec(part))) {
var matchIndex = matchResult.index;
if (matchIndex > charsTaken)
newParts.push(part.substring(charsTaken, matchIndex));
charsTaken = regex.lastIndex;
var replacementParts = replacementFunc(matchResult);
newParts.push.apply(newParts, _.toArray(replacementParts));
}
if (charsTaken < part.length)
newParts.push(part.slice(charsTaken));
});
parts = newParts;
};
parts.unshift(['<div class="nodespec">']);
parts.push(['</div>']);
replaceParts(/".*?"/g, function (match) {
return [['<span class="str">', Handlebars._escape(match[0]), '</span>']];
});
replaceParts(/`(.*?)`/g, function (match) {
return [['<span class="token">', Handlebars._escape(match[1]), '</span>']];
});
replaceParts(/[A-Z]{3,}/g, function (match) {
return [['<span class="tokentype">', Handlebars._escape(match[0]), '</span>']];
});
replaceParts(/[a-z]\w*/g, function (match) {
return [['<span class="ref">', Handlebars._escape(match[0]), '</span>']];
});
replaceParts(/[\[\]()|.,*?]/g, function (match) {
return [['<span class="punc">'], match[0], ['</span>']];
});
replaceParts(/,/g, function (match) {
return [['<span class="comma">'], match[0], ['</span>']];
});
replaceParts(/\|/g, function (match) {
return [['<span class="or">'], match[0], ['</span>']];
});
var html = _.map(parts, function (part) {
if (typeof part === "string")
return Handlebars._escape(part);
return part.join('');
}).join('');
return new Handlebars.SafeString(html);
};
Template.page.spacer = function () {
return new Handlebars.SafeString('<div class="spacer"> </div>');
};
}