-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.js
62 lines (50 loc) · 1.42 KB
/
index.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
var tokenizer = require('./lib/tokenizer')
var visitor = require('./lib/visitor')
var utils = require('./lib/utils')
module.exports = variables
function variables (options) {
options = utils.settings(options)
var self = this
var parser = self.Parser
var compiler = self.Compiler
var data = self.data()
var fail = options.fail
var quiet = options.quiet
var fence = options.fence
var opening = fence[0]
var name = options.name
var test = options.test
if (isParser(parser)) {
attatchParser(
name,
parser,
tokenizer(name, data, fence, quiet, fail),
locator(opening)
)
}
if (isCompiler(compiler)) {
attatchCompiler(name, compiler, visitor(fence))
}
}
function attatchParser (name, parser, tokenizer, locator) {
var proto = parser.prototype
var tokenizers = proto.inlineTokenizers
var methods = proto.inlineMethods
tokenizer.locator = locator
tokenizers[name] = tokenizer
methods.splice(methods.indexOf('link'), 0, name)
}
function attatchCompiler (name, compiler, visitor) {
compiler.prototype.visitors[name] = visitor
}
function locator (opening) {
return function (value, fromIndex) {
return value.indexOf(opening, fromIndex)
}
}
function isParser (parser) {
return Boolean(parser && parser.prototype && parser.prototype.inlineTokenizers)
}
function isCompiler (compiler) {
return Boolean(compiler && compiler.prototype && compiler.prototype.visitors)
}