From 0c66a898b6cff1547b6bc519be327d8b3adf7c29 Mon Sep 17 00:00:00 2001 From: Eric Nakagawa Date: Tue, 26 Sep 2017 10:29:09 -0700 Subject: [PATCH] Add Reason support to Prism.js (#92) --- lib/core/Prism.js | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lib/core/Prism.js b/lib/core/Prism.js index b75f2834e6..7b9a81fc42 100644 --- a/lib/core/Prism.js +++ b/lib/core/Prism.js @@ -234,7 +234,11 @@ const Prism = { }) ); } else { - env.highlightedCode = Prism.highlight(env.code, env.grammar, env.language); + env.highlightedCode = Prism.highlight( + env.code, + env.grammar, + env.language + ); Prism.hooks.run("before-insert", env); @@ -256,7 +260,6 @@ const Prism = { const strarr = [text]; - if (grammar && grammar.rest) { const rest = grammar.rest; for (var token in rest) { @@ -1099,6 +1102,20 @@ Prism.languages.yaml = { important: /[&*][\w]+/, punctuation: /---|[:[\]{}\-,|>?]|\.\.\./ }; +(Prism.languages.reason = Prism.languages.extend("clike", { + comment: { pattern: /(^|[^\\])\/\*[\s\S]*?\*\//, lookbehind: !0 }, + string: { pattern: /"(\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/, greedy: !0 }, + "class-name": /\b[A-Z]\w*/, + keyword: /\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/, + operator: /\.{3}|:[:=]|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:mod|land|lor|lxor|lsl|lsr|asr)\b/ +})), Prism.languages.insertBefore("reason", "class-name", { + character: { + pattern: /'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'])'/, + alias: "string" + }, + constructor: { pattern: /\b[A-Z]\w*\b(?!\s*\.)/, alias: "variable" }, + label: { pattern: /\b[a-z]\w*(?=::)/, alias: "symbol" } +}), delete Prism.languages.reason.function; const PrismComponent = React.createClass({ statics: {