module Language.Docker.Lexer where

import Text.Parsec.Language (emptyDef)
import Text.Parsec.String (Parser)
import qualified Text.Parsec.Token as Token

lexer :: Token.TokenParser ()
lexer = Token.makeTokenParser style -- style
  where
    names =
        [ "FROM"
        , "ADD"
        , "RUN"
        , "WORKDIR"
        , "EXPOSE"
        , "VOLUME"
        , "ENTRYPOINT"
        , "MAINTAINER"
        , "ENV"
        , "LABEL"
        , "USER"
        , "SHELL"
        , "STOPSIGNAL"
        , "CMD"
        , "ONBUILD"
        , "ARG"
        , "HEALTHCHECK"
        ]
    style = emptyDef {Token.caseSensitive = False, Token.reservedNames = names}

reserved :: String -> Parser ()
reserved = Token.reserved lexer

reservedOp :: String -> Parser ()
reservedOp = Token.reservedOp lexer

natural :: Parser Integer
natural = Token.natural lexer

commaSep :: Parser a -> Parser [a]
commaSep = Token.commaSep lexer

stringLiteral :: Parser String
stringLiteral = Token.stringLiteral lexer

brackets :: Parser a -> Parser a
brackets = Token.brackets lexer

identifier :: Parser String
identifier = Token.identifier lexer

lexeme :: Parser a -> Parser a
lexeme = Token.lexeme lexer