93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
| Language: Makefile
 | |
| Author: Ivan Sagalaev <maniac@softwaremaniacs.org>
 | |
| Contributors: Joël Porquet <joel@porquet.org>
 | |
| Website: https://www.gnu.org/software/make/manual/html_node/Introduction.html
 | |
| Category: common
 | |
| */
 | |
| 
 | |
| function makefile(hljs) {
 | |
|   /* Variables: simple (eg $(var)) and special (eg $@) */
 | |
|   const VARIABLE = {
 | |
|     className: 'variable',
 | |
|     variants: [
 | |
|       {
 | |
|         begin: '\\$\\(' + hljs.UNDERSCORE_IDENT_RE + '\\)',
 | |
|         contains: [ hljs.BACKSLASH_ESCAPE ]
 | |
|       },
 | |
|       {
 | |
|         begin: /\$[@%<?\^\+\*]/
 | |
|       }
 | |
|     ]
 | |
|   };
 | |
|   /* Quoted string with variables inside */
 | |
|   const QUOTE_STRING = {
 | |
|     className: 'string',
 | |
|     begin: /"/,
 | |
|     end: /"/,
 | |
|     contains: [
 | |
|       hljs.BACKSLASH_ESCAPE,
 | |
|       VARIABLE
 | |
|     ]
 | |
|   };
 | |
|   /* Function: $(func arg,...) */
 | |
|   const FUNC = {
 | |
|     className: 'variable',
 | |
|     begin: /\$\([\w-]+\s/,
 | |
|     end: /\)/,
 | |
|     keywords: {
 | |
|       built_in:
 | |
|         'subst patsubst strip findstring filter filter-out sort ' +
 | |
|         'word wordlist firstword lastword dir notdir suffix basename ' +
 | |
|         'addsuffix addprefix join wildcard realpath abspath error warning ' +
 | |
|         'shell origin flavor foreach if or and call eval file value'
 | |
|     },
 | |
|     contains: [ VARIABLE ]
 | |
|   };
 | |
|   /* Variable assignment */
 | |
|   const ASSIGNMENT = {
 | |
|     begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\s*(?=[:+?]?=)'
 | |
|   };
 | |
|   /* Meta targets (.PHONY) */
 | |
|   const META = {
 | |
|     className: 'meta',
 | |
|     begin: /^\.PHONY:/,
 | |
|     end: /$/,
 | |
|     keywords: {
 | |
|       $pattern: /[\.\w]+/,
 | |
|       'meta-keyword': '.PHONY'
 | |
|     }
 | |
|   };
 | |
|   /* Targets */
 | |
|   const TARGET = {
 | |
|     className: 'section',
 | |
|     begin: /^[^\s]+:/,
 | |
|     end: /$/,
 | |
|     contains: [ VARIABLE ]
 | |
|   };
 | |
|   return {
 | |
|     name: 'Makefile',
 | |
|     aliases: [
 | |
|       'mk',
 | |
|       'mak',
 | |
|       'make',
 | |
|     ],
 | |
|     keywords: {
 | |
|       $pattern: /[\w-]+/,
 | |
|       keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif ' +
 | |
|       'include -include sinclude override export unexport private vpath'
 | |
|     },
 | |
|     contains: [
 | |
|       hljs.HASH_COMMENT_MODE,
 | |
|       VARIABLE,
 | |
|       QUOTE_STRING,
 | |
|       FUNC,
 | |
|       ASSIGNMENT,
 | |
|       META,
 | |
|       TARGET
 | |
|     ]
 | |
|   };
 | |
| }
 | |
| 
 | |
| module.exports = makefile;
 |