{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PackageImports    #-}
{-# OPTIONS_HADDOCK show-extensions #-}

-- |
-- Module      :  Yi.Modes
-- License     :  GPL-2
-- Maintainer  :  yi-devel@googlegroups.com
-- Stability   :  experimental
-- Portability :  portable
--
-- Definitions for the bulk of modes shipped with Yi.

module Yi.Modes (cMode, objectiveCMode, cppMode, cabalMode,  clojureMode,
                 srmcMode, ocamlMode, ottMode, gnuMakeMode,
                 perlMode, pythonMode, javaMode, jsonMode, anyExtension,
                 svnCommitMode, whitespaceMode,
                 gitCommitMode, rubyMode
                ) where

import           Lens.Micro.Platform          ((%~), (&), (.~))
import           Data.List           (isPrefixOf)
import           System.FilePath     (takeDirectory, takeFileName)

import           Yi.Buffer
--import           Yi.Lexer.Alex
import qualified Yi.Lexer.C           as C (lexer)
import qualified Yi.Lexer.Cabal       as Cabal (lexer)
import qualified Yi.Lexer.Clojure     as Clojure (lexer)
import qualified Yi.Lexer.Cplusplus   as Cplusplus (lexer)
import qualified Yi.Lexer.GitCommit   as GitCommit (Token, lexer)
import qualified Yi.Lexer.GNUMake     as GNUMake (lexer)
import qualified Yi.Lexer.Java        as Java (lexer)
import qualified Yi.Lexer.JSON        as JSON (lexer)
import qualified Yi.Lexer.ObjectiveC  as ObjectiveC (lexer)
import qualified Yi.Lexer.OCaml       as OCaml (Token, lexer)
import qualified Yi.Lexer.Ott         as Ott (lexer)
import qualified Yi.Lexer.Perl        as Perl (lexer)
import qualified Yi.Lexer.Python      as Python (lexer)
import qualified Yi.Lexer.Ruby        as Ruby (lexer)
import qualified Yi.Lexer.Srmc        as Srmc (lexer)
import qualified Yi.Lexer.SVNCommit   as SVNCommit (lexer)
import qualified Yi.Lexer.Whitespace  as Whitespace (lexer)
import           Yi.Mode.Common
import           Yi.Style             (StyleName)

cMode :: TokenBasedMode StyleName
cMode :: TokenBasedMode StyleName
cMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
C.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"c"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"c", FilePath
"h" ]

objectiveCMode :: TokenBasedMode StyleName
objectiveCMode :: TokenBasedMode StyleName
objectiveCMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
ObjectiveC.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"objective-c"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"m", FilePath
"mm" ]

cppMode :: TokenBasedMode StyleName
cppMode :: TokenBasedMode StyleName
cppMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Cplusplus.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"cxx", FilePath
"cpp", FilePath
"hxx" ]
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"c++"

cabalMode :: TokenBasedMode StyleName
cabalMode :: TokenBasedMode StyleName
cabalMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Cabal.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"cabal"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"cabal" ]
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Maybe (BufferM HlState) -> Identity (Maybe (BufferM HlState)))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (Maybe (BufferM HlState))
modeToggleCommentSelectionA ((Maybe (BufferM HlState) -> Identity (Maybe (BufferM HlState)))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Maybe (BufferM HlState)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ BufferM HlState -> Maybe (BufferM HlState)
forall a. a -> Maybe a
Just (YiString -> BufferM HlState
toggleCommentB YiString
"--")

clojureMode :: TokenBasedMode StyleName
clojureMode :: TokenBasedMode StyleName
clojureMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Clojure.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"clojure"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"clj", FilePath
"edn" ]

srmcMode :: TokenBasedMode StyleName
srmcMode :: TokenBasedMode StyleName
srmcMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Srmc.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"srmc"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"pepa", FilePath
"srmc" ] -- pepa is a subset of srmc

