pony.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /*
  2. Language: Pony
  3. Author: Joe Eli McIlvain <joe.eli.mac@gmail.com>
  4. Description: Pony is an open-source, object-oriented, actor-model,
  5. capabilities-secure, high performance programming language.
  6. Website: https://www.ponylang.io
  7. */
  8. function pony(hljs) {
  9. var KEYWORDS = {
  10. keyword:
  11. 'actor addressof and as be break class compile_error compile_intrinsic ' +
  12. 'consume continue delegate digestof do else elseif embed end error ' +
  13. 'for fun if ifdef in interface is isnt lambda let match new not object ' +
  14. 'or primitive recover repeat return struct then trait try type until ' +
  15. 'use var where while with xor',
  16. meta:
  17. 'iso val tag trn box ref',
  18. literal:
  19. 'this false true'
  20. };
  21. var TRIPLE_QUOTE_STRING_MODE = {
  22. className: 'string',
  23. begin: '"""', end: '"""',
  24. relevance: 10
  25. };
  26. var QUOTE_STRING_MODE = {
  27. className: 'string',
  28. begin: '"', end: '"',
  29. contains: [hljs.BACKSLASH_ESCAPE]
  30. };
  31. var SINGLE_QUOTE_CHAR_MODE = {
  32. className: 'string',
  33. begin: '\'', end: '\'',
  34. contains: [hljs.BACKSLASH_ESCAPE],
  35. relevance: 0
  36. };
  37. var TYPE_NAME = {
  38. className: 'type',
  39. begin: '\\b_?[A-Z][\\w]*',
  40. relevance: 0
  41. };
  42. var PRIMED_NAME = {
  43. begin: hljs.IDENT_RE + '\'', relevance: 0
  44. };
  45. var NUMBER_MODE = {
  46. className: 'number',
  47. begin: '(-?)(\\b0[xX][a-fA-F0-9]+|\\b0[bB][01]+|(\\b\\d+(_\\d+)?(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)',
  48. relevance: 0
  49. };
  50. /**
  51. * The `FUNCTION` and `CLASS` modes were intentionally removed to simplify
  52. * highlighting and fix cases like
  53. * ```
  54. * interface Iterator[A: A]
  55. * fun has_next(): Bool
  56. * fun next(): A?
  57. * ```
  58. * where it is valid to have a function head without a body
  59. */
  60. return {
  61. name: 'Pony',
  62. keywords: KEYWORDS,
  63. contains: [
  64. TYPE_NAME,
  65. TRIPLE_QUOTE_STRING_MODE,
  66. QUOTE_STRING_MODE,
  67. SINGLE_QUOTE_CHAR_MODE,
  68. PRIMED_NAME,
  69. NUMBER_MODE,
  70. hljs.C_LINE_COMMENT_MODE,
  71. hljs.C_BLOCK_COMMENT_MODE
  72. ]
  73. };
  74. }
  75. module.exports = pony;