diff --git a/components/prism-ocaml.js b/components/prism-ocaml.js index 09e13bb079..849c3af27b 100644 --- a/components/prism-ocaml.js +++ b/components/prism-ocaml.js @@ -11,17 +11,31 @@ Prism.languages.ocaml = { } ], 'number': /\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i, - 'type': { - pattern: /\B['`]\w*/, - alias: 'variable' - }, 'directive': { pattern: /\B#\w+/, + alias: 'important' + }, + 'label': { + pattern: /\B~\w+/, + alias: 'function' + }, + 'type_variable': { + pattern: /\B'\w+/, alias: 'function' }, - '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|object|of|open|prefix|private|rec|then|sig|struct|to|try|type|val|value|virtual|where|while|with)\b/, + 'variant': { + pattern: /`\w+/, + alias: 'variable' + }, + 'module': { + pattern: /\b[A-Z]\w+/, + alias: 'variable' + }, + // 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/, // Custom operators are allowed - 'operator': /:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lxor|lsl|lsr|mod|nor|or)\b/, + 'operator': /:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/, 'punctuation': /[(){}\[\]|_.,:;]/ }; \ No newline at end of file diff --git a/components/prism-ocaml.min.js b/components/prism-ocaml.min.js index 704dada207..25114ede1c 100644 --- a/components/prism-ocaml.min.js +++ b/components/prism-ocaml.min.js @@ -1 +1 @@ -Prism.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,type:{pattern:/\B['`]\w*/,alias:"variable"},directive:{pattern:/\B#\w+/,alias:"function"},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|object|of|open|prefix|private|rec|then|sig|struct|to|try|type|val|value|virtual|where|while|with)\b/,boolean:/\b(?:false|true)\b/,operator:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lxor|lsl|lsr|mod|nor|or)\b/,punctuation:/[(){}\[\]|_.,:;]/}; \ No newline at end of file +Prism.languages.ocaml={comment:/\(\*[\s\S]*?\*\)/,string:[{pattern:/"(?:\\.|[^\\\r\n"])*"/,greedy:!0},{pattern:/(['`])(?:\\(?:\d+|x[\da-f]+|.)|(?!\1)[^\\\r\n])\1/i,greedy:!0}],number:/\b(?:0x[\da-f][\da-f_]+|(?:0[bo])?\d[\d_]*\.?[\d_]*(?:e[+-]?[\d_]+)?)/i,directive:{pattern:/\B#\w+/,alias:"important"},label:{pattern:/\B~\w+/,alias:"function"},type_variable:{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"variable"},module:{pattern:/\b[A-Z]\w+/,alias:"variable"},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:/:=|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/[(){}\[\]|_.,:;]/}; \ No newline at end of file diff --git a/examples/prism-ocaml.html b/examples/prism-ocaml.html index 46ee6dc831..85aa10750d 100644 --- a/examples/prism-ocaml.html +++ b/examples/prism-ocaml.html @@ -9,7 +9,8 @@

Numbers

42. 2.4E+2 10_452_102 -0xf4 0xff_10_41 +0xf4 +0xff_10_41 0o427 0b1100_1111_0000 @@ -29,7 +30,7 @@

Full example

(** [create low high] creates a new interval from [low] to [high]. If [low > high], then the interval is empty *) - let create low high = + let create ~low ~high = if Endpoint.compare low high > 0 then Empty else Interval (low,high) @@ -54,6 +55,6 @@

Full example

match t1,t2 with | Empty, _ | _, Empty -> Empty | Interval (l1,h1), Interval (l2,h2) -> - create (max l1 l2) (min h1 h2) + create ~low:(max l1 l2) ~high:(min h1 h2) end ;; diff --git a/tests/languages/ocaml/keyword_feature.test b/tests/languages/ocaml/keyword_feature.test index 2259da66b5..dd864806d9 100644 --- a/tests/languages/ocaml/keyword_feature.test +++ b/tests/languages/ocaml/keyword_feature.test @@ -26,21 +26,22 @@ method module mutable new +nonrec object of open -prefix private rec -then sig struct +then to try type val value virtual +when where while with @@ -76,21 +77,22 @@ with ["keyword", "module"], ["keyword", "mutable"], ["keyword", "new"], + ["keyword", "nonrec"], ["keyword", "object"], ["keyword", "of"], ["keyword", "open"], - ["keyword", "prefix"], ["keyword", "private"], ["keyword", "rec"], - ["keyword", "then"], ["keyword", "sig"], ["keyword", "struct"], + ["keyword", "then"], ["keyword", "to"], ["keyword", "try"], ["keyword", "type"], ["keyword", "val"], ["keyword", "value"], ["keyword", "virtual"], + ["keyword", "when"], ["keyword", "where"], ["keyword", "while"], ["keyword", "with"] diff --git a/tests/languages/ocaml/label_feature.test b/tests/languages/ocaml/label_feature.test new file mode 100644 index 0000000000..71b9bd4616 --- /dev/null +++ b/tests/languages/ocaml/label_feature.test @@ -0,0 +1,13 @@ +~foo +~bar_42 + +---------------------------------------------------- + +[ + ["label", "~foo"], + ["label", "~bar_42"] +] + +---------------------------------------------------- + +Checks for labels. \ No newline at end of file diff --git a/tests/languages/ocaml/module_feature.test b/tests/languages/ocaml/module_feature.test new file mode 100644 index 0000000000..006d259e48 --- /dev/null +++ b/tests/languages/ocaml/module_feature.test @@ -0,0 +1,15 @@ +Foo +Bar42 +Baz_42 + +---------------------------------------------------- + +[ + ["module", "Foo"], + ["module", "Bar42"], + ["module", "Baz_42"] +] + +---------------------------------------------------- + +Checks for modules. \ No newline at end of file diff --git a/tests/languages/ocaml/number_feature.test b/tests/languages/ocaml/number_feature.test index 2076a5cbe4..6ade2114e8 100644 --- a/tests/languages/ocaml/number_feature.test +++ b/tests/languages/ocaml/number_feature.test @@ -1,3 +1,5 @@ +1234 +32. 0xBad_Face 0o754_672 0b1010_1111 @@ -10,6 +12,8 @@ ---------------------------------------------------- [ + ["number", "1234"], + ["number", "32."], ["number", "0xBad_Face"], ["number", "0o754_672"], ["number", "0b1010_1111"], diff --git a/tests/languages/ocaml/operator_feature.test b/tests/languages/ocaml/operator_feature.test index 75c8f01848..50047fe8dc 100644 --- a/tests/languages/ocaml/operator_feature.test +++ b/tests/languages/ocaml/operator_feature.test @@ -1,6 +1,6 @@ and asr land -lor lxor lsl lsr -mod nor or +lor lsl lsr +lxor mod or := = < > @ @@ -14,8 +14,8 @@ $ % ! ? [ ["operator", "and"], ["operator", "asr"], ["operator", "land"], - ["operator", "lor"], ["operator", "lxor"], ["operator", "lsl"], ["operator", "lsr"], - ["operator", "mod"], ["operator", "nor"], ["operator", "or"], + ["operator", "lor"], ["operator", "lsl"], ["operator", "lsr"], + ["operator", "lxor"], ["operator", "mod"], ["operator", "or"], ["operator", ":="], ["operator", "="], ["operator", "<"], ["operator", ">"], ["operator", "@"], diff --git a/tests/languages/ocaml/type_feature.test b/tests/languages/ocaml/type_variable_feature.test similarity index 50% rename from tests/languages/ocaml/type_feature.test rename to tests/languages/ocaml/type_variable_feature.test index f6fdd68648..7f680e47fe 100644 --- a/tests/languages/ocaml/type_feature.test +++ b/tests/languages/ocaml/type_variable_feature.test @@ -1,17 +1,13 @@ 'Foo 'bar_42 -`Foo -`bar_42 ---------------------------------------------------- [ - ["type", "'Foo"], - ["type", "'bar_42"], - ["type", "`Foo"], - ["type", "`bar_42"] + ["type_variable", "'Foo"], + ["type_variable", "'bar_42"] ] ---------------------------------------------------- -Checks for types. \ No newline at end of file +Checks for type variables. \ No newline at end of file diff --git a/tests/languages/ocaml/variant_feature.test b/tests/languages/ocaml/variant_feature.test new file mode 100644 index 0000000000..5cc7242566 --- /dev/null +++ b/tests/languages/ocaml/variant_feature.test @@ -0,0 +1,15 @@ +`Foo +`bar32 +`Baz_42 + +---------------------------------------------------- + +[ + ["variant", "`Foo"], + ["variant", "`bar32"], + ["variant", "`Baz_42"] +] + +---------------------------------------------------- + +Checks for polymorphic variants. \ No newline at end of file