@@ -14,12 +14,24 @@ const visit = require('unist-util-visit');
1414const retext = require ( 'retext' ) ;
1515const smartypants = require ( 'retext-smartypants' ) ;
1616
17- function check ( parent ) {
17+ function check ( node , parent ) {
18+ if ( node . data ?. skipSmartyPants ) return false ;
1819 if ( parent . tagName === 'script' ) return false ;
1920 if ( parent . tagName === 'style' ) return false ;
2021 return true ;
2122}
2223
24+ function markSkip ( node ) {
25+ if ( ! node ) return ;
26+ node . data ??= { } ;
27+ node . data . skipSmartyPants = true ;
28+ if ( Array . isArray ( node . children ) ) {
29+ for ( const child of node . children ) {
30+ markSkip ( child ) ;
31+ }
32+ }
33+ }
34+
2335module . exports = function ( options ) {
2436 const processor = retext ( ) . use ( smartypants , {
2537 ...options ,
@@ -43,8 +55,14 @@ module.exports = function (options) {
4355 let startIndex = 0 ;
4456 const textOrInlineCodeNodes = [ ] ;
4557
58+ visit ( tree , 'mdxJsxFlowElement' , ( node ) => {
59+ if ( [ 'TerminalBlock' ] . includes ( node . name ) ) {
60+ markSkip ( node ) ; // Mark all children to skip smarty pants
61+ }
62+ } ) ;
63+
4664 visit ( tree , [ 'text' , 'inlineCode' ] , ( node , _ , parent ) => {
47- if ( check ( parent ) ) {
65+ if ( check ( node , parent ) ) {
4866 if ( node . type === 'text' ) allText += node . value ;
4967 // for the case when inlineCode contains just one part of quote: `foo'bar`
5068 else allText += 'A' . repeat ( node . value . length ) ;
0 commit comments