@@ -5,12 +5,13 @@ const logger = require('loglevel');
55const visit = require ( 'unist-util-visit' ) ;
66const setup = require ( './setup' ) ;
77const createGetRegistry = require ( './createGetRegistry' ) ;
8- const registerCodeBlock = require ( './registerCodeBlock' ) ;
98const getPossibleThemes = require ( './getPossibleThemes' ) ;
10- const createCodeBlockRegistry = require ( './createCodeBlockRegistry' ) ;
11- const parseCodeFenceHeader = require ( './parseCodeFenceHeader' ) ;
9+ const createCodeNodeRegistry = require ( './createCodeNodeRegistry' ) ;
10+ const parseCodeFenceInfo = require ( './parseCodeFenceInfo' ) ;
11+ const parseCodeSpanInfo = require ( './parseCodeSpanInfo' ) ;
1212const createSchemaCustomization = require ( './graphql/createSchemaCustomization' ) ;
1313const getCodeBlockGraphQLDataFromRegistry = require ( './graphql/getCodeBlockDataFromRegistry' ) ;
14+ const { registerCodeBlock, registerCodeSpan } = require ( './registerCodeNode' ) ;
1415const { createHash } = require ( 'crypto' ) ;
1516const { setChildNodes } = require ( './cacheUtils' ) ;
1617const { getScope } = require ( './storeUtils' ) ;
@@ -38,6 +39,7 @@ function createPlugin() {
3839 replaceColor,
3940 logLevel,
4041 getLineTransformers,
42+ inlineCode,
4143 ...rest
4244 } = await once ( ( ) => setup ( options , cache ) , 'setup' ) ;
4345
@@ -51,16 +53,17 @@ function createPlugin() {
5153 injectStyles,
5254 replaceColor,
5355 logLevel,
56+ inlineCode,
5457 ...rest
5558 } ,
5659 cache
5760 ) ;
5861
5962 // 1. Gather all code fence nodes from Markdown AST.
6063
61- /** @type {MDASTNode[] } */
64+ /** @type {( MDASTNode<'code'> | MDASTNode<'inlineCode'>) [] } */
6265 const nodes = [ ] ;
63- visit ( markdownAST , 'code' , node => {
66+ visit ( markdownAST , ( { type } ) => type === 'code' || type === 'inlineCode ', node => {
6467 nodes . push ( node ) ;
6568 } ) ;
6669
@@ -70,13 +73,20 @@ function createPlugin() {
7073
7174 /** @type {grvsc.gql.GRVSCCodeBlock[] } */
7275 const graphQLNodes = [ ] ;
73- /** @type {CodeBlockRegistry <MDASTNode> } */
74- const codeBlockRegistry = createCodeBlockRegistry ( ) ;
76+ /** @type {CodeNodeRegistry <MDASTNode> } */
77+ const codeNodeRegistry = createCodeNodeRegistry ( ) ;
7578 for ( const node of nodes ) {
7679 /** @type {string } */
7780 const text = node . value || ( node . children && node . children [ 0 ] && node . children [ 0 ] . value ) ;
7881 if ( ! text ) continue ;
79- const { languageName, meta } = parseCodeFenceHeader ( node . lang ? node . lang . toLowerCase ( ) : '' , node . meta ) ;
82+ const { languageName, meta, text : parsedText = text } = node . type === 'code'
83+ ? parseCodeFenceInfo ( node . lang ? node . lang . toLowerCase ( ) : '' , node . meta )
84+ : parseCodeSpanInfo ( text , inlineCode . marker ) ;
85+
86+ if ( node . type === 'inlineCode' && ! languageName ) {
87+ continue ;
88+ }
89+
8090 const grammarCache = await cache . get ( 'grammars' ) ;
8191 const scope = getScope ( languageName , grammarCache , languageAliases ) ;
8292 if ( ! scope && languageName ) {
@@ -87,39 +97,55 @@ function createPlugin() {
8797 ) ;
8898 }
8999
100+ const nodeData = /** @type {CodeBlockData | CodeSpanData } */ ( {
101+ node,
102+ markdownNode,
103+ language : languageName
104+ } ) ;
105+
90106 const possibleThemes = await getPossibleThemes (
91- theme ,
107+ node . type === 'inlineCode' ? inlineCode . theme || theme : theme ,
92108 await cache . get ( 'themes' ) ,
93109 // Node could be sourced from something other than a File node
94110 markdownNode . fileAbsolutePath ? path . dirname ( markdownNode . fileAbsolutePath ) : undefined ,
95- markdownNode ,
96- node ,
97- languageName ,
98- meta
111+ nodeData
99112 ) ;
100113
101- await registerCodeBlock (
102- codeBlockRegistry ,
103- node ,
104- possibleThemes ,
105- ( ) => getRegistry ( cache , scope ) ,
106- lineTransformers ,
107- scope ,
108- text ,
109- languageName ,
110- meta ,
111- cache
112- ) ;
114+ if ( node . type === 'inlineCode' ) {
115+ await registerCodeSpan (
116+ codeNodeRegistry ,
117+ node ,
118+ possibleThemes ,
119+ ( ) => getRegistry ( cache , scope ) ,
120+ scope ,
121+ parsedText ,
122+ languageName ,
123+ cache
124+ ) ;
125+ } else {
126+ await registerCodeBlock (
127+ codeNodeRegistry ,
128+ node ,
129+ possibleThemes ,
130+ ( ) => getRegistry ( cache , scope ) ,
131+ lineTransformers ,
132+ scope ,
133+ parsedText ,
134+ languageName ,
135+ meta ,
136+ cache
137+ ) ;
138+ }
113139 }
114140
115141 // 3. For each code block registered, convert its tokenization and theme data
116142 // to a GraphQL-compatible representation, including HTML renderings. At the same
117143 // time, change the original code fence Markdown node to an HTML node and set
118144 // its value to the HTML rendering contained in the GraphQL node.
119145
120- codeBlockRegistry . forEachCodeBlock ( ( codeBlock , node ) => {
146+ codeNodeRegistry . forEachCodeBlock ( ( codeBlock , node ) => {
121147 const graphQLNode = getCodeBlockGraphQLDataFromRegistry (
122- codeBlockRegistry ,
148+ codeNodeRegistry ,
123149 node ,
124150 codeBlock ,
125151 getWrapperClassName ,
@@ -148,6 +174,7 @@ function createPlugin() {
148174 ? wrapperClassName ( {
149175 language : codeBlock . languageName ,
150176 markdownNode,
177+ node,
151178 codeFenceNode : node ,
152179 parsedOptions : codeBlock . meta
153180 } )
@@ -159,8 +186,8 @@ function createPlugin() {
159186 // then append that CSS to the Markdown AST in an HTML node.
160187
161188 const styleElement = createStyleElement (
162- codeBlockRegistry . getAllPossibleThemes ( ) ,
163- codeBlockRegistry . getTokenStylesForTheme ,
189+ codeNodeRegistry . getAllPossibleThemes ( ) ,
190+ codeNodeRegistry . getTokenStylesForTheme ,
164191 replaceColor ,
165192 injectStyles ? styles : undefined
166193 ) ;
0 commit comments