/ src / theme / languages / makefile.js
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    })();