@@ -92,33 +92,46 @@ fn parse_p(
92
92
93
93
// If we just parsed a comma, we're expecting an Escaped or Non-Escaped string, or another comma
94
94
// (indicating an empty string)
95
- [ # ( Textdata ( str ) , _ ) , .. remaining_tokens ] , JustParsedComma , [
96
- curr_line ,
97
- .. previously_parsed_lines
98
- ] ->
95
+ [ # ( Textdata ( str ) , _ ) , .. remaining_tokens ] ,
96
+ JustParsedComma ,
97
+ [ curr_line , .. previously_parsed_lines ] ->
99
98
parse_p ( remaining_tokens , JustParsedField , [
100
99
[ str , .. curr_line ] ,
101
100
.. previously_parsed_lines
102
101
] )
103
102
104
- [ # ( Doublequote , _ ) , .. remaining_tokens ] , JustParsedComma , [
105
- curr_line ,
106
- .. previously_parsed_lines
107
- ] ->
103
+ [ # ( Doublequote , _ ) , .. remaining_tokens ] ,
104
+ JustParsedComma ,
105
+ [ curr_line , .. previously_parsed_lines ] ->
108
106
parse_p ( remaining_tokens , InsideEscapedString , [
109
107
[ "" , .. curr_line ] ,
110
108
.. previously_parsed_lines
111
109
] )
112
110
113
- [ # ( Comma , _ ) , .. remaining_tokens ] , JustParsedComma , [
114
- curr_line ,
115
- .. previously_parsed_lines
116
- ] ->
111
+ [ # ( Comma , _ ) , .. remaining_tokens ] ,
112
+ JustParsedComma ,
113
+ [ curr_line , .. previously_parsed_lines ] ->
117
114
parse_p ( remaining_tokens , JustParsedComma , [
118
115
[ "" , .. curr_line ] ,
119
116
.. previously_parsed_lines
120
117
] )
121
118
119
+ [ # ( CR , _ ) , .. remaining_tokens ] ,
120
+ JustParsedComma ,
121
+ [ curr_line , .. previously_parsed_lines ] ->
122
+ parse_p ( remaining_tokens , JustParsedCR , [
123
+ [ "" , .. curr_line ] ,
124
+ .. previously_parsed_lines
125
+ ] )
126
+
127
+ [ # ( LF , _ ) , .. remaining_tokens ] ,
128
+ JustParsedComma ,
129
+ [ curr_line , .. previously_parsed_lines ] ->
130
+ parse_p ( remaining_tokens , JustParsedNewline , [
131
+ [ "" , .. curr_line ] ,
132
+ .. previously_parsed_lines
133
+ ] )
134
+
122
135
[ # ( tok , loc ) , .. ] , JustParsedComma , _ ->
123
136
Error ( ParseError (
124
137
loc ,
@@ -130,10 +143,9 @@ fn parse_p(
130
143
[ # ( Textdata ( str ) , _ ) , .. remaining_tokens ] , JustParsedNewline , llf ->
131
144
parse_p ( remaining_tokens , JustParsedField , [ [ str ] , .. llf ] )
132
145
133
- [ # ( Doublequote , _ ) , .. remaining_tokens ] , JustParsedNewline , [
134
- curr_line ,
135
- .. previously_parsed_lines
136
- ] ->
146
+ [ # ( Doublequote , _ ) , .. remaining_tokens ] ,
147
+ JustParsedNewline ,
148
+ [ curr_line , .. previously_parsed_lines ] ->
137
149
parse_p ( remaining_tokens , InsideEscapedString , [
138
150
[ "" , .. curr_line ] ,
139
151
.. previously_parsed_lines
@@ -148,10 +160,9 @@ fn parse_p(
148
160
149
161
// If we're inside an escaped string, we can take anything until we get a double quote,
150
162
// but a double double quote "" escapes the double quote and we keep parsing
151
- [ # ( Doublequote , _ ) , # ( Doublequote , _ ) , .. remaining_tokens ] , InsideEscapedString , [
152
- [ str , .. rest_curr_line ] ,
153
- .. previously_parsed_lines
154
- ] ->
163
+ [ # ( Doublequote , _ ) , # ( Doublequote , _ ) , .. remaining_tokens ] ,
164
+ InsideEscapedString ,
165
+ [ [ str , .. rest_curr_line ] , .. previously_parsed_lines ] ->
155
166
parse_p ( remaining_tokens , InsideEscapedString , [
156
167
[ str <> "\" " , .. rest_curr_line ] ,
157
168
.. previously_parsed_lines
@@ -160,10 +171,9 @@ fn parse_p(
160
171
[ # ( Doublequote , _ ) , .. remaining_tokens ] , InsideEscapedString , llf ->
161
172
parse_p ( remaining_tokens , JustParsedField , llf )
162
173
163
- [ # ( other_token , _ ) , .. remaining_tokens ] , InsideEscapedString , [
164
- [ str , .. rest_curr_line ] ,
165
- .. previously_parsed_lines
166
- ] ->
174
+ [ # ( other_token , _ ) , .. remaining_tokens ] ,
175
+ InsideEscapedString ,
176
+ [ [ str , .. rest_curr_line ] , .. previously_parsed_lines ] ->
167
177
parse_p ( remaining_tokens , InsideEscapedString , [
168
178
[ str <> token . to_lexeme ( other_token ) , .. rest_curr_line ] ,
169
179
.. previously_parsed_lines
0 commit comments