prolog.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. Language: Prolog
  3. Description: Prolog is a general purpose logic programming language associated with artificial intelligence and computational linguistics.
  4. Author: Raivo Laanemets <raivo@infdot.com>
  5. Website: https://en.wikipedia.org/wiki/Prolog
  6. */
  7. function prolog(hljs) {
  8. var ATOM = {
  9. begin: /[a-z][A-Za-z0-9_]*/,
  10. relevance: 0
  11. };
  12. var VAR = {
  13. className: 'symbol',
  14. variants: [
  15. {begin: /[A-Z][a-zA-Z0-9_]*/},
  16. {begin: /_[A-Za-z0-9_]*/},
  17. ],
  18. relevance: 0
  19. };
  20. var PARENTED = {
  21. begin: /\(/,
  22. end: /\)/,
  23. relevance: 0
  24. };
  25. var LIST = {
  26. begin: /\[/,
  27. end: /\]/
  28. };
  29. var LINE_COMMENT = {
  30. className: 'comment',
  31. begin: /%/, end: /$/,
  32. contains: [hljs.PHRASAL_WORDS_MODE]
  33. };
  34. var BACKTICK_STRING = {
  35. className: 'string',
  36. begin: /`/, end: /`/,
  37. contains: [hljs.BACKSLASH_ESCAPE]
  38. };
  39. var CHAR_CODE = {
  40. className: 'string', // 0'a etc.
  41. begin: /0\'(\\\'|.)/
  42. };
  43. var SPACE_CODE = {
  44. className: 'string',
  45. begin: /0\'\\s/ // 0'\s
  46. };
  47. var PRED_OP = { // relevance booster
  48. begin: /:-/
  49. };
  50. var inner = [
  51. ATOM,
  52. VAR,
  53. PARENTED,
  54. PRED_OP,
  55. LIST,
  56. LINE_COMMENT,
  57. hljs.C_BLOCK_COMMENT_MODE,
  58. hljs.QUOTE_STRING_MODE,
  59. hljs.APOS_STRING_MODE,
  60. BACKTICK_STRING,
  61. CHAR_CODE,
  62. SPACE_CODE,
  63. hljs.C_NUMBER_MODE
  64. ];
  65. PARENTED.contains = inner;
  66. LIST.contains = inner;
  67. return {
  68. name: 'Prolog',
  69. contains: inner.concat([
  70. {begin: /\.$/} // relevance booster
  71. ])
  72. };
  73. }
  74. module.exports = prolog;