prism-crystal.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. (function(Prism) {
  2. Prism.languages.crystal = Prism.languages.extend('ruby', {
  3. keyword: [
  4. /\b(?:abstract|alias|as|asm|begin|break|case|class|def|do|else|elsif|end|ensure|enum|extend|for|fun|if|include|instance_sizeof|lib|macro|module|next|of|out|pointerof|private|protected|rescue|return|require|select|self|sizeof|struct|super|then|type|typeof|uninitialized|union|unless|until|when|while|with|yield|__DIR__|__END_LINE__|__FILE__|__LINE__)\b/,
  5. {
  6. pattern: /(\.\s*)(?:is_a|responds_to)\?/,
  7. lookbehind: true
  8. }
  9. ],
  10. number: /\b(?:0b[01_]*[01]|0o[0-7_]*[0-7]|0x[\da-fA-F_]*[\da-fA-F]|(?:\d(?:[\d_]*\d)?)(?:\.[\d_]*\d)?(?:[eE][+-]?[\d_]*\d)?)(?:_(?:[uif](?:8|16|32|64))?)?\b/
  11. });
  12. Prism.languages.insertBefore('crystal', 'string', {
  13. attribute: {
  14. pattern: /@\[.+?\]/,
  15. alias: 'attr-name',
  16. inside: {
  17. delimiter: {
  18. pattern: /^@\[|\]$/,
  19. alias: 'tag'
  20. },
  21. rest: Prism.languages.crystal
  22. }
  23. },
  24. expansion: [
  25. {
  26. pattern: /\{\{.+?\}\}/,
  27. inside: {
  28. delimiter: {
  29. pattern: /^\{\{|\}\}$/,
  30. alias: 'tag'
  31. },
  32. rest: Prism.languages.crystal
  33. }
  34. },
  35. {
  36. pattern: /\{%.+?%\}/,
  37. inside: {
  38. delimiter: {
  39. pattern: /^\{%|%\}$/,
  40. alias: 'tag'
  41. },
  42. rest: Prism.languages.crystal
  43. }
  44. }
  45. ]
  46. });
  47. }(Prism));