1 package p
2
3 import (
4 . "github.com/alecthomas/chroma"
5 "github.com/alecthomas/chroma/lexers/internal"
6 )
7
8
9
10
11
12
13
14
15
16 var PlutusCoreLang = internal.Register(MustNewLazyLexer(
17 &Config{
18 Name: "Plutus Core",
19 Aliases: []string{"plutus-core", "plc"},
20 Filenames: []string{"*.plc"},
21 MimeTypes: []string{"text/x-plutus-core", "application/x-plutus-core"},
22 },
23 plutusCoreRules,
24 ))
25
26 func plutusCoreRules() Rules {
27 return Rules{
28 "root": {
29 {`\s+`, Text, nil},
30 {`(\(|\))`, Punctuation, nil},
31 {`(\[|\])`, Punctuation, nil},
32 {`({|})`, Punctuation, nil},
33
34
35
36 {`([+-]?\d+)`, LiteralNumberInteger, nil},
37 {`(#([a-fA-F0-9][a-fA-F0-9])+)`, LiteralString, nil},
38 {`(\(\))`, NameConstant, nil},
39 {`(True|False)`, NameConstant, nil},
40
41
42
43 {`(con |abs |iwrap |unwrap |lam |builtin |delay |force |error)`, Keyword, nil},
44 {`(fun |all |ifix |lam |con )`, Keyword, nil},
45 {`(type|fun )`, Keyword, nil},
46 {`(program )(\S+)`, ByGroups(Keyword, LiteralString), nil},
47
48
49 {`(unit|bool|integer|bytestring|string)`, KeywordType, nil},
50
51
52
53 {`(addInteger |subtractInteger |multiplyInteger |divideInteger |quotientInteger |remainderInteger |modInteger |equalsInteger |lessThanInteger |lessThanEqualsInteger )`, NameBuiltin, nil},
54 {`(appendByteString |consByteString |sliceByteString |lengthOfByteString |indexByteString |equalsByteString |lessThanByteString |lessThanEqualsByteString )`, NameBuiltin, nil},
55 {`(sha2_256 |sha3_256 |blake2b_256 |verifySignature )`, NameBuiltin, nil},
56 {`(appendString |equalsString |encodeUtf8 |decodeUtf8 )`, NameBuiltin, nil},
57 {`(ifThenElse )`, NameBuiltin, nil},
58 {`(chooseUnit )`, NameBuiltin, nil},
59 {`(trace )`, NameBuiltin, nil},
60 {`(fstPair |sndPair )`, NameBuiltin, nil},
61 {`(chooseList |mkCons |headList |tailList |nullList )`, NameBuiltin, nil},
62 {`(chooseData |constrData |mapData |listData |iData |bData |unConstrData |unMapData |unListData |unIData |unBData |equalsData )`, NameBuiltin, nil},
63 {`(mkPairData |mkNilData |mkNilPairData )`, NameBuiltin, nil},
64
65
66 {`([a-zA-Z][a-zA-Z0-9_']*)`, Name, nil},
67
68
69 {`"`, LiteralStringDouble, Push("string")},
70 },
71 "string": {
72 {`[^\\"]+`, LiteralStringDouble, nil},
73 {`"`, LiteralStringDouble, Pop(1)},
74 },
75 }
76 }
77
View as plain text