prism-protobuf.js 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. (function (Prism) {
  2. var builtinTypes = /\b(?:bool|bytes|double|s?fixed(?:32|64)|float|[su]?int(?:32|64)|string)\b/;
  3. Prism.languages.protobuf = Prism.languages.extend('clike', {
  4. 'class-name': [
  5. {
  6. pattern: /(\b(?:enum|extend|message|service)\s+)[A-Za-z_]\w*(?=\s*\{)/,
  7. lookbehind: true
  8. },
  9. {
  10. pattern: /(\b(?:rpc\s+\w+|returns)\s*\(\s*(?:stream\s+)?)\.?[A-Za-z_]\w*(?:\.[A-Za-z_]\w*)*(?=\s*\))/,
  11. lookbehind: true
  12. }
  13. ],
  14. 'keyword': /\b(?:enum|extend|extensions|import|message|oneof|option|optional|package|public|repeated|required|reserved|returns|rpc(?=\s+\w)|service|stream|syntax|to)\b(?!\s*=\s*\d)/,
  15. 'function': /\b[a-z_]\w*(?=\s*\()/i
  16. });
  17. Prism.languages.insertBefore('protobuf', 'operator', {
  18. 'map': {
  19. pattern: /\bmap<\s*[\w.]+\s*,\s*[\w.]+\s*>(?=\s+[a-z_]\w*\s*[=;])/i,
  20. alias: 'class-name',
  21. inside: {
  22. 'punctuation': /[<>.,]/,
  23. 'builtin': builtinTypes
  24. }
  25. },
  26. 'builtin': builtinTypes,
  27. 'positional-class-name': {
  28. pattern: /(?:\b|\B\.)[a-z_]\w*(?:\.[a-z_]\w*)*(?=\s+[a-z_]\w*\s*[=;])/i,
  29. alias: 'class-name',
  30. inside: {
  31. 'punctuation': /\./
  32. }
  33. },
  34. 'annotation': {
  35. pattern: /(\[\s*)[a-z_]\w*(?=\s*=)/i,
  36. lookbehind: true
  37. }
  38. });
  39. }(Prism));