diff options
Diffstat (limited to 'public/prism/prism-ocaml.js')
| -rw-r--r-- | public/prism/prism-ocaml.js | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/public/prism/prism-ocaml.js b/public/prism/prism-ocaml.js new file mode 100644 index 0000000..1336ca4 --- /dev/null +++ b/public/prism/prism-ocaml.js @@ -0,0 +1,60 @@ +// https://ocaml.org/manual/lex.html + +Prism.languages.ocaml = { + comment: { + pattern: /\(\*[\s\S]*?\*\)/, + greedy: true, + }, + char: { + pattern: /'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i, + greedy: true, + }, + string: [ + { + pattern: /"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/, + greedy: true, + }, + { + pattern: /\{([a-z_]*)\|[\s\S]*?\|\1\}/, + greedy: true, + }, + ], + number: [ + // binary and octal + /\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i, + // hexadecimal + /\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i, + // decimal + /\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i, + ], + directive: { + pattern: /\B#\w+/, + alias: 'property', + }, + label: { + pattern: /\B~\w+/, + alias: 'property', + }, + 'type-variable': { + pattern: /\B'\w+/, + alias: 'function', + }, + variant: { + pattern: /`\w+/, + alias: 'symbol', + }, + // For the list of keywords and operators, + // see: http://caml.inria.fr/pub/docs/manual-ocaml/lex.html#sec84 + keyword: + /\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/, + boolean: /\b(?:false|true)\b/, + + 'operator-like-punctuation': { + pattern: /\[[<>|]|[>|]\]|\{<|>\}/, + alias: 'punctuation', + }, + // Custom operators are allowed + operator: + /\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/, + punctuation: /;;|::|[(){}\[\].,:;#]|\b_\b/, +}; |
