prolog.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  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. const ATOM = {
  9. begin: /[a-z][A-Za-z0-9_]*/,
  10. relevance: 0
  11. };
  12. const 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. const PARENTED = {
  21. begin: /\(/,
  22. end: /\)/,
  23. relevance: 0
  24. };
  25. const LIST = {
  26. begin: /\[/,
  27. end: /\]/
  28. };
  29. const LINE_COMMENT = {
  30. className: 'comment',
  31. begin: /%/,
  32. end: /$/,
  33. contains: [ hljs.PHRASAL_WORDS_MODE ]
  34. };
  35. const BACKTICK_STRING = {
  36. className: 'string',
  37. begin: /`/,
  38. end: /`/,
  39. contains: [ hljs.BACKSLASH_ESCAPE ]
  40. };
  41. const CHAR_CODE = {
  42. className: 'string', // 0'a etc.
  43. begin: /0'(\\'|.)/
  44. };
  45. const SPACE_CODE = {
  46. className: 'string',
  47. begin: /0'\\s/ // 0'\s
  48. };
  49. const PRED_OP = { // relevance booster
  50. begin: /:-/ };
  51. const inner = [
  52. ATOM,
  53. VAR,
  54. PARENTED,
  55. PRED_OP,
  56. LIST,
  57. LINE_COMMENT,
  58. hljs.C_BLOCK_COMMENT_MODE,
  59. hljs.QUOTE_STRING_MODE,
  60. hljs.APOS_STRING_MODE,
  61. BACKTICK_STRING,
  62. CHAR_CODE,
  63. SPACE_CODE,
  64. hljs.C_NUMBER_MODE
  65. ];
  66. PARENTED.contains = inner;
  67. LIST.contains = inner;
  68. return {
  69. name: 'Prolog',
  70. contains: inner.concat([
  71. { // relevance booster
  72. begin: /\.$/ }
  73. ])
  74. };
  75. }
  76. export { prolog as default };