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;
 | 
						|
    }
 | 
						|
  });
 | 
						|
};
 |