mirror of
https://github.com/byteverse/colonnade.git
synced 2026-04-19 14:44:16 +02:00
Correct handling of CRLF in siphon
This commit is contained in:
parent
a894241528
commit
39a849a559
@ -388,7 +388,11 @@ escapedField = do
|
|||||||
trailChar <- case mb of
|
trailChar <- case mb of
|
||||||
Just b
|
Just b
|
||||||
| b == comma -> A.anyWord8 >> return TrailCharComma
|
| b == comma -> A.anyWord8 >> return TrailCharComma
|
||||||
| b == newline || b == cr -> A.anyWord8 >> return TrailCharNewline
|
| b == newline -> A.anyWord8 >> return TrailCharNewline
|
||||||
|
| b == cr -> do
|
||||||
|
_ <- A.anyWord8
|
||||||
|
_ <- A.word8 newline
|
||||||
|
return TrailCharNewline
|
||||||
| otherwise -> fail "encountered double quote after escaped field"
|
| otherwise -> fail "encountered double quote after escaped field"
|
||||||
Nothing -> return TrailCharEnd
|
Nothing -> return TrailCharEnd
|
||||||
if doubleQuote `S.elem` s
|
if doubleQuote `S.elem` s
|
||||||
@ -412,7 +416,11 @@ unescapedField !delim = do
|
|||||||
case mb of
|
case mb of
|
||||||
Just b
|
Just b
|
||||||
| b == comma -> A.anyWord8 >> return (bs,TrailCharComma)
|
| b == comma -> A.anyWord8 >> return (bs,TrailCharComma)
|
||||||
| b == newline || b == cr -> A.anyWord8 >> return (bs,TrailCharNewline)
|
| b == newline -> A.anyWord8 >> return (bs,TrailCharNewline)
|
||||||
|
| b == cr -> do
|
||||||
|
_ <- A.anyWord8
|
||||||
|
_ <- A.word8 newline
|
||||||
|
return (bs,TrailCharNewline)
|
||||||
| otherwise -> fail "encountered double quote in unescaped field"
|
| otherwise -> fail "encountered double quote in unescaped field"
|
||||||
Nothing -> return (bs,TrailCharEnd)
|
Nothing -> return (bs,TrailCharEnd)
|
||||||
|
|
||||||
|
|||||||
@ -108,6 +108,16 @@ tests =
|
|||||||
]
|
]
|
||||||
)
|
)
|
||||||
) @?= (["drew","martin, drew"] :> Nothing)
|
) @?= (["drew","martin, drew"] :> Nothing)
|
||||||
|
, testCase "Headed Decoding (escaped characters, character per chunk, CRLF)"
|
||||||
|
$ ( runIdentity . SMP.toList )
|
||||||
|
( S.decodeCsvUtf8 decodingF
|
||||||
|
( mapM_ (SMP.yield . BC8.singleton) $ concat
|
||||||
|
[ "name\r\n"
|
||||||
|
, "drew\r\n"
|
||||||
|
, "\"martin, drew\"\r\n"
|
||||||
|
]
|
||||||
|
)
|
||||||
|
) @?= (["drew","martin, drew"] :> Nothing)
|
||||||
, testProperty "Headed Isomorphism (int,char,bool)"
|
, testProperty "Headed Isomorphism (int,char,bool)"
|
||||||
$ propIsoStream BC8.unpack
|
$ propIsoStream BC8.unpack
|
||||||
(S.decodeCsvUtf8 decodingB)
|
(S.decodeCsvUtf8 decodingB)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user