module Language.Dockerfile.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"
      , "STOPSIGNAL"
      , "CMD"
      , "ONBUILD"
      , "ARG"
      ]
    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 = Token.commaSep lexer
stringLiteral = Token.stringLiteral lexer
brackets = Token.brackets lexer
identifier = Token.identifier lexer
lexeme = Token.lexeme lexer