packages feed

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 ""
 }