mirror of
https://github.com/alecthomas/chroma.git
synced 2025-03-17 20:58:08 +02:00
Add an Alloy lexer (#892)
This commit is contained in:
parent
08be6f023f
commit
234600703b
@ -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 |
|
||||
|
58
lexers/embedded/alloy.xml
Normal file
58
lexers/embedded/alloy.xml
Normal file
@ -0,0 +1,58 @@
|
||||
|
||||
<lexer>
|
||||
<config>
|
||||
<name>Alloy</name>
|
||||
<alias>alloy</alias>
|
||||
<filename>*.als</filename>
|
||||
<mime_type>text/x-alloy</mime_type>
|
||||
<dot_all>true</dot_all>
|
||||
</config>
|
||||
<rules>
|
||||
<state name="sig">
|
||||
<rule pattern="(extends)\b"><token type="Keyword"/><pop depth="1"/></rule>
|
||||
<rule pattern="[a-zA-Z_][\w]*"*"><token type="Name"/></rule>
|
||||
<rule pattern="[^\S\n]+"><token type="TextWhitespace"/></rule>
|
||||
<rule pattern=","><token type="Punctuation"/></rule>
|
||||
<rule pattern="\{"><token type="Operator"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="module">
|
||||
<rule pattern="[^\S\n]+"><token type="TextWhitespace"/></rule>
|
||||
<rule pattern="[a-zA-Z_][\w]*"*"><token type="Name"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="fun">
|
||||
<rule pattern="[^\S\n]+"><token type="TextWhitespace"/></rule>
|
||||
<rule pattern="\{"><token type="Operator"/><pop depth="1"/></rule>
|
||||
<rule pattern="[a-zA-Z_][\w]*"*"><token type="Name"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="fact">
|
||||
<rule><include state="fun"/></rule>
|
||||
<rule pattern=""\b(\\\\|\\[^\\]|[^"\\])*""><token type="LiteralString"/><pop depth="1"/></rule>
|
||||
</state>
|
||||
<state name="root">
|
||||
<rule pattern="--.*?$"><token type="CommentSingle"/></rule>
|
||||
<rule pattern="//.*?$"><token type="CommentSingle"/></rule>
|
||||
<rule pattern="/\*.*?\*/"><token type="CommentMultiline"/></rule>
|
||||
<rule pattern="[^\S\n]+"><token type="TextWhitespace"/></rule>
|
||||
<rule pattern="(module|open)(\s+)"><bygroups><token type="KeywordNamespace"/><token type="TextWhitespace"/></bygroups><push state="module"/></rule>
|
||||
<rule pattern="(sig|enum)(\s+)"><bygroups><token type="KeywordDeclaration"/><token type="TextWhitespace"/></bygroups><push state="sig"/></rule>
|
||||
<rule pattern="(iden|univ|none)\b"><token type="KeywordConstant"/></rule>
|
||||
<rule pattern="(int|Int)\b"><token type="KeywordType"/></rule>
|
||||
<rule pattern="(var|this|abstract|extends|set|seq|one|lone|let)\b"><token type="Keyword"/></rule>
|
||||
<rule pattern="(all|some|no|sum|disj|when|else)\b"><token type="Keyword"/></rule>
|
||||
<rule pattern="(run|check|for|but|exactly|expect|as|steps)\b"><token type="Keyword"/></rule>
|
||||
<rule pattern="(always|after|eventually|until|release)\b"><token type="Keyword"/></rule>
|
||||
<rule pattern="(historically|before|once|since|triggered)\b"><token type="Keyword"/></rule>
|
||||
<rule pattern="(and|or|implies|iff|in)\b"><token type="OperatorWord"/></rule>
|
||||
<rule pattern="(fun|pred|assert)(\s+)"><bygroups><token type="Keyword"/><token type="TextWhitespace"/></bygroups><push state="fun"/></rule>
|
||||
<rule pattern="(fact)(\s+)"><bygroups><token type="Keyword"/><token type="TextWhitespace"/></bygroups><push state="fact"/></rule>
|
||||
<rule pattern="!|#|&&|\+\+|<<|>>|>=|<=>|<=|\.\.|\.|->"><token type="Operator"/></rule>
|
||||
<rule pattern="[-+/*%=<>&!^|~{}\[\]().\';]"><token type="Operator"/></rule>
|
||||
<rule pattern="[a-zA-Z_][\w]*"*"><token type="Name"/></rule>
|
||||
<rule pattern="[:,]"><token type="Punctuation"/></rule>
|
||||
<rule pattern="[0-9]+"><token type="LiteralNumberInteger"/></rule>
|
||||
<rule pattern=""\b(\\\\|\\[^\\]|[^"\\])*""><token type="LiteralString"/></rule>
|
||||
<rule pattern="\n"><token type="TextWhitespace"/></rule>
|
||||
</state>
|
||||
</rules>
|
||||
</lexer>
|
||||
|
16
lexers/testdata/alloy.actual
vendored
Normal file
16
lexers/testdata/alloy.actual
vendored
Normal file
@ -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
|
||||
}
|
77
lexers/testdata/alloy.expected
vendored
Normal file
77
lexers/testdata/alloy.expected
vendored
Normal file
@ -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"}
|
||||
]
|
Loading…
x
Reference in New Issue
Block a user