lisp.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. /*
  2. Language: Lisp
  3. Description: Generic lisp syntax
  4. Author: Vasily Polovnyov <[email protected]>
  5. Category: lisp
  6. */
  7. function(hljs) {
  8. var LISP_IDENT_RE = '[a-zA-Z_\\-\\+\\*\\/\\<\\=\\>\\&\\#][a-zA-Z0-9_\\-\\+\\*\\/\\<\\=\\>\\&\\#!]*';
  9. var MEC_RE = '\\|[^]*?\\|';
  10. var LISP_SIMPLE_NUMBER_RE = '(\\-|\\+)?\\d+(\\.\\d+|\\/\\d+)?((d|e|f|l|s|D|E|F|L|S)(\\+|\\-)?\\d+)?';
  11. var SHEBANG = {
  12. className: 'meta',
  13. begin: '^#!', end: '$'
  14. };
  15. var LITERAL = {
  16. className: 'literal',
  17. begin: '\\b(t{1}|nil)\\b'
  18. };
  19. var NUMBER = {
  20. className: 'number',
  21. variants: [
  22. {begin: LISP_SIMPLE_NUMBER_RE, relevance: 0},
  23. {begin: '#(b|B)[0-1]+(/[0-1]+)?'},
  24. {begin: '#(o|O)[0-7]+(/[0-7]+)?'},
  25. {begin: '#(x|X)[0-9a-fA-F]+(/[0-9a-fA-F]+)?'},
  26. {begin: '#(c|C)\\(' + LISP_SIMPLE_NUMBER_RE + ' +' + LISP_SIMPLE_NUMBER_RE, end: '\\)'}
  27. ]
  28. };
  29. var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {illegal: null});
  30. var COMMENT = hljs.COMMENT(
  31. ';', '$',
  32. {
  33. relevance: 0
  34. }
  35. );
  36. var VARIABLE = {
  37. begin: '\\*', end: '\\*'
  38. };
  39. var KEYWORD = {
  40. className: 'symbol',
  41. begin: '[:&]' + LISP_IDENT_RE
  42. };
  43. var IDENT = {
  44. begin: LISP_IDENT_RE,
  45. relevance: 0
  46. };
  47. var MEC = {
  48. begin: MEC_RE
  49. };
  50. var QUOTED_LIST = {
  51. begin: '\\(', end: '\\)',
  52. contains: ['self', LITERAL, STRING, NUMBER, IDENT]
  53. };
  54. var QUOTED = {
  55. contains: [NUMBER, STRING, VARIABLE, KEYWORD, QUOTED_LIST, IDENT],
  56. variants: [
  57. {
  58. begin: '[\'`]\\(', end: '\\)'
  59. },
  60. {
  61. begin: '\\(quote ', end: '\\)',
  62. keywords: {name: 'quote'}
  63. },
  64. {
  65. begin: '\'' + MEC_RE
  66. }
  67. ]
  68. };
  69. var QUOTED_ATOM = {
  70. variants: [
  71. {begin: '\'' + LISP_IDENT_RE},
  72. {begin: '#\'' + LISP_IDENT_RE + '(::' + LISP_IDENT_RE + ')*'}
  73. ]
  74. };
  75. var LIST = {
  76. begin: '\\(\\s*', end: '\\)'
  77. };
  78. var BODY = {
  79. endsWithParent: true,
  80. relevance: 0
  81. };
  82. LIST.contains = [
  83. {
  84. className: 'name',
  85. variants: [
  86. {begin: LISP_IDENT_RE},
  87. {begin: MEC_RE}
  88. ]
  89. },
  90. BODY
  91. ];
  92. BODY.contains = [QUOTED, QUOTED_ATOM, LIST, LITERAL, NUMBER, STRING, COMMENT, VARIABLE, KEYWORD, MEC, IDENT];
  93. return {
  94. illegal: /\S/,
  95. contains: [
  96. NUMBER,
  97. SHEBANG,
  98. LITERAL,
  99. STRING,
  100. COMMENT,
  101. QUOTED,
  102. QUOTED_ATOM,
  103. LIST,
  104. IDENT
  105. ]
  106. };
  107. }