module Text.Inflections.Parse.SnakeCase ( parseSnakeCase )
where
import Control.Applicative ((<$>))
import Text.Parsec
import Text.Inflections.Parse.Types (Word(..))
import Text.Inflections.Parse.Acronym (acronym)
import Prelude (Char, String, Either, return)
parseSnakeCase :: [String] -> String -> Either ParseError [Word]
parseSnakeCase acronyms = parse (parser acronyms) "(unknown)"
parser :: Stream s m Char => [String] -> ParsecT s u m [Word]
parser acronyms = do
ws <- (acronym acronyms <|> word) `sepBy` char '_'
eof
return ws
word :: Stream s m Char => ParsecT s u m Word
word = Word <$> (many1 lower <|> many1 digit)