gitCommitMode :: TokenBasedMode GitCommit.Token
gitCommitMode :: TokenBasedMode StyleName
gitCommitMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
GitCommit.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"git-commit"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ FilePath -> YiString -> Bool
forall p. FilePath -> p -> Bool
isCommit
  where
    isCommit :: FilePath -> p -> Bool
isCommit FilePath
p p
_ = case (FilePath -> FilePath
takeFileName FilePath
p, FilePath -> FilePath
takeFileName (FilePath -> FilePath) -> FilePath -> FilePath
forall a b. (a -> b) -> a -> b
$ FilePath -> FilePath
takeDirectory FilePath
p) of
      (FilePath
"COMMIT_EDITMSG", FilePath
".git") -> Bool
True
      (FilePath, FilePath)
_ -> Bool
False

svnCommitMode :: TokenBasedMode StyleName
svnCommitMode :: TokenBasedMode StyleName
svnCommitMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
SVNCommit.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"svn-commit"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ FilePath -> YiString -> Bool
forall p. FilePath -> p -> Bool
isCommit
  where
    isCommit :: FilePath -> p -> Bool
isCommit FilePath
p p
_ = FilePath
"svn-commit" FilePath -> FilePath -> Bool
forall a. Eq a => [a] -> [a] -> Bool
`isPrefixOf` FilePath
p Bool -> Bool -> Bool
&& [FilePath] -> FilePath -> Bool
extensionMatches [FilePath
"tmp"] FilePath
p

ocamlMode :: TokenBasedMode OCaml.Token
ocamlMode :: TokenBasedMode Token
ocamlMode = StyleLexer AlexState HlState Token AlexInput
-> TokenBasedMode Token
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState Token AlexInput
OCaml.lexer
  TokenBasedMode Token
-> (TokenBasedMode Token -> TokenBasedMode Token)
-> TokenBasedMode Token
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode Token -> Identity (TokenBasedMode Token)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode Token -> Identity (TokenBasedMode Token))
-> Text -> TokenBasedMode Token -> TokenBasedMode Token
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"ocaml"
  TokenBasedMode Token
-> (TokenBasedMode Token -> TokenBasedMode Token)
-> TokenBasedMode Token
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode Token -> Identity (TokenBasedMode Token)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode Token -> Identity (TokenBasedMode Token))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode Token
-> TokenBasedMode Token
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"ml", FilePath
"mli", FilePath
"mly" , FilePath
"mll", FilePath
"ml4", FilePath
"mlp4" ]

perlMode :: TokenBasedMode StyleName
perlMode :: TokenBasedMode StyleName
perlMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Perl.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"perl"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"t", FilePath
"pl", FilePath
"pm" ]

rubyMode :: TokenBasedMode StyleName
rubyMode :: TokenBasedMode StyleName
rubyMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Ruby.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"ruby"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"rb", FilePath
"ru" ]

pythonMode :: TokenBasedMode StyleName
pythonMode :: TokenBasedMode StyleName
pythonMode = TokenBasedMode StyleName
base
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"python"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"py" ]
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Maybe (BufferM HlState) -> Identity (Maybe (BufferM HlState)))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (Maybe (BufferM HlState))
modeToggleCommentSelectionA ((Maybe (BufferM HlState) -> Identity (Maybe (BufferM HlState)))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Maybe (BufferM HlState)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ BufferM HlState -> Maybe (BufferM HlState)
forall a. a -> Maybe a
Just (YiString -> BufferM HlState
toggleCommentB YiString
"#")
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (IndentSettings -> Identity IndentSettings)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) IndentSettings
modeIndentSettingsA ((IndentSettings -> Identity IndentSettings)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (IndentSettings -> IndentSettings)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (\IndentSettings
x -> IndentSettings
x { expandTabs :: Bool
expandTabs = Bool
True, tabSize :: HlState
tabSize = HlState
4 })
  where
    base :: TokenBasedMode StyleName
base = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Python.lexer

javaMode :: TokenBasedMode StyleName
javaMode :: TokenBasedMode StyleName
javaMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Java.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"java"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"java" ]

jsonMode :: TokenBasedMode StyleName
jsonMode :: TokenBasedMode StyleName
jsonMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
JSON.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"json"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"json" ]

gnuMakeMode :: TokenBasedMode StyleName
gnuMakeMode :: TokenBasedMode StyleName
gnuMakeMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
GNUMake.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"Makefile"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ FilePath -> YiString -> Bool
forall p. FilePath -> p -> Bool
isMakefile
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (IndentSettings -> Identity IndentSettings)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) IndentSettings
modeIndentSettingsA ((IndentSettings -> Identity IndentSettings)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (IndentSettings -> IndentSettings)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> (a -> b) -> s -> t
%~ (\IndentSettings
x -> IndentSettings
x { expandTabs :: Bool
expandTabs = Bool
False, shiftWidth :: HlState
shiftWidth = HlState
8 })
  where
    isMakefile :: FilePath -> a -> Bool
    isMakefile :: FilePath -> a -> Bool
isMakefile FilePath
path a
_contents = FilePath -> Bool
matches (FilePath -> Bool) -> FilePath -> Bool
forall a b. (a -> b) -> a -> b
$ FilePath -> FilePath
takeFileName FilePath
path
        where matches :: FilePath -> Bool
matches FilePath
"Makefile"    = Bool
True
              matches FilePath
"makefile"    = Bool
True
              matches FilePath
"GNUmakefile" = Bool
True
              matches FilePath
filename      = [FilePath] -> FilePath -> Bool
extensionMatches [ FilePath
"mk" ] FilePath
filename

ottMode :: TokenBasedMode StyleName
ottMode :: TokenBasedMode StyleName
ottMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Ott.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"ott"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"ott" ]

whitespaceMode :: TokenBasedMode StyleName
whitespaceMode :: TokenBasedMode StyleName
whitespaceMode = StyleLexer AlexState HlState StyleName AlexInput
-> TokenBasedMode StyleName
forall (l :: * -> *) s t i.
Show (l s) =>
StyleLexer l s t i -> TokenBasedMode t
styleMode StyleLexer AlexState HlState StyleName AlexInput
Whitespace.lexer
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& (Text -> Identity Text)
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) Text
modeNameA ((Text -> Identity Text)
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> Text -> TokenBasedMode StyleName -> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ Text
"whitespace"
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((FilePath -> YiString -> Bool)
 -> Identity (FilePath -> YiString -> Bool))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax. Lens' (Mode syntax) (FilePath -> YiString -> Bool)
modeAppliesA (((FilePath -> YiString -> Bool)
  -> Identity (FilePath -> YiString -> Bool))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (FilePath -> YiString -> Bool)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ [FilePath] -> FilePath -> YiString -> Bool
forall a. [FilePath] -> FilePath -> a -> Bool
anyExtension [ FilePath
"ws" ]
  TokenBasedMode StyleName
-> (TokenBasedMode StyleName -> TokenBasedMode StyleName)
-> TokenBasedMode StyleName
forall a b. a -> (a -> b) -> b
& ((Tree (Tok StyleName) -> IndentBehaviour -> BufferM HlState)
 -> Identity
      (Tree (Tok StyleName) -> IndentBehaviour -> BufferM HlState))
-> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName)
forall syntax.
Lens' (Mode syntax) (syntax -> IndentBehaviour -> BufferM HlState)
modeIndentA (((Tree (Tok StyleName) -> IndentBehaviour -> BufferM HlState)
  -> Identity
       (Tree (Tok StyleName) -> IndentBehaviour -> BufferM HlState))
 -> TokenBasedMode StyleName -> Identity (TokenBasedMode StyleName))
-> (Tree (Tok StyleName) -> IndentBehaviour -> BufferM HlState)
-> TokenBasedMode StyleName
-> TokenBasedMode StyleName
forall s t a b. ASetter s t a b -> b -> s -> t
.~ (\Tree (Tok StyleName)
_ IndentBehaviour
_ -> Char -> BufferM HlState
insertB Char
'\t')