token.bend
yaml-for-bend@0.1.1.0 · 96 lines · 13 definitions
1
2
3import Base
4
5
6
7type Mark is Data:
8 Mark{line: Nat, col: Nat, idx: Nat}
9
10
11type Style is Data:
12 Plain{}
13 Single{}
14 Double{}
15 Literal{}
16 Folded{}
17
18
19type Tok is Data:
20 StreamStart{}
21 StreamEnd{}
22 VersionDir{major: Nat, minor: Nat}
23 TagDir{handle: String, prefix: String}
24 DocStart{}
25 DocEnd{}
26 BSeqStart{}
27 BMapStart{}
28 BEnd{}
29 FSeqStart{}
30 FSeqEnd{}
31 FMapStart{}
32 FMapEnd{}
33 BEntry{}
34 FEntry{}
35 KeyTok{}
36 ValueTok{}
37 AliasTok{name: String}
38 AnchorTok{name: String}
39 TagTok{handle: String, suffix: String}
40 ScalarTok{text: String, style: Style}
41 Broken{error: Error}
42
43type Token is Data:
44 Token{tok: Tok, start: Mark, end: Mark}
45
46
47
48
49type Cause is Data:
50 Syntax{}
51 Content{}
52 Limit{}
53
54
55
56
57type Error is Data:
58 Error{why: String, at: Mark, cause: Cause}
59
60def mark.line(m: Mark) -> Nat:
61 match m:
62 case Mark{line, col, idx}:
63 line
64
65def mark.col(m: Mark) -> Nat:
66 match m:
67 case Mark{line, col, idx}:
68 col
69
70def mark.idx(m: Mark) -> Nat:
71 match m:
72 case Mark{line, col, idx}:
73 idx
74
75
76def mark.show(m: Mark) -> String:
77 match m:
78 case Mark{line, col, idx}:
79 "line " ++ Nat.show(1n+line) ++ " column " ++ Nat.show(1n+col)
80
81
82
83def error.show(e: Error) -> String:
84 match e:
85 case Error{why, at, cause}:
86 why ++ " at " ++ mark.show(at)
87
88def error.why(e: Error) -> String:
89 match e:
90 case Error{why, at, cause}:
91 why
92
93def error.at(e: Error) -> Mark:
94 match e:
95 case Error{why, at, cause}:
96 at