@@ -2,27 +2,39 @@ module.exports = toMarkdown
22
33var zwitch = require ( 'zwitch' )
44var defaultHandlers = require ( './handle' )
5- var defaultUnsafePatterns = require ( './unsafe' )
5+ var defaultUnsafe = require ( './unsafe' )
66var defaultJoin = require ( './join' )
77
88function toMarkdown ( tree , options ) {
99 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- } )
1710 var context = {
18- handle : handle ,
19- stack : stack ,
2011 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 )
2429 }
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' } )
2638
2739 if (
2840 result &&
@@ -35,11 +47,11 @@ function toMarkdown(tree, options) {
3547 return result
3648
3749 function enter ( name ) {
38- stack . push ( name )
50+ context . stack . push ( name )
3951 return exit
4052
4153 function exit ( ) {
42- stack . pop ( )
54+ context . stack . pop ( )
4355 }
4456 }
4557}
@@ -52,26 +64,30 @@ function unknown(node) {
5264 throw new Error ( 'Cannot handle unknown node `' + node . type + '`' )
5365}
5466
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 ) {
6268 var index = - 1
69+ var key
6370
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+ }
6676 }
6777
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+ }
7288 }
7389
74- return { unsafe : unsafe , join : join , handlers : handlers }
90+ return base
7591}
7692
7793function joinDefinition ( left , right ) {
0 commit comments