mercury.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. Language: Mercury
  3. Author: mucaho <[email protected]>
  4. Description: Mercury is a logic/functional programming language which combines the clarity and expressiveness of declarative programming with advanced static analysis and error detection features.
  5. */
  6. function(hljs) {
  7. var KEYWORDS = {
  8. keyword:
  9. 'module use_module import_module include_module end_module initialise ' +
  10. 'mutable initialize finalize finalise interface implementation pred ' +
  11. 'mode func type inst solver any_pred any_func is semidet det nondet ' +
  12. 'multi erroneous failure cc_nondet cc_multi typeclass instance where ' +
  13. 'pragma promise external trace atomic or_else require_complete_switch ' +
  14. 'require_det require_semidet require_multi require_nondet ' +
  15. 'require_cc_multi require_cc_nondet require_erroneous require_failure',
  16. meta:
  17. // pragma
  18. 'inline no_inline type_spec source_file fact_table obsolete memo ' +
  19. 'loop_check minimal_model terminates does_not_terminate ' +
  20. 'check_termination promise_equivalent_clauses ' +
  21. // preprocessor
  22. 'foreign_proc foreign_decl foreign_code foreign_type ' +
  23. 'foreign_import_module foreign_export_enum foreign_export ' +
  24. 'foreign_enum may_call_mercury will_not_call_mercury thread_safe ' +
  25. 'not_thread_safe maybe_thread_safe promise_pure promise_semipure ' +
  26. 'tabled_for_io local untrailed trailed attach_to_io_state ' +
  27. 'can_pass_as_mercury_type stable will_not_throw_exception ' +
  28. 'may_modify_trail will_not_modify_trail may_duplicate ' +
  29. 'may_not_duplicate affects_liveness does_not_affect_liveness ' +
  30. 'doesnt_affect_liveness no_sharing unknown_sharing sharing',
  31. built_in:
  32. 'some all not if then else true fail false try catch catch_any ' +
  33. 'semidet_true semidet_false semidet_fail impure_true impure semipure'
  34. };
  35. var COMMENT = hljs.COMMENT('%', '$');
  36. var NUMCODE = {
  37. className: 'number',
  38. begin: "0'.\\|0[box][0-9a-fA-F]*"
  39. };
  40. var ATOM = hljs.inherit(hljs.APOS_STRING_MODE, {relevance: 0});
  41. var STRING = hljs.inherit(hljs.QUOTE_STRING_MODE, {relevance: 0});
  42. var STRING_FMT = {
  43. className: 'subst',
  44. begin: '\\\\[abfnrtv]\\|\\\\x[0-9a-fA-F]*\\\\\\|%[-+# *.0-9]*[dioxXucsfeEgGp]',
  45. relevance: 0
  46. };
  47. STRING.contains.push(STRING_FMT);
  48. var IMPLICATION = {
  49. className: 'built_in',
  50. variants: [
  51. {begin: '<=>'},
  52. {begin: '<=', relevance: 0},
  53. {begin: '=>', relevance: 0},
  54. {begin: '/\\\\'},
  55. {begin: '\\\\/'}
  56. ]
  57. };
  58. var HEAD_BODY_CONJUNCTION = {
  59. className: 'built_in',
  60. variants: [
  61. {begin: ':-\\|-->'},
  62. {begin: '=', relevance: 0}
  63. ]
  64. };
  65. return {
  66. aliases: ['m', 'moo'],
  67. keywords: KEYWORDS,
  68. contains: [
  69. IMPLICATION,
  70. HEAD_BODY_CONJUNCTION,
  71. COMMENT,
  72. hljs.C_BLOCK_COMMENT_MODE,
  73. NUMCODE,
  74. hljs.NUMBER_MODE,
  75. ATOM,
  76. STRING,
  77. {begin: /:-/} // relevance booster
  78. ]
  79. };
  80. }