diff --git a/Makefile b/Makefile index 2832d38..8b79ff2 100644 --- a/Makefile +++ b/Makefile @@ -51,12 +51,14 @@ $(BUILD_DIR)parigp.tmLanguage: $(BUILD_DIR)parigp.JSON-tmLanguage $(J2_RENDERS): $(BUILD_DIR)gp_builtins.json @cat $< | jinja2 --format=yaml $@.j2 > $@ +TEST_CASES := $(shell find $(ROOT_DIR)tests/ -name '*.test.gp*') + .PHONY: test test: ## Test the Textmate grammar for PARI/GP. test: $(BUILD_DIR)parigp.tmLanguage.json @vscode-tmgrammar-test \ --grammar $(BUILD_DIR)parigp.tmLanguage.json \ - $(ROOT_DIR)tests/*.gp + $(TEST_CASES) $(BUILD_DIR)gp_commands.tsv: $(eval FUNCS := $(shell echo '\c' | gp -fq | grep -v 'RETURN')) @@ -116,7 +118,7 @@ $(ROOT_DIR)images/coverage-badge.svg: '[.. | select(has("name") and .name != "PARI/GP") | .name] | @tsv' \ $(ROOT_DIR)src/*.YAML-tmLanguage* |\ xargs -n1 | sort | uniq)) - $(eval SCOPES_UNDER_TEST := $(shell tail -n+2 $(ROOT_DIR)tests/*.test.gp |\ + $(eval SCOPES_UNDER_TEST := $(shell tail -n+2 $(TEST_CASES) |\ grep -o 'source.parigp.*$$' |\ xargs -n1 | sort | uniq | grep -v source.parigp)) $(eval DIFF := $(shell echo $(REFS) $(SCOPES_UNDER_TEST) | tr ' ' '\n' | sort | uniq -u | xargs -n1)) diff --git a/src/functions.YAML-tmLanguage.j2 b/src/functions.YAML-tmLanguage.j2 index 035a1a3..fb6bec0 100644 --- a/src/functions.YAML-tmLanguage.j2 +++ b/src/functions.YAML-tmLanguage.j2 @@ -11,10 +11,12 @@ repository: builtins: patterns: - - match: '\b({{ scopes["entity.name.function"] | join("|") }})\b\s*(?={|\()' + match: '\b({{ scopes["entity.name.function"] | join("|") }})\b(\s*)(?={|\()' captures: 1: name: entity.name.function.builtins.parigp + 2: + name: constant.character.whitespace.parigp - match: '\b({{ scopes["constant.language"] | join("|") }})' captures: @@ -66,12 +68,14 @@ repository: - include: '#general' - include: '#operators' - - begin: '\.([[:alpha:]][[:alnum:]_]*)\b(?=[^=]*=)' + begin: '(\.)([[:alpha:]][[:alnum:]_]*)\b(?=[^=]*=)' end: '(?<=\s*\=)' beginCaptures: 1: + name: markup.punctuation.member.parigp + 2: name: entity.name.function.user.member.parigp - name: meta.function.user.member.parigp + name: meta.function.member.parigp patterns: - include: '#general' - include: '#operators' diff --git a/src/operators.YAML-tmLanguage b/src/operators.YAML-tmLanguage index 59fdbc2..0705e07 100644 --- a/src/operators.YAML-tmLanguage +++ b/src/operators.YAML-tmLanguage @@ -17,7 +17,7 @@ repository: match: '(<<|>>)' name: keyword.operator.shift.parigp - - match: '(<=|>=|<|(?|!=)' + match: '(<=|>=|<|(?|!=|==)' name: keyword.operator.comparison.parigp - match: '(\->)' diff --git a/tests/functions.test.gp b/tests/functions.test.gp index 43eb8ce..73f1ae4 100644 --- a/tests/functions.test.gp +++ b/tests/functions.test.gp @@ -95,214 +95,136 @@ ## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp ## ^ source.parigp punctuation.section.group.end.parigp - \\ Code from https://stackoverflow.com/a/65401338 -##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp - f(a)={my(e); [ispower(a,3,&e), e]} -##^ source.parigp meta.function.parigp entity.name.function.user.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.function.parigp variable.parameter.function.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp -## ^ source.parigp punctuation.section.group.begin.parigp -## ^^ source.parigp meta.block.parigp keyword.control.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.block.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp -## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^^^^^^^ source.parigp meta.block.parigp meta.brackets.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp keyword.operator.pointer.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^ source.parigp punctuation.section.group.end.parigp + v = ((y, {z: t_INT = 1}) -> y^2 + z^2)(10) +##^ source.parigp variable.name.parigp +## ^ ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp markup.annotation.parigp +## ^ ^ ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp support.type.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ ^ source.parigp meta.parens.parigp variable.name.parigp +## ^ ^ ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp - \\ Code from https://stackoverflow.com/a/67286398 -##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp - counts_for((v: t_VEC), lower: t_INT, upper: t_INT) = { -##^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp markup.annotation.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^^^^^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp support.type.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp meta.function.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ ^ ^ ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^^^^^ ^^^^^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ ^ source.parigp meta.function.parigp meta.parens.parigp markup.annotation.parigp -## ^^^^^ ^^^^^ source.parigp meta.function.parigp meta.parens.parigp support.type.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp -## ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp + \q +##^^ source.parigp support.function.parigp - my(counts = vector(1+upper-lower)); -## ^^ source.parigp meta.block.parigp keyword.control.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp keyword.operator.assignment.parigp -## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.arithmetic.parigp -## ^^^^^ ^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp - for(i=1, #v, counts[1+v[i]-lower]++); -## ^^^ source.parigp meta.block.parigp keyword.control.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.assignment.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.block.parigp keyword.operator.cardinality.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp -## ^ ^^^^^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^^ source.parigp meta.block.parigp keyword.operator.increment-decrement.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp - vector(#counts, i, [i-1, counts[i]]) -## ^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.cardinality.parigp -## ^^^^^^ ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp - }; -##^ source.parigp punctuation.section.group.end.parigp -## ^ source.parigp markup.punctuation.statement-terminator.parigp + \w "output.txt" +##^^ source.parigp support.function.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^^^^^^^^^^^^ source.parigp constant.character.escape.parigp - counts_for1({v: t_VEC}) = { -##^^^^^^^^^^^ source.parigp entity.name.function.user.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp markup.annotation.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp -## ^^^^^ source.parigp support.type.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp -## ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp - counts_for(v, vecmin(v), vecmax(v)) -## ^^^^^^^^^^ source.parigp meta.block.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^^^^^^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp - }; -##^ source.parigp punctuation.section.group.end.parigp -## ^ source.parigp markup.punctuation.statement-terminator.parigp + x -> x +##^ source.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp variable.name.parigp - most_frequent(v: t_VEC) = { -##^^^^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp markup.annotation.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^^^^^ source.parigp meta.function.parigp meta.parens.parigp support.type.parigp -## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp -## ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp - my(counts=counts_for1(v)); -## ^^ source.parigp meta.block.parigp keyword.control.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.assignment.parigp -## ^^^^^^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp - vecsort(counts, [2], 4)[1][1] -## ^^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp - }; -##^ source.parigp punctuation.section.group.end.parigp -## ^ source.parigp markup.punctuation.statement-terminator.parigp + [(x) -> x, 1] +##^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.brackets.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.brackets.parigp variable.name.parigp +## ^ source.parigp meta.brackets.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.brackets.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.brackets.parigp constant.numeric.int.parigp +## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp + ({x} -> 1)() +##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp - \\ Code from https://stackoverflow.com/a/72443498 -##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp - M = matreduce([1,2,1,1,2,2,2,3,1,2,1,3]); -##^ source.parigp variable.name.parigp -## ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^^^^^^^^^ source.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp markup.punctuation.statement-terminator.parigp - N = 4; - pred = (elt) -> elt > N; -##^^^^ source.parigp entity.name.function.user.lambda.parigp -## ^ ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^^ source.parigp meta.function.lambda.parigp meta.parens.parigp variable.parameter.function.parigp + (x -> 1)(10) +##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^ source.parigp meta.parens.parigp constant.numeric.int.parigp ## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^^ source.parigp keyword.operator.lambda -## ^^^ ^ source.parigp variable.name.parigp -## ^ source.parigp keyword.operator.comparison.parigp -## ^ source.parigp markup.punctuation.statement-terminator.parigp - #select(pred, M[,2]) -##^ source.parigp keyword.operator.cardinality.parigp -## ^^^^^^ source.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^^^ ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp + + \\ Currying +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp + ((x) -> (y) -> y + x^2)(1)(2) +##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ ^ source.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp + + (x -> y -> y + x^2)(1)(2) +##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp less = (x, y) -> x < y; ##^^^^ source.parigp entity.name.function.user.lambda.parigp @@ -334,16 +256,19 @@ \\ Code from pages 39-40 of "User's Guide to PARI/GP" ##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp x.r = { ##^ source.parigp variable.name.parigp +## ^ source.parigp meta.function.member.parigp markup.punctuation.member.parigp ## ^ source.parigp entity.name.function.user.member.parigp -## ^ source.parigp meta.function.user.member.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.function.user.member.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.function.member.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.member.parigp keyword.operator.assignment.parigp ## ^ source.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp if (type(x) != "t_VEC" || length(x) < 14, +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp ## ^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp -## ^ source.parigp meta.block.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp @@ -357,9 +282,11 @@ ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.comparison.parigp ## ^^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp error("this is not a proper elliptic curve: " x) +##^^^^^^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^^^^^ source.parigp meta.block.parigp meta.parens.parigp keyword.control.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp ## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.character.escape.parigp @@ -367,9 +294,11 @@ ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp ); +##^^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp ## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp x[13] +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp ## ^ source.parigp meta.block.parigp variable.name.parigp ## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp ## ^^ source.parigp meta.block.parigp meta.brackets.parigp constant.numeric.int.parigp diff --git a/tests/operators.test.gp b/tests/operators.test.gp index 01242f9..1467f28 100644 --- a/tests/operators.test.gp +++ b/tests/operators.test.gp @@ -85,3 +85,19 @@ ## ^^ source.parigp meta.brackets.parigp variable.name.parigp ## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp ## ^ source.parigp keyword.operator.derivative.parigp + + x = 1; x *= 10; +##^ ^ source.parigp variable.name.parigp +## ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp keyword.operator.assignment.parigp +## ^^ source.parigp keyword.operator.arithmetic.assignment.parigp +## ^ ^^ source.parigp constant.numeric.int.parigp +## ^ ^ source.parigp markup.punctuation.statement-terminator.parigp + + y = x >> 2; +##^ ^ source.parigp variable.name.parigp +## ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp keyword.operator.assignment.parigp +## ^^ source.parigp keyword.operator.shift.parigp +## ^ source.parigp constant.numeric.int.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp diff --git a/tests/other.test.gp b/tests/other.test.gp deleted file mode 100644 index 622cd44..0000000 --- a/tests/other.test.gp +++ /dev/null @@ -1,149 +0,0 @@ -## SYNTAX TEST "source.parigp" "Functions" - - - v = ((y, {z: t_INT = 1}) -> y^2 + z^2)(10) -##^ source.parigp variable.name.parigp -## ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp markup.annotation.parigp -## ^ ^ ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp -## ^^^^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp support.type.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp keyword.operator.assignment.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ ^ ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp -## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp - - \q -##^^ source.parigp support.function.parigp - - \w "output.txt" -##^^ source.parigp support.function.parigp -## ^ source.parigp constant.character.whitespace.parigp -## ^^^^^^^^^^^^ source.parigp constant.character.escape.parigp - - x = 1; x *= 10; -##^ ^ source.parigp variable.name.parigp -## ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^^ source.parigp keyword.operator.arithmetic.assignment.parigp -## ^ ^^ source.parigp constant.numeric.int.parigp -## ^ ^ source.parigp markup.punctuation.statement-terminator.parigp - - y = x >> 2; -##^ ^ source.parigp variable.name.parigp -## ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp keyword.operator.assignment.parigp -## ^^ source.parigp keyword.operator.shift.parigp -## ^ source.parigp constant.numeric.int.parigp -## ^ source.parigp markup.punctuation.statement-terminator.parigp - - x -> x -##^ source.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp -## ^ source.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp constant.character.whitespace.parigp -## ^ source.parigp variable.name.parigp - - [(x) -> x, 1] -##^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp -## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.brackets.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.brackets.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.brackets.parigp variable.name.parigp -## ^ source.parigp meta.brackets.parigp markup.punctuation.separator.parigp -## ^ source.parigp meta.brackets.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.brackets.parigp constant.numeric.int.parigp -## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp - - ({x} -> 1)() -##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp - - (x -> 1)(10) -##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp - - \\ Currying -##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp - ((x) -> (y) -> y + x^2)(1)(2) -##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp -## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp -## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp - - (x -> y -> y + x^2)(1)(2) -##^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp entity.name.function.user.lambda.anonymous.parigp variable.parameter.function.parigp -## ^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp constant.character.whitespace.parigp -## ^^ source.parigp meta.parens.parigp meta.function.lambda.anonymous.parigp keyword.operator.lambda -## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp -## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp -## ^ source.parigp meta.parens.parigp variable.name.parigp -## ^ source.parigp meta.parens.parigp keyword.operator.arithmetic.parigp -## ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp -## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp -## ^ ^ source.parigp meta.parens.parigp constant.numeric.int.parigp -## ^ ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp diff --git a/tests/others/gaussnb.test.gpi b/tests/others/gaussnb.test.gpi new file mode 100644 index 0000000..a12a484 --- /dev/null +++ b/tests/others/gaussnb.test.gpi @@ -0,0 +1,174 @@ +## SYNTAX TEST "source.parigp" "https://www.jjj.de/pari/gaussnb.gpi" + + /* -*- gp-script -*- */ +##^^ source.parigp comment.block.parigp punctuation.definition.comment.begin.parigp +## ^^^^^^^^^^^^^^^^^^^ source.parigp comment.block.parigp +## ^^ source.parigp comment.block.parigp punctuation.definition.comment.end.parigp + + \\% Gaussian normal bases +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + \\ Author: Joerg Arndt +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + \\ License: GPL version 3 or later +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + \\ online at http://www.jjj.de/pari/ +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + \\ version: 2014-October-16 (18:31) +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + + read("vecmanip.gpi"); \\ vecrotl() +##^^^^ source.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^^^^^^^^^^^^ source.parigp meta.parens.parigp constant.character.escape.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + + gauss_test(n, t)= +##^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp + { /* Test whether a type-t Gaussian normal basis exists for GF(2^n) */ +##^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.block.parigp comment.block.parigp punctuation.definition.comment.begin.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp meta.block.parigp comment.block.parigp +## ^^ source.parigp meta.block.parigp comment.block.parigp punctuation.definition.comment.end.parigp + my( p, r2, g, d ); +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ ^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ ^^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + p = t*n + 1; +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ ^ ^ source.parigp meta.block.parigp variable.name.parigp +## ^ ^ ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp keyword.operator.assignment.parigp +## ^ ^ source.parigp meta.block.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.block.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + if ( !isprime(p), return( 0 ) ); +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.logical.parigp +## ^^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + if ( p<=2, return( 0 ) ); +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.comparison.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + r2 = znorder( Mod(2, p) ); +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.block.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp keyword.operator.assignment.parigp +## ^^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + d = (p-1)/r2; +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ ^^ source.parigp meta.block.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + \\ print1(" d=", d, " "); +##^^ source.parigp meta.block.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp meta.block.parigp punctuation.definition.comment.parigp + g = gcd(d, n); +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp keyword.operator.assignment.parigp +## ^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + \\ print1( " t=",t, " r2=", r2, " d=", d, " g=", g); +##^^ source.parigp meta.block.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp meta.block.parigp punctuation.definition.comment.parigp + return ( if ( 1==g, 1, 0) ); +##^^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^^^^^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp constant.numeric.int.parigp +## ^^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp keyword.operator.comparison.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + } /* ----- */ +##^ source.parigp meta.block.parigp punctuation.section.group.end.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^^ source.parigp comment.block.parigp punctuation.definition.comment.begin.parigp +## ^^^^^^^ source.parigp comment.block.parigp +## ^^ source.parigp comment.block.parigp punctuation.definition.comment.end.parigp + + \\ ==== end of file ==== +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp diff --git a/tests/others/stackoverflow_65401338.test.gp b/tests/others/stackoverflow_65401338.test.gp new file mode 100644 index 0000000..09e1953 --- /dev/null +++ b/tests/others/stackoverflow_65401338.test.gp @@ -0,0 +1,31 @@ +## SYNTAX TEST "source.parigp" "https://stackoverflow.com/a/65401338" + + \\ Code from https://stackoverflow.com/a/65401338 +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + f(a)={my(e); [ispower(a,3,&e), e]} +##^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp punctuation.section.group.begin.parigp +## ^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp +## ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^^^^^^^ source.parigp meta.block.parigp meta.brackets.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp keyword.operator.pointer.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp punctuation.section.group.end.parigp diff --git a/tests/others/stackoverflow_67286398.test.gp b/tests/others/stackoverflow_67286398.test.gp new file mode 100644 index 0000000..5e8b856 --- /dev/null +++ b/tests/others/stackoverflow_67286398.test.gp @@ -0,0 +1,146 @@ +## SYNTAX TEST "source.parigp" "https://stackoverflow.com/a/67286398" + + \\ Code from https://stackoverflow.com/a/67286398 +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + counts_for((v: t_VEC), lower: t_INT, upper: t_INT) = { +##^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp markup.annotation.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.function.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ ^ ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^ ^^^^^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ ^ source.parigp meta.function.parigp meta.parens.parigp markup.annotation.parigp +## ^^^^^ ^^^^^ source.parigp meta.function.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp + + my(counts = vector(1+upper-lower)); +## ^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp keyword.operator.assignment.parigp +## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.arithmetic.parigp +## ^^^^^ ^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + for(i=1, #v, counts[1+v[i]-lower]++); +## ^^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.assignment.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp keyword.operator.cardinality.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp +## ^ ^^^^^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^^ source.parigp meta.block.parigp keyword.operator.increment-decrement.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + vector(#counts, i, [i-1, counts[i]]) +## ^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.cardinality.parigp +## ^^^^^^ ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ source.parigp meta.block.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp keyword.operator.arithmetic.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp + }; +##^ source.parigp punctuation.section.group.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp + + counts_for1({v: t_VEC}) = { +##^^^^^^^^^^^ source.parigp entity.name.function.user.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp markup.annotation.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp meta.function.parameter.optional.parigp meta.function.parameter.optional.end.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp + counts_for(v, vecmin(v), vecmax(v)) +## ^^^^^^^^^^ source.parigp meta.block.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^^ ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp entity.name.function.builtins.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp + }; +##^ source.parigp punctuation.section.group.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp + + most_frequent(v: t_VEC) = { +##^^^^^^^^^^^^^ source.parigp meta.function.parigp entity.name.function.user.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp markup.annotation.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^^^^^ source.parigp meta.function.parigp meta.parens.parigp support.type.parigp +## ^ source.parigp meta.function.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.function.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.function.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp punctuation.section.group.begin.parigp + my(counts=counts_for1(v)); +## ^^ source.parigp meta.block.parigp keyword.control.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp keyword.operator.assignment.parigp +## ^^^^^^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp meta.block.parigp markup.punctuation.statement-terminator.parigp + vecsort(counts, [2], 4)[1][1] +## ^^^^^^^ source.parigp meta.block.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^^^^ source.parigp meta.block.parigp meta.parens.parigp variable.name.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ ^ source.parigp meta.block.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp constant.numeric.int.parigp +## ^ source.parigp meta.block.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp constant.numeric.int.parigp +## ^ ^ source.parigp meta.block.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp + }; +##^ source.parigp punctuation.section.group.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp diff --git a/tests/others/stackoverflow_72443498.test.gp b/tests/others/stackoverflow_72443498.test.gp new file mode 100644 index 0000000..2485e06 --- /dev/null +++ b/tests/others/stackoverflow_72443498.test.gp @@ -0,0 +1,46 @@ +## SYNTAX TEST "source.parigp" "https://stackoverflow.com/a/72443498" + + \\ Code from https://stackoverflow.com/a/72443498 +##^^ source.parigp punctuation.definition.comment.parigp comment.line.double-slash.parigp +## ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ source.parigp punctuation.definition.comment.parigp + M = matreduce([1,2,1,1,2,2,2,3,1,2,1,3]); +##^ source.parigp variable.name.parigp +## ^ ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp keyword.operator.assignment.parigp +## ^^^^^^^^^ source.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp +## ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp + N = 4; +##^ source.parigp variable.name.parigp +## ^ ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp keyword.operator.assignment.parigp +## ^ source.parigp constant.numeric.int.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp + pred = (elt) -> elt > N; +##^^^^ source.parigp entity.name.function.user.lambda.parigp +## ^ ^ ^ ^ ^ ^ source.parigp constant.character.whitespace.parigp +## ^ source.parigp keyword.operator.assignment.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^ source.parigp meta.function.lambda.parigp meta.parens.parigp variable.parameter.function.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp +## ^^ source.parigp keyword.operator.lambda +## ^^^ ^ source.parigp variable.name.parigp +## ^ source.parigp keyword.operator.comparison.parigp +## ^ source.parigp markup.punctuation.statement-terminator.parigp + #select(pred, M[,2]) +##^ source.parigp keyword.operator.cardinality.parigp +## ^^^^^^ source.parigp entity.name.function.builtins.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.begin.parigp +## ^^^^ ^ source.parigp meta.parens.parigp variable.name.parigp +## ^ source.parigp meta.parens.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.parens.parigp constant.character.whitespace.parigp +## ^ source.parigp meta.brackets.parigp punctuation.section.brackets.begin.parigp +## ^ source.parigp meta.parens.parigp meta.brackets.parigp markup.punctuation.separator.parigp +## ^ source.parigp meta.parens.parigp meta.brackets.parigp constant.numeric.int.parigp +## ^ source.parigp meta.parens.parigp meta.brackets.parigp punctuation.section.brackets.end.parigp +## ^ source.parigp meta.parens.parigp punctuation.section.parens.end.parigp