1414 * Dependencies.
1515 */
1616
17+ var trim = require ( 'trim' ) ;
18+ var commentMarker = require ( 'mdast-comment-marker' ) ;
1719var visit = require ( 'unist-util-visit' ) ;
1820
1921/*
@@ -22,111 +24,6 @@ var visit = require('unist-util-visit');
2224
2325var splice = [ ] . splice ;
2426
25- /*
26- * Expression for parsing parameters.
27- */
28-
29- var PARAMETERS = new RegExp (
30- '\\s*' +
31- '(' +
32- '[-a-z09_]+' +
33- ')' +
34- '(?:' +
35- '=' +
36- '(?:' +
37- '"' +
38- '(' +
39- '(?:' +
40- '\\\\[\\s\\S]' +
41- '|' +
42- '[^"]' +
43- ')+' +
44- ')' +
45- '"' +
46- '|' +
47- '\'' +
48- '(' +
49- '(?:' +
50- '\\\\[\\s\\S]' +
51- '|' +
52- '[^\']' +
53- ')+' +
54- ')' +
55- '\'' +
56- '|' +
57- '(' +
58- '(?:' +
59- '\\\\[\\s\\S]' +
60- '|' +
61- '[^"\'\\s]' +
62- ')+' +
63- ')' +
64- ')' +
65- ')?' +
66- '\\s*' ,
67- 'gi'
68- ) ;
69-
70- /**
71- * Create an expression which matches a marker.
72- *
73- * @param {string } name - Plug-in name.
74- * @return {RegExp } - Expression.
75- */
76- function marker ( name ) {
77- return new RegExp (
78- '(' +
79- '\\s*' +
80- '<!--' +
81- '\\s*' +
82- '(' +
83- name +
84- ')' +
85- '\\s*' +
86- '(' +
87- 'start' +
88- '|' +
89- 'end' +
90- ')?' +
91- '\\s*' +
92- '(' +
93- '[\\s\\S]*?' +
94- ')' +
95- '\\s*' +
96- '-->' +
97- '\\s*' +
98- ')'
99- ) ;
100- }
101-
102- /**
103- * Parse `value` into an object.
104- *
105- * @param {string } value - HTML comment.
106- * @return {Object } - Parsed parameters.
107- */
108- function parameters ( value ) {
109- var attributes = { } ;
110-
111- value . replace ( PARAMETERS , function ( $0 , $1 , $2 , $3 , $4 ) {
112- var result = $2 || $3 || $4 || '' ;
113-
114- if ( result === 'true' || result === '' ) {
115- result = true ;
116- } else if ( result === 'false' ) {
117- result = false ;
118- } else if ( ! isNaN ( result ) ) {
119- result = Number ( result ) ;
120- }
121-
122- attributes [ $1 ] = result ;
123-
124- return '' ;
125- } ) ;
126-
127- return attributes ;
128- }
129-
13027/**
13128 * Factory to test if `node` matches `settings`.
13229 *
@@ -137,7 +34,6 @@ function parameters(value) {
13734 */
13835function testFactory ( settings , callback ) {
13936 var name = settings . name ;
140- var expression = marker ( name ) ;
14137
14238 /**
14339 * Test if `node` matches the bound settings.
@@ -147,37 +43,30 @@ function testFactory(settings, callback) {
14743 * @return {Object? } - Whether `node` matches.
14844 */
14945 function test ( node , context ) {
150- var value ;
151- var match ;
152- var result ;
46+ var marker = commentMarker ( node ) ;
47+ var attributes ;
48+ var head ;
15349
154- if ( ! node || node . type !== 'html' ) {
50+ if ( ! marker || marker . name !== name ) {
15551 return null ;
15652 }
15753
158- value = node . value ;
159- match = value . match ( expression ) ;
54+ attributes = marker . attributes ;
55+ head = attributes . match ( / ( s t a r t | e n d ) \b / ) ;
16056
161- if (
162- ! match ||
163- match [ 1 ] . length !== value . length ||
164- match [ 2 ] !== settings . name
165- ) {
166- return null ;
57+ if ( head ) {
58+ head = head [ 0 ] ;
59+ marker . attributes = trim . left ( attributes . slice ( head . length ) ) ;
60+ marker . parameters [ head ] = undefined ;
16761 }
16862
169- result = {
170- 'type' : match [ 3 ] || 'marker' ,
171- 'attributes' : match [ 4 ] || '' ,
172- 'parameters' : parameters ( match [ 4 ] || '' ) ,
173- 'node' : node
174- } ;
63+ marker . type = head || 'marker' ;
17564
17665 if ( callback ) {
177- callback ( result , context ) ;
66+ callback ( marker , context ) ;
17867 }
17968
180- return result ;
69+ return marker ;
18170 }
18271
18372 return test ;
@@ -331,11 +220,11 @@ function attacher(mdast, options) {
331220 var parser = mdast . Parser . prototype ;
332221 var blockTokenizers = parser . blockTokenizers ;
333222 var inlineTokenizers = parser . inlineTokenizers ;
334- var stringifiers = mdast . Compiler . prototype ;
223+ var stringifiers = mdast . Compiler . prototype . visitors ;
335224
336225 if ( options . onparse ) {
337226 blockTokenizers . html = parse ( blockTokenizers . html , options ) ;
338- inlineTokenizers . tag = parse ( inlineTokenizers . tag , options ) ;
227+ inlineTokenizers . html = parse ( inlineTokenizers . html , options ) ;
339228 }
340229
341230 if ( options . onstringify ) {
0 commit comments