From 234600703bc3a5a5e0748e46e7516f6ba042cc15 Mon Sep 17 00:00:00 2001 From: Daniel Date: Sat, 25 Nov 2023 13:52:31 -0800 Subject: [PATCH] Add an Alloy lexer (#892) --- README.md | 2 +- lexers/embedded/alloy.xml | 58 +++++++++++++++++++++++++ lexers/testdata/alloy.actual | 16 +++++++ lexers/testdata/alloy.expected | 77 ++++++++++++++++++++++++++++++++++ 4 files changed, 152 insertions(+), 1 deletion(-) create mode 100644 lexers/embedded/alloy.xml create mode 100644 lexers/testdata/alloy.actual create mode 100644 lexers/testdata/alloy.expected diff --git a/README.md b/README.md index 95e095eaa..25af3e095 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ translators for Pygments lexers and styles. | Prefix | Language | | :----: | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Agda, AL, Angular2, ANTLR, ApacheConf, APL, AppleScript, ArangoDB AQL, Arduino, ArmAsm, AutoHotkey, AutoIt, Awk | +| A | ABAP, ABNF, ActionScript, ActionScript 3, Ada, Agda, AL, Alloy, Angular2, ANTLR, ApacheConf, APL, AppleScript, ArangoDB AQL, Arduino, ArmAsm, AutoHotkey, AutoIt, Awk | | B | Ballerina, Bash, Bash Session, Batchfile, BibTeX, Bicep, BlitzBasic, BNF, BQN, Brainfuck | | C | C, C#, C++, Caddyfile, Caddyfile Directives, Cap'n Proto, Cassandra CQL, Ceylon, CFEngine3, cfstatement, ChaiScript, Chapel, Cheetah, Clojure, CMake, COBOL, CoffeeScript, Common Lisp, Coq, Crystal, CSS, Cython | | D | D, Dart, Dax, Diff, Django/Jinja, dns, Docker, DTD, Dylan | diff --git a/lexers/embedded/alloy.xml b/lexers/embedded/alloy.xml new file mode 100644 index 000000000..1de9ea6cc --- /dev/null +++ b/lexers/embedded/alloy.xml @@ -0,0 +1,58 @@ + + + + Alloy + alloy + *.als + text/x-alloy + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/lexers/testdata/alloy.actual b/lexers/testdata/alloy.actual new file mode 100644 index 000000000..89ff54ee9 --- /dev/null +++ b/lexers/testdata/alloy.actual @@ -0,0 +1,16 @@ +sig Node { + edges: set Node +} + +fact "Connected graph" { + some n: Node | n.*edges = Node +} + +fact "No self edges" { + no iden & edges +} + +one sig Ball { + -- note the var + var loc: Node +} diff --git a/lexers/testdata/alloy.expected b/lexers/testdata/alloy.expected new file mode 100644 index 000000000..743e54f6d --- /dev/null +++ b/lexers/testdata/alloy.expected @@ -0,0 +1,77 @@ +[ + {"type":"KeywordDeclaration","value":"sig"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"Node"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Name","value":"edges"}, + {"type":"Punctuation","value":":"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Keyword","value":"set"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"Node"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Operator","value":"}"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"fact"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"Connected graph\""}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Keyword","value":"some"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"n"}, + {"type":"Punctuation","value":":"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"Node"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"|"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"n"}, + {"type":"Operator","value":".*"}, + {"type":"Name","value":"edges"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"="}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"Node"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Operator","value":"}"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"fact"}, + {"type":"TextWhitespace","value":" "}, + {"type":"LiteralString","value":"\"No self edges\""}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Keyword","value":"no"}, + {"type":"TextWhitespace","value":" "}, + {"type":"KeywordConstant","value":"iden"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"\u0026"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"edges"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Operator","value":"}"}, + {"type":"TextWhitespace","value":"\n\n"}, + {"type":"Keyword","value":"one"}, + {"type":"TextWhitespace","value":" "}, + {"type":"KeywordDeclaration","value":"sig"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"Ball"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Operator","value":"{"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"CommentSingle","value":"-- note the var"}, + {"type":"TextWhitespace","value":"\n "}, + {"type":"Keyword","value":"var"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"loc"}, + {"type":"Punctuation","value":":"}, + {"type":"TextWhitespace","value":" "}, + {"type":"Name","value":"Node"}, + {"type":"TextWhitespace","value":"\n"}, + {"type":"Operator","value":"}"}, + {"type":"TextWhitespace","value":"\n"} +]