makefile.js 2.0 KB

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