hob-0.0.1.0: src/lib/Hob/Context/CommandMatcher.hs
module Hob.Context.CommandMatcher (
createMatcherForPrefix,
createMatcherForCommand,
createMatcherForKeyBinding,
) where
import Hob.Context.Types
createMatcherForPrefix :: String -> (String -> CommandHandler) -> CommandMatcher
createMatcherForPrefix prefix handler = CommandMatcher (const Nothing) (matchHandler prefix)
where
matchHandler :: String -> String -> Maybe CommandHandler
matchHandler (p:xs) (t:xt) = if p == t then matchHandler xs xt else Nothing
matchHandler "" params = Just $ handler params
matchHandler _ "" = Nothing
createMatcherForCommand :: String -> CommandHandler -> CommandMatcher
createMatcherForCommand command handler = CommandMatcher (const Nothing) (matchHandler command)
where
matchHandler :: String -> String -> Maybe CommandHandler
matchHandler (p:xs) (t:xt) = if p == t then matchHandler xs xt else Nothing
matchHandler "" "" = Just handler
matchHandler _ "" = Nothing
matchHandler "" _ = Nothing
createMatcherForKeyBinding :: KeyboardBinding -> CommandHandler -> CommandMatcher
createMatcherForKeyBinding keyBinding handler = CommandMatcher (matchHandler keyBinding) (const Nothing)
where
matchHandler :: KeyboardBinding -> KeyboardBinding -> Maybe CommandHandler
matchHandler boundKey matchedKey = if boundKey == matchedKey then Just handler else Nothing