45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | const components = require(`prismjs/components`); | ||
|  | 
 | ||
|  | module.exports = { | ||
|  |   names: ['prism-langs'], | ||
|  |   description: 'Code block languages should be supported by PrismJS', | ||
|  |   tags: ['prism'], | ||
|  |   function: function rule(params, onError) { | ||
|  |     params.tokens | ||
|  |       .filter(param => param.type === 'fence') | ||
|  |       .forEach(codeBlock => { | ||
|  |         // whitespace around the language is ignored by the parser, as is case:
 | ||
|  |         const baseLang = codeBlock.info.trim().toLowerCase(); | ||
|  |         const lang = getBaseLanguageName(baseLang); | ||
|  |         // Rule MD040 checks if the block has a language, so this rule only
 | ||
|  |         // comes into play if a language has been specified.
 | ||
|  |         if (baseLang && !lang) { | ||
|  |           onError({ | ||
|  |             lineNumber: codeBlock.lineNumber, | ||
|  |             detail: `\'${baseLang}\' is not recognised.` | ||
|  |           }); | ||
|  |         } | ||
|  |       }); | ||
|  |   } | ||
|  | }; | ||
|  | 
 | ||
|  | /* | ||
|  |  * This is the method used by https://github.com/gatsbyjs/gatsby/blob/master/packages/gatsby-remark-prismjs/src/load-prism-language.js
 | ||
|  |  */ | ||
|  | 
 | ||
|  | // Get the real name of a language given it or an alias
 | ||
|  | const getBaseLanguageName = nameOrAlias => { | ||
|  |   if (components.languages[nameOrAlias]) { | ||
|  |     return nameOrAlias; | ||
|  |   } | ||
|  |   return Object.keys(components.languages).find(language => { | ||
|  |     const { alias } = components.languages[language]; | ||
|  |     if (!alias) return false; | ||
|  |     if (Array.isArray(alias)) { | ||
|  |       return alias.includes(nameOrAlias); | ||
|  |     } else { | ||
|  |       return alias === nameOrAlias; | ||
|  |     } | ||
|  |   }); | ||
|  | }; |