UNPKG

2.41 kBJavaScriptView Raw
1Prism.languages.scheme = {
2 'comment': /;.*/,
3 'string': {
4 pattern: /"(?:[^"\\]|\\.)*"/,
5 greedy: true
6 },
7 'symbol': {
8 pattern: /'[^()#'\s]+/,
9 greedy: true
10 },
11 'character': {
12 pattern: /#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,
13 greedy: true,
14 alias: 'string'
15 },
16 'lambda-parameter': [
17 // https://www.cs.cmu.edu/Groups/AI/html/r4rs/r4rs_6.html#SEC30
18 {
19 pattern: /(\(lambda\s+)[^()'\s]+/,
20 lookbehind: true
21 },
22 {
23 pattern: /(\(lambda\s+\()[^()']+/,
24 lookbehind: true
25 }
26 ],
27 'keyword': {
28 pattern: /(\()(?:define(?:-library|-macro|-syntax|-values)?|defmacro|(?:case-)?lambda|let(?:(?:\*|rec)?(?:-values)?|-syntax|rec-syntax)|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-(?:case|rules))(?=[()\s]|$)/,
29 lookbehind: true
30 },
31 'builtin': {
32 pattern: /(\()(?:(?:cons|car|cdr|list|call-with-current-continuation|call\/cc|append|abs|apply|eval)\b|null\?|pair\?|boolean\?|eof-object\?|char\?|procedure\?|number\?|port\?|string\?|vector\?|symbol\?|bytevector\?)(?=[()\s]|$)/,
33 lookbehind: true
34 },
35 'number': {
36 // This pattern (apart from the lookarounds) works like this:
37 //
38 // Decimal numbers
39 // <dec real> := \d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+
40 // <dec complex> := <dec real>(?:[+-]<dec real>i)?|<dec real>i
41 // <dec prefix> := (?:#d(?:#[ei])?|#[ei](?:#d)?)?
42 // <dec number> := <dec prefix>[+-]?<complex>
43 //
44 // Binary, octal, and hexadecimal numbers
45 // <b.o.x. real> := [\da-fA-F]+(?:\/[\da-fA-F]+)?
46 // <b.o.x. complex> := <b.o.x. real>(?:[+-]<b.o.x. real>i)?|<b.o.x. real>i
47 // <b.o.x. prefix> := #[box](?:#[ei])?|#[ei](?:#[box])?
48 // <b.o.x. number> := <b.o.x. prefix>[+-]?<b.o.x. complex>
49 //
50 // <number> := <dec number>|<b.o.x. number>
51 pattern: /(^|[\s()])(?:(?:#d(?:#[ei])?|#[ei](?:#d)?)?[+-]?(?:(?:\d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+)(?:[+-](?:\d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+)i)?|(?:\d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+)i)|(?:#[box](?:#[ei])?|#[ei](?:#[box])?)[+-]?(?:[\da-fA-F]+(?:\/[\da-fA-F]+)?(?:[+-][\da-fA-F]+(?:\/[\da-fA-F]+)?i)?|[\da-fA-F]+(?:\/[\da-fA-F]+)?i))(?=[()\s]|$)/,
52 lookbehind: true
53 },
54 'boolean': {
55 pattern: /(^|[\s()])#[ft](?=[()\s]|$)/,
56 lookbehind: true
57 },
58 'operator': {
59 pattern: /(\()(?:[-+*%\/]|[<>]=?|=>?)(?=[()\s]|$)/,
60 lookbehind: true
61 },
62 'function': {
63 pattern: /(\()[^()'\s]+(?=[()\s]|$)/,
64 lookbehind: true
65 },
66 'punctuation': /[()']/
67};