@@ -2,27 +2,39 @@ module.exports = toMarkdown
2
2
3
3
var zwitch = require ( 'zwitch' )
4
4
var defaultHandlers = require ( './handle' )
5
- var defaultUnsafePatterns = require ( './unsafe' )
5
+ var defaultUnsafe = require ( './unsafe' )
6
6
var defaultJoin = require ( './join' )
7
7
8
8
function toMarkdown ( tree , options ) {
9
9
var settings = options || { }
10
- var extensions = configure ( settings )
11
- var stack = [ ]
12
- var handle = zwitch ( 'type' , {
13
- invalid : invalid ,
14
- unknown : unknown ,
15
- handlers : extensions . handlers
16
- } )
17
10
var context = {
18
- handle : handle ,
19
- stack : stack ,
20
11
enter : enter ,
21
- options : settings ,
22
- unsafePatterns : extensions . unsafe ,
23
- join : extensions . join
12
+ stack : [ ] ,
13
+ unsafe : [ ] ,
14
+ join : [ ] ,
15
+ handlers : { } ,
16
+ options : { }
17
+ }
18
+ var result
19
+
20
+ configure ( context , {
21
+ unsafe : defaultUnsafe ,
22
+ join : defaultJoin ,
23
+ handlers : defaultHandlers
24
+ } )
25
+ configure ( context , settings )
26
+
27
+ if ( context . options . tightDefinitions ) {
28
+ context . join = [ joinDefinition ] . concat ( context . join )
24
29
}
25
- var result = handle ( tree , null , context , { before : '\n' , after : '\n' } )
30
+
31
+ context . handle = zwitch ( 'type' , {
32
+ invalid : invalid ,
33
+ unknown : unknown ,
34
+ handlers : context . handlers
35
+ } )
36
+
37
+ result = context . handle ( tree , null , context , { before : '\n' , after : '\n' } )
26
38
27
39
if (
28
40
result &&
@@ -35,11 +47,11 @@ function toMarkdown(tree, options) {
35
47
return result
36
48
37
49
function enter ( name ) {
38
- stack . push ( name )
50
+ context . stack . push ( name )
39
51
return exit
40
52
41
53
function exit ( ) {
42
- stack . pop ( )
54
+ context . stack . pop ( )
43
55
}
44
56
}
45
57
}
@@ -52,26 +64,30 @@ function unknown(node) {
52
64
throw new Error ( 'Cannot handle unknown node `' + node . type + '`' )
53
65
}
54
66
55
- function configure ( settings ) {
56
- var extensions = [
57
- { unsafe : settings . unsafe , handlers : settings . handlers , join : settings . join }
58
- ] . concat ( settings . extensions || [ ] )
59
- var unsafe = defaultUnsafePatterns
60
- var join = defaultJoin
61
- var handlers = Object . assign ( { } , defaultHandlers )
67
+ function configure ( base , extension ) {
62
68
var index = - 1
69
+ var key
63
70
64
- if ( settings . tightDefinitions ) {
65
- join = [ joinDefinition ] . concat ( join )
71
+ // First do subextensions.
72
+ if ( extension . extensions ) {
73
+ while ( ++ index < extension . extensions . length ) {
74
+ configure ( base , extension . extensions [ index ] )
75
+ }
66
76
}
67
77
68
- while ( ++ index < extensions . length ) {
69
- unsafe = unsafe . concat ( extensions [ index ] . unsafe || [ ] )
70
- join = join . concat ( extensions [ index ] . join || [ ] )
71
- Object . assign ( handlers , extensions [ index ] . handlers || { } )
78
+ for ( key in extension ) {
79
+ if ( key === 'extensions' ) {
80
+ // Empty.
81
+ } else if ( key === 'unsafe' || key === 'join' ) {
82
+ base [ key ] = base [ key ] . concat ( extension [ key ] || [ ] )
83
+ } else if ( key === 'handlers' ) {
84
+ base [ key ] = Object . assign ( base [ key ] , extension [ key ] || { } )
85
+ } else {
86
+ base . options [ key ] = extension [ key ]
87
+ }
72
88
}
73
89
74
- return { unsafe : unsafe , join : join , handlers : handlers }
90
+ return base
75
91
}
76
92
77
93
function joinDefinition ( left , right ) {
0 commit comments