@@ -71,7 +71,7 @@ module.exports = function(section) {
71
71
rendered = rendered . replace ( / \n .* ?M A R K D O W N S U M M A R Y S T A R T .* ?\n / g, "<summary><span class='code-details-summary-span'>" ) ;
72
72
rendered = rendered . replace ( / \n .* ?M A R K D O W N S U M M A R Y E N D .* ?\n / g, "</span></summary>" ) ;
73
73
}
74
-
74
+
75
75
return rendered ;
76
76
} ;
77
77
@@ -95,7 +95,8 @@ module.exports = function(section) {
95
95
xhtml : false
96
96
} ;
97
97
98
- var tokens = parseQuotes ( content ) ;
98
+ var tokens = parseContent ( content ) ;
99
+ tokens . links = [ ] ;
99
100
100
101
return marked . parser ( tokens , markedDefaults ) ;
101
102
} ,
@@ -112,23 +113,63 @@ module.exports = function(section) {
112
113
} ;
113
114
} ;
114
115
115
- function parseQuotes ( data ) {
116
- var tokens = marked . lexer ( data ) . map ( function ( t ) {
116
+ function parseContent ( data ) {
117
+ var tokens = [ ] ;
118
+
119
+ marked . lexer ( data ) . forEach ( function ( t ) {
120
+ // add custom quotes
117
121
if ( t . type === 'paragraph' ) {
118
- return parseCustomQuote ( t , 'T>' , 'tip' ) ||
122
+ var quote = parseCustomQuote ( t , 'T>' , 'tip' ) ||
119
123
parseCustomQuote ( t , 'W>' , 'warning' ) ||
120
124
parseCustomQuote ( t , '?>' , 'todo' ) ||
121
125
t ;
122
- }
123
126
124
- return t ;
127
+ tokens . push ( quote ) ;
128
+ }
129
+ // handle html
130
+ else if ( t . type === 'html' ) {
131
+ tokens = tokens . concat ( handleHTML ( t ) ) ;
132
+ }
133
+ // just add other types
134
+ else {
135
+ tokens . push ( t ) ;
136
+ }
125
137
} ) ;
126
138
127
- tokens . links = [ ] ;
128
-
129
139
return tokens ;
130
140
}
131
141
142
+ function handleHTML ( t ) {
143
+ var tokens = [ ] ;
144
+
145
+ // Split code in markdown, so that HTML inside code is not parsed
146
+ var codeArray = t . text . split ( / ( ` ` ` ( .| \n ) * ` ` ` ) / g) . filter ( v => ( v !== '' && v !== '\n' ) ) ;
147
+
148
+ // if only one item in codeArray, then it's already parsed
149
+ if ( codeArray . length == 1 ) {
150
+ return t ;
151
+ }
152
+
153
+ codeArray . forEach ( item => {
154
+ // if item is not code, then check for html tags and parse accordingly
155
+ if ( item . indexOf ( '```' ) !== 0 ) {
156
+ // split all html tags
157
+ var htmlArray = item . split ( / \s * ( < [ ^ > ] * > ) / g) . filter ( v => ( v !== '' && v !== '\n' ) ) ;
158
+
159
+ // handle every single item separately
160
+ htmlArray . forEach ( function ( html ) {
161
+ tokens = tokens . concat ( parseContent ( html ) ) ;
162
+ } ) ;
163
+ }
164
+ // normally parse code block
165
+ else {
166
+ tokens = tokens . concat ( parseContent ( item ) ) ;
167
+ }
168
+ } ) ;
169
+
170
+ return tokens ;
171
+ }
172
+
132
173
function parseCustomQuote ( token , match , className ) {
133
174
if ( token . type === 'paragraph' ) {
134
175
var text = token . text ;
0 commit comments