makefile.js
1 /*! `makefile` grammar compiled for Highlight.js 11.10.0 */ 2 (function(){ 3 var hljsGrammar = (function () { 4 'use strict'; 5 6 /* 7 Language: Makefile 8 Author: Ivan Sagalaev <maniac@softwaremaniacs.org> 9 Contributors: Joël Porquet <joel@porquet.org> 10 Website: https://www.gnu.org/software/make/manual/html_node/Introduction.html 11 Category: common, build-system 12 */ 13 14 function makefile(hljs) { 15 /* Variables: simple (eg $(var)) and special (eg $@) */ 16 const VARIABLE = { 17 className: 'variable', 18 variants: [ 19 { 20 begin: '\\$\\(' + hljs.UNDERSCORE_IDENT_RE + '\\)', 21 contains: [ hljs.BACKSLASH_ESCAPE ] 22 }, 23 { begin: /\$[@%<?\^\+\*]/ } 24 ] 25 }; 26 /* Quoted string with variables inside */ 27 const QUOTE_STRING = { 28 className: 'string', 29 begin: /"/, 30 end: /"/, 31 contains: [ 32 hljs.BACKSLASH_ESCAPE, 33 VARIABLE 34 ] 35 }; 36 /* Function: $(func arg,...) */ 37 const FUNC = { 38 className: 'variable', 39 begin: /\$\([\w-]+\s/, 40 end: /\)/, 41 keywords: { built_in: 42 'subst patsubst strip findstring filter filter-out sort ' 43 + 'word wordlist firstword lastword dir notdir suffix basename ' 44 + 'addsuffix addprefix join wildcard realpath abspath error warning ' 45 + 'shell origin flavor foreach if or and call eval file value' }, 46 contains: [ VARIABLE ] 47 }; 48 /* Variable assignment */ 49 const ASSIGNMENT = { begin: '^' + hljs.UNDERSCORE_IDENT_RE + '\\s*(?=[:+?]?=)' }; 50 /* Meta targets (.PHONY) */ 51 const META = { 52 className: 'meta', 53 begin: /^\.PHONY:/, 54 end: /$/, 55 keywords: { 56 $pattern: /[\.\w]+/, 57 keyword: '.PHONY' 58 } 59 }; 60 /* Targets */ 61 const TARGET = { 62 className: 'section', 63 begin: /^[^\s]+:/, 64 end: /$/, 65 contains: [ VARIABLE ] 66 }; 67 return { 68 name: 'Makefile', 69 aliases: [ 70 'mk', 71 'mak', 72 'make', 73 ], 74 keywords: { 75 $pattern: /[\w-]+/, 76 keyword: 'define endef undefine ifdef ifndef ifeq ifneq else endif ' 77 + 'include -include sinclude override export unexport private vpath' 78 }, 79 contains: [ 80 hljs.HASH_COMMENT_MODE, 81 VARIABLE, 82 QUOTE_STRING, 83 FUNC, 84 ASSIGNMENT, 85 META, 86 TARGET 87 ] 88 }; 89 } 90 91 return makefile; 92 93 })(); 94 95 hljs.registerLanguage('makefile', hljsGrammar); 96 })();