From 4f32ba3bfec562c8487d9caea560c70e9f5c1183 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Tue, 24 Mar 2020 11:53:24 +0100 Subject: [PATCH 1/4] Scheme: Improvements --- components/prism-scheme.js | 17 +++++++--- components/prism-scheme.min.js | 2 +- tests/languages/scheme/character_feature.test | 34 +++++++++++++++++-- .../scheme/lambda_parameter_feature.test | 21 ++++++++++++ tests/languages/scheme/number_feature.test | 9 ++++- tests/languages/scheme/string_feature.test | 8 ++--- tests/languages/scheme/symbol_feature.test | 13 +++++++ 7 files changed, 90 insertions(+), 14 deletions(-) create mode 100644 tests/languages/scheme/lambda_parameter_feature.test create mode 100644 tests/languages/scheme/symbol_feature.test diff --git a/components/prism-scheme.js b/components/prism-scheme.js index 13a0f6d59b..45bee055f7 100644 --- a/components/prism-scheme.js +++ b/components/prism-scheme.js @@ -1,13 +1,22 @@ Prism.languages.scheme = { 'comment': /;.*/, 'string': { - pattern: /"(?:[^"\\]|\\.)*"|'[^()#'\s]+/, + pattern: /"(?:[^"\\]|\\.)*"/, + greedy: true + }, + 'symbol': { + pattern: /'[^()#'\s]+/, greedy: true }, 'character': { - pattern: /#\\(?:[ux][a-fA-F\d]+|[a-zA-Z]+|\S)/, + pattern: /#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/, + greedy: true, alias: 'string' }, + 'lambda-parameter': { + pattern: /(\(lambda\s+\()[^()'\s]+/, + lookbehind: true + }, 'keyword': { pattern: /(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/, lookbehind: true @@ -17,7 +26,7 @@ Prism.languages.scheme = { lookbehind: true }, 'number': { - pattern: /([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:\s*[-+]\s*\d*\.?\d+i)?)\b/, + pattern: /([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:\s*[-+]\s*\d*\.?\d+i)?)(?=[\s()]|$)/, lookbehind: true }, 'boolean': /#[tf]/, @@ -26,7 +35,7 @@ Prism.languages.scheme = { lookbehind: true }, 'function': { - pattern: /(\()[^()'\s]+(?=[()\s)]|$)/, + pattern: /(\()[^()'\s]+(?=[()\s]|$)/, lookbehind: true }, 'punctuation': /[()']/ diff --git a/components/prism-scheme.min.js b/components/prism-scheme.min.js index 04bc6c1943..c4443773ec 100644 --- a/components/prism-scheme.min.js +++ b/components/prism-scheme.min.js @@ -1 +1 @@ -Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"|'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[a-zA-Z]+|\S)/,alias:"string"},keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/,lookbehind:!0},builtin:{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])/,lookbehind:!0},number:{pattern:/([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:\s*[-+]\s*\d*\.?\d+i)?)\b/,lookbehind:!0},boolean:/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=\s|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s)]|$)/,lookbehind:!0},punctuation:/[()']/}; \ No newline at end of file +Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,greedy:!0,alias:"string"},"lambda-parameter":{pattern:/(\(lambda\s+\()[^()'\s]+/,lookbehind:!0},keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/,lookbehind:!0},builtin:{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])/,lookbehind:!0},number:{pattern:/([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:\s*[-+]\s*\d*\.?\d+i)?)(?=[\s()]|$)/,lookbehind:!0},boolean:/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=\s|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s]|$)/,lookbehind:!0},punctuation:/[()']/}; \ No newline at end of file diff --git a/tests/languages/scheme/character_feature.test b/tests/languages/scheme/character_feature.test index 06185b5930..f95cb705bf 100644 --- a/tests/languages/scheme/character_feature.test +++ b/tests/languages/scheme/character_feature.test @@ -1,5 +1,15 @@ -#\a -#\space +#\a ; lowercase letter +#\A ; uppercase letter +#\( ; left parenthesis +#\space ; the space character +#\newline ; the newline character + +#\c-a ; Control-a +#\meta-b ; Meta-b +#\c-s-m-h-a ; Control-Meta-Super-Hyper-A + +#\; #\' #\" + #\u0041 #\x10FFFF #\λ @@ -9,7 +19,27 @@ [ ["character", "#\\a"], + ["comment", "; lowercase letter"], + ["character", "#\\A"], + ["comment", "; uppercase letter"], + ["character", "#\\("], + ["comment", "; left parenthesis"], ["character", "#\\space"], + ["comment", "; the space character"], + ["character", "#\\newline"], + ["comment", "; the newline character"], + + ["character", "#\\c-a"], + ["comment", "; Control-a"], + ["character", "#\\meta-b"], + ["comment", "; Meta-b"], + ["character", "#\\c-s-m-h-a"], + ["comment", "; Control-Meta-Super-Hyper-A"], + + ["character", "#\\;"], + ["character", "#\\'"], + ["character", "#\\\""], + ["character", "#\\u0041"], ["character", "#\\x10FFFF"], ["character", "#\\λ"], diff --git a/tests/languages/scheme/lambda_parameter_feature.test b/tests/languages/scheme/lambda_parameter_feature.test new file mode 100644 index 0000000000..afc03ab76d --- /dev/null +++ b/tests/languages/scheme/lambda_parameter_feature.test @@ -0,0 +1,21 @@ +(lambda (foo bar) (concat foo bar)) + +---------------------------------------------------- + +[ + ["punctuation", "("], + ["keyword", "lambda"], + ["punctuation", "("], + ["lambda-parameter", "foo"], + " bar", + ["punctuation", ")"], + ["punctuation", "("], + ["function", "concat"], + " foo bar", + ["punctuation", ")"], + ["punctuation", ")"] +] + +---------------------------------------------------- + +Checks for lambda parameters. diff --git a/tests/languages/scheme/number_feature.test b/tests/languages/scheme/number_feature.test index bdd2af45a5..24d15250e8 100644 --- a/tests/languages/scheme/number_feature.test +++ b/tests/languages/scheme/number_feature.test @@ -5,6 +5,9 @@ (foo 2.5+0.0i) (foo 3+0i) +; not a number but a symbol +(define 1+2 10) + ---------------------------------------------------- [ @@ -13,7 +16,11 @@ ["punctuation", "("], ["function", "foo"], ["number", "8/3"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "3+4i"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "2.5+0.0i"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "3+0i"], ["punctuation", ")"] + ["punctuation", "("], ["function", "foo"], ["number", "3+0i"], ["punctuation", ")"], + + ["comment", "; not a number but a symbol"], + + ["punctuation", "("], ["keyword", "define"], " 1+2 ", ["number", "10"], ["punctuation", ")"] ] ---------------------------------------------------- diff --git a/tests/languages/scheme/string_feature.test b/tests/languages/scheme/string_feature.test index 821f1ff834..0361b517c4 100644 --- a/tests/languages/scheme/string_feature.test +++ b/tests/languages/scheme/string_feature.test @@ -4,19 +4,15 @@ multi line " -'turkey -(define a 'foo) ---------------------------------------------------- [ ["string", "\"\""], ["string", "\"fo\\\"obar\""], - ["string", "\"\r\nmulti\r\nline\r\n\""], - ["string", "'turkey"], - ["punctuation", "("], ["keyword", "define"], " a ", ["string","'foo"], ["punctuation",")"] + ["string", "\"\r\nmulti\r\nline\r\n\""] ] ---------------------------------------------------- -Checks for strings and symbols. +Checks for strings. diff --git a/tests/languages/scheme/symbol_feature.test b/tests/languages/scheme/symbol_feature.test new file mode 100644 index 0000000000..3cdf4cb5c1 --- /dev/null +++ b/tests/languages/scheme/symbol_feature.test @@ -0,0 +1,13 @@ +'turkey +(define a 'foo) + +---------------------------------------------------- + +[ + ["symbol", "'turkey"], + ["punctuation", "("], ["keyword", "define"], " a ", ["symbol","'foo"], ["punctuation",")"] +] + +---------------------------------------------------- + +Checks for symbols. From 41b9f279b5a02ce40c8559560dcb12427600f455 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Tue, 24 Mar 2020 12:16:53 +0100 Subject: [PATCH 2/4] Added known failure --- known-failures.html | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/known-failures.html b/known-failures.html index b03f034aee..6083199b4e 100644 --- a/known-failures.html +++ b/known-failures.html @@ -287,6 +287,20 @@

Nested block comments

+
+ +

The first argument of case-lambda argument lists are highlighted as functions

+
(define plus
+	(case-lambda
+		(() 0)
+		((x) x)
+		((x y) (+ x y))
+		((x y z) (+ (+ x y) z))
+		(args (apply + args))))
+ +
+ +

Nested block comments

From 4dcc670256bff564f0505d3f0fec482f719e19a9 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Sat, 28 Mar 2020 13:37:20 +0100 Subject: [PATCH 3/4] Further improved scheme numbers --- components/prism-scheme.js | 7 ++++- components/prism-scheme.min.js | 2 +- tests/languages/scheme/number_feature.test | 36 ++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/components/prism-scheme.js b/components/prism-scheme.js index 45bee055f7..b5c20ee8d2 100644 --- a/components/prism-scheme.js +++ b/components/prism-scheme.js @@ -26,7 +26,12 @@ Prism.languages.scheme = { lookbehind: true }, 'number': { - pattern: /([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:\s*[-+]\s*\d*\.?\d+i)?)(?=[\s()]|$)/, + // This pattern (apart from the lookarounds) works like this: + // := \d*\.?\d+(?:[eE][+-]?\d+)? + // := (?:[+-]i)?|i + // := \d+\/\d+ + // := [+-]?(?:|) + pattern: /([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:[eE][+-]?\d+)?(?:[+-]\d*\.?\d+(?:[eE][+-]?\d+)?i)?|\d*\.?\d+(?:[eE][+-]?\d+)?i)(?=[\s()]|$)/, lookbehind: true }, 'boolean': /#[tf]/, diff --git a/components/prism-scheme.min.js b/components/prism-scheme.min.js index c4443773ec..828c62c25f 100644 --- a/components/prism-scheme.min.js +++ b/components/prism-scheme.min.js @@ -1 +1 @@ -Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,greedy:!0,alias:"string"},"lambda-parameter":{pattern:/(\(lambda\s+\()[^()'\s]+/,lookbehind:!0},keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/,lookbehind:!0},builtin:{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])/,lookbehind:!0},number:{pattern:/([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:\s*[-+]\s*\d*\.?\d+i)?)(?=[\s()]|$)/,lookbehind:!0},boolean:/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=\s|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s]|$)/,lookbehind:!0},punctuation:/[()']/}; \ No newline at end of file +Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,greedy:!0,alias:"string"},"lambda-parameter":{pattern:/(\(lambda\s+\()[^()'\s]+/,lookbehind:!0},keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/,lookbehind:!0},builtin:{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])/,lookbehind:!0},number:{pattern:/([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:[eE][+-]?\d+)?(?:[+-]\d*\.?\d+(?:[eE][+-]?\d+)?i)?|\d*\.?\d+(?:[eE][+-]?\d+)?i)(?=[\s()]|$)/,lookbehind:!0},boolean:/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=\s|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s]|$)/,lookbehind:!0},punctuation:/[()']/}; \ No newline at end of file diff --git a/tests/languages/scheme/number_feature.test b/tests/languages/scheme/number_feature.test index 24d15250e8..502510c054 100644 --- a/tests/languages/scheme/number_feature.test +++ b/tests/languages/scheme/number_feature.test @@ -1,9 +1,21 @@ (foo 42) +(foo +42) +(foo -42) +(foo 1e3) +(foo +1e3) +(foo -1e3) +(foo 1e+3) +(foo 1e-3) (foo 3.14159) +(foo 3.14159e-1) (foo 8/3) (foo 3+4i) (foo 2.5+0.0i) +(foo -2.5+0.0i) +(foo -2.5e4+0.0e4i) (foo 3+0i) +(foo -2e-5i) +(list 10i +10i -10i 10.10i 10+10i 10.10+10.10i 10-10i 10e+10i 10+10e+10i) ; not a number but a symbol (define 1+2 10) @@ -12,11 +24,35 @@ [ ["punctuation", "("], ["function", "foo"], ["number", "42"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "+42"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "-42"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "1e3"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "+1e3"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "-1e3"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "1e+3"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "1e-3"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "3.14159"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "3.14159e-1"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "8/3"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "3+4i"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "2.5+0.0i"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "-2.5+0.0i"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "-2.5e4+0.0e4i"], ["punctuation", ")"], ["punctuation", "("], ["function", "foo"], ["number", "3+0i"], ["punctuation", ")"], + ["punctuation", "("], ["function", "foo"], ["number", "-2e-5i"], ["punctuation", ")"], + + ["punctuation", "("], + ["builtin", "list"], + ["number", "10i"], + ["number", "+10i"], + ["number", "-10i"], + ["number", "10.10i"], + ["number", "10+10i"], + ["number", "10.10+10.10i"], + ["number", "10-10i"], + ["number", "10e+10i"], + ["number", "10+10e+10i"], + ["punctuation", ")"], ["comment", "; not a number but a symbol"], From 17bf14cdfd57f3d2b1d70d785a4f670a2f2ef952 Mon Sep 17 00:00:00 2001 From: RunDevelopment Date: Mon, 6 Apr 2020 22:55:21 +0200 Subject: [PATCH 4/4] Further improvements to number --- components/prism-scheme.js | 20 +++- components/prism-scheme.min.js | 2 +- tests/languages/scheme/number_feature.test | 101 ++++++++++++++------- 3 files changed, 83 insertions(+), 40 deletions(-) diff --git a/components/prism-scheme.js b/components/prism-scheme.js index b5c20ee8d2..ad5d000b9c 100644 --- a/components/prism-scheme.js +++ b/components/prism-scheme.js @@ -27,11 +27,21 @@ Prism.languages.scheme = { }, 'number': { // This pattern (apart from the lookarounds) works like this: - // := \d*\.?\d+(?:[eE][+-]?\d+)? - // := (?:[+-]i)?|i - // := \d+\/\d+ - // := [+-]?(?:|) - pattern: /([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:[eE][+-]?\d+)?(?:[+-]\d*\.?\d+(?:[eE][+-]?\d+)?i)?|\d*\.?\d+(?:[eE][+-]?\d+)?i)(?=[\s()]|$)/, + // + // Decimal numbers + // := \d*\.?\d+(?:[eE][+-]?\d+)?|\d+\/\d+ + // := (?:[+-]i)?|i + // := (?:#d(?:#[ei])?|#[ei](?:#d)?)? + // := [+-]? + // + // Binary, octal, and hexadecimal numbers + // := [\da-fA-F]+(?:\/[\da-fA-F]+)? + // := (?:[+-]i)?|i + // := #[box](?:#[ei])?|#[ei](?:#[box])? + // := [+-]? + // + // := | + 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()]|$)/, lookbehind: true }, 'boolean': /#[tf]/, diff --git a/components/prism-scheme.min.js b/components/prism-scheme.min.js index 828c62c25f..4a2d1fa28a 100644 --- a/components/prism-scheme.min.js +++ b/components/prism-scheme.min.js @@ -1 +1 @@ -Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,greedy:!0,alias:"string"},"lambda-parameter":{pattern:/(\(lambda\s+\()[^()'\s]+/,lookbehind:!0},keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/,lookbehind:!0},builtin:{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])/,lookbehind:!0},number:{pattern:/([\s()])[-+]?(?:\d+\/\d+|\d*\.?\d+(?:[eE][+-]?\d+)?(?:[+-]\d*\.?\d+(?:[eE][+-]?\d+)?i)?|\d*\.?\d+(?:[eE][+-]?\d+)?i)(?=[\s()]|$)/,lookbehind:!0},boolean:/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=\s|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s]|$)/,lookbehind:!0},punctuation:/[()']/}; \ No newline at end of file +Prism.languages.scheme={comment:/;.*/,string:{pattern:/"(?:[^"\\]|\\.)*"/,greedy:!0},symbol:{pattern:/'[^()#'\s]+/,greedy:!0},character:{pattern:/#\\(?:[ux][a-fA-F\d]+|[-a-zA-Z]+|\S)/,greedy:!0,alias:"string"},"lambda-parameter":{pattern:/(\(lambda\s+\()[^()'\s]+/,lookbehind:!0},keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)(?=[()\s])/,lookbehind:!0},builtin:{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])/,lookbehind:!0},number:{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()]|$)/,lookbehind:!0},boolean:/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)(?=\s|$)/,lookbehind:!0},function:{pattern:/(\()[^()'\s]+(?=[()\s]|$)/,lookbehind:!0},punctuation:/[()']/}; \ No newline at end of file diff --git a/tests/languages/scheme/number_feature.test b/tests/languages/scheme/number_feature.test index 502510c054..15f1ca20a5 100644 --- a/tests/languages/scheme/number_feature.test +++ b/tests/languages/scheme/number_feature.test @@ -1,45 +1,57 @@ -(foo 42) -(foo +42) -(foo -42) -(foo 1e3) -(foo +1e3) -(foo -1e3) -(foo 1e+3) -(foo 1e-3) -(foo 3.14159) -(foo 3.14159e-1) +(foo 42 +42 -42) +(foo 1e3 +1e3 -1e3) +(foo 1e+3 1e-3 3.14159 3.14159e-1) (foo 8/3) -(foo 3+4i) -(foo 2.5+0.0i) -(foo -2.5+0.0i) -(foo -2.5e4+0.0e4i) -(foo 3+0i) -(foo -2e-5i) +(foo 3+4i 2.5+0.0i 2.5+0.0i -2.5e4+0.0e4i 3+0i -2e-5i) (list 10i +10i -10i 10.10i 10+10i 10.10+10.10i 10-10i 10e+10i 10+10e+10i) +(list #d123 #e#d123e-4 #d#i12 #i-1.234i) + +(list #xBAD #b1110011 #o777) +(list #i#x10 #i#x10+10i #b10+10i) + ; not a number but a symbol (define 1+2 10) ---------------------------------------------------- [ - ["punctuation", "("], ["function", "foo"], ["number", "42"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "+42"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "-42"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "1e3"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "+1e3"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "-1e3"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "1e+3"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "1e-3"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "3.14159"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "3.14159e-1"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "8/3"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "3+4i"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "2.5+0.0i"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "-2.5+0.0i"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "-2.5e4+0.0e4i"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "3+0i"], ["punctuation", ")"], - ["punctuation", "("], ["function", "foo"], ["number", "-2e-5i"], ["punctuation", ")"], + ["punctuation", "("], + ["function", "foo"], + ["number", "42"], + ["number", "+42"], + ["number", "-42"], + ["punctuation", ")"], + + ["punctuation", "("], + ["function", "foo"], + ["number", "1e3"], + ["number", "+1e3"], + ["number", "-1e3"], + ["punctuation", ")"], + + ["punctuation", "("], + ["function", "foo"], + ["number", "1e+3"], + ["number", "1e-3"], + ["number", "3.14159"], + ["number", "3.14159e-1"], + ["punctuation", ")"], + + ["punctuation", "("], + ["function", "foo"], + ["number", "8/3"], + ["punctuation", ")"], + + ["punctuation", "("], + ["function", "foo"], + ["number", "3+4i"], + ["number", "2.5+0.0i"], + ["number", "2.5+0.0i"], + ["number", "-2.5e4+0.0e4i"], + ["number", "3+0i"], + ["number", "-2e-5i"], + ["punctuation", ")"], ["punctuation", "("], ["builtin", "list"], @@ -54,8 +66,29 @@ ["number", "10+10e+10i"], ["punctuation", ")"], - ["comment", "; not a number but a symbol"], + ["punctuation", "("], + ["builtin", "list"], + ["number", "#d123"], + ["number", "#e#d123e-4"], + ["number", "#d#i12"], + ["number", "#i-1.234i"], + ["punctuation", ")"], + + ["punctuation", "("], + ["builtin", "list"], + ["number", "#xBAD"], + ["number", "#b1110011"], + ["number", "#o777"], + ["punctuation", ")"], + ["punctuation", "("], + ["builtin", "list"], + ["number", "#i#x10"], + ["number", "#i#x10+10i"], + ["number", "#b10+10i"], + ["punctuation", ")"], + + ["comment", "; not a number but a symbol"], ["punctuation", "("], ["keyword", "define"], " 1+2 ", ["number", "10"], ["punctuation", ")"] ]