miv-0.3.0: src/Command.hs
{-# LANGUAGE OverloadedStrings #-}
module Command where
import Data.Monoid ((<>))
import qualified Data.Text as T
import Data.Text (Text, unwords)
import Prelude hiding (show, unwords)
import ShowText
data CmdBang = CmdBang
| CmdNoBang
deriving Eq
instance ShowText CmdBang where
show CmdBang = "-bang"
show CmdNoBang = ""
data CmdBar = CmdBar
| CmdNoBar
deriving Eq
instance ShowText CmdBar where
show CmdBar = "-bar"
show CmdNoBar = ""
data CmdRegister = CmdRegister
| CmdNoRegister
deriving Eq
instance ShowText CmdRegister where
show CmdRegister = "-register"
show CmdNoRegister = ""
data CmdBuffer = CmdBuffer
| CmdNoBuffer
deriving Eq
instance ShowText CmdBuffer where
show CmdBuffer = "-buffer"
show CmdNoBuffer = ""
data CmdRange = CmdRange
| CmdRangeWhole
| CmdRangeN Int
| CmdRangeCount Int
| CmdNoRange
deriving Eq
instance ShowText CmdRange where
show CmdRange = "-range"
show CmdRangeWhole = "-range=%"
show (CmdRangeN n) = "-range=" <> show n
show (CmdRangeCount n) = "-count=" <> show n
show CmdNoRange = ""
data CmdArg = CmdNonNegArg
| CmdZeroOneArg
| CmdPositiveArg
| CmdOneArg
| CmdNoArg
deriving Eq
instance ShowText CmdArg where
show CmdNonNegArg = "-nargs=*"
show CmdZeroOneArg = "-nargs=?"
show CmdPositiveArg = "-nargs=+"
show CmdOneArg = "-nargs=1"
show CmdNoArg = "-nargs=0"
data CmdComplete = CmdComplete Text
deriving Eq
instance ShowText CmdComplete where
show (CmdComplete "") = ""
show (CmdComplete complete) = "-complete=" <> complete
data Command =
Command { cmdName :: Text
, cmdRepText :: Text
, cmdBang :: CmdBang
, cmdBar :: CmdBar
, cmdRegister :: CmdRegister
, cmdBuffer :: CmdBuffer
, cmdRange :: CmdRange
, cmdArg :: CmdArg
, cmdComplete :: CmdComplete
} deriving Eq
instance ShowText Command where
show cmd = unwords (filter (not . T.null)
[ "command!"
, show (cmdBang cmd)
, show (cmdBar cmd)
, show (cmdRegister cmd)
, show (cmdBuffer cmd)
, show (cmdRange cmd)
, show (cmdArg cmd)
, show (cmdComplete cmd)
, cmdName cmd
, cmdRepText cmd
])
defaultCommand :: Command
defaultCommand
= Command { cmdName = ""
, cmdRepText = ""
, cmdBang = CmdBang
, cmdBar = CmdNoBar
, cmdRegister = CmdNoRegister
, cmdBuffer = CmdNoBuffer
, cmdRange = CmdRange
, cmdArg = CmdNonNegArg
, cmdComplete = CmdComplete ""
}