def rec.go
bend-kit-csv@0.3.0.0 · csv.bend:61
import bend-kit-csv@0.3.0.0/csv.bend as Csv
import Base
61
62def rec.go(f: Nat, st: St, r: Array<U32> & U32, +len: U32, +i: U32, +s: U32, +esc: Bool, +sp: List<&2, Span>) -> Array<U32> & Scan:
63 match f:
64 case 0n:
65 (a, c) = r
66 (a, SBad{i})
67 case 1n+p:
68 match st:
69 case SStart{}:
70 (a, +c) = r
71 match c:
72 case 34:
73 rec.go(p, SQ{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, sp)
74 case 44:
75 rec.go(p, SStart{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, Span{i, i, False{}} <> sp)
76 case 10:
77 (a, SRow{start.sp(sp, i), (i + 1 : U32)})
78 case 13:
79 rec.go(p, SCR{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, start.sp(sp, i))
80 case 256:
81 (a, SRow{start.sp(sp, i), i})
82 case _:
83 rec.go(p, SUnq{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), i, False{}, sp)
84 case SUnq{}:
85 (a, +c) = r
86 match c:
87 case 44:
88 rec.go(p, SStart{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, Span{s, i, False{}} <> sp)
89 case 10:
90 (a, SRow{Span{s, i, False{}} <> sp, (i + 1 : U32)})
91 case 13:
92 rec.go(p, SCR{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, Span{s, i, False{}} <> sp)
93 case 256:
94 (a, SRow{Span{s, i, False{}} <> sp, i})
95 case 34:
96 (a, SBad{i})
97 case _:
98 rec.go(p, SUnq{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), s, False{}, sp)
99 case SQ{}:
100 (a, +c) = r
101 match c:
102 case 34:
103 rec.go(p, SQQ{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), s, esc, sp)
104 case 256:
105 (a, SBad{i})
106 case _:
107 rec.go(p, SQ{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), s, esc, sp)
108 case SQQ{}:
109 (a, +c) = r
110 match c:
111 case 34:
112 rec.go(p, SQ{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), s, True{}, sp)
113 case 44:
114 rec.go(p, SStart{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, Span{s, (i - 1 : U32), esc} <> sp)
115 case 10:
116 (a, SRow{Span{s, (i - 1 : U32), esc} <> sp, (i + 1 : U32)})
117 case 13:
118 rec.go(p, SCR{}, pk(a, len, (i + 1 : U32)), len, (i + 1 : U32), (i + 1 : U32), False{}, Span{s, (i - 1 : U32), esc} <> sp)
119 case 256:
120 (a, SRow{Span{s, (i - 1 : U32), esc} <> sp, i})
121 case _:
122 (a, SBad{i})
123 case SCR{}:
124 (a, +c) = r
125 match c:
126 case 10:
127 (a, SRow{sp, (i + 1 : U32)})
128 case _:
129 (a, SRow{sp, i})