packages feed

bytestring-csv-0.1: Text/CSV/ByteString/Lex.x

{
{-# OPTIONS -funbox-strict-fields #-}

--------------------------------------------------------------------
-- |
-- Module    : Text.CSV.Lex
-- Copyright : (c) Galois, Inc. 2008
-- License   : All rights reserved
--
-- Maintainer: Don Stewart <dons@galois.com>
-- Stability : provisional
-- Portability:
--
--------------------------------------------------------------------
--
-- Efficiently lex CSV files.
--

module Text.CSV.ByteString.Lex ( lexCSV, CSVToken(..)) where

import qualified Data.ByteString as S
import Data.ByteString.Internal
import qualified Data.ByteString.Unsafe as S

import Foreign
import Foreign.C.Types
import Foreign.C.String

}

%wrapper "strict-bytestring"

lex :-

\,                    {\_ -> Comma }
\n                    {\_ -> Newline }
\r\n                  {\_ -> Newline }
[^\,\n\r]+            {Item}

{

-- | Efficiently lex CSV data from a bytestring
lexCSV :: S.ByteString -> [CSVToken]
lexCSV = alexScanTokens

data CSVToken = Comma
              | Newline
              | Item {-# UNPACK #-} !S.ByteString
              deriving (Eq, Show)

}