{-# OPTIONS_GHC -Wall #-}
{-# LANGUAGE OverloadedStrings #-}
module Skylighting.Extensions.Haskell (expandKeywordSet, keywords) where
import qualified Data.Set as Set
import Skylighting.Core
import Skylighting.Modding
import Data.Text (Text)
expandKeywordSet :: Syntax -> Syntax
expandKeywordSet =
modifySyntaxContexts $
modifyContext "code" $
replaceKeywordRule keywordRule
keywordRule :: Rule
keywordRule =
Rule
{ rMatcher = keywordMatcher
, rAttribute = KeywordTok
, rIncludeAttribute = False
, rDynamic = False
, rCaseSensitive = True
, rChildren = []
, rLookahead = False
, rFirstNonspace = False
, rColumn = Nothing
, rContextSwitch = []
}
keywordMatcher :: Matcher
keywordMatcher = Keyword keywordAttr (makeWordSet True keywords)
keywordAttr :: KeywordAttr
keywordAttr =
KeywordAttr
{ keywordCaseSensitive = True
, keywordDelims = Set.fromList "\t\n !%&()*+,-./:;<=>?[\\]^{|}~"
}
keywords :: [Text]
keywords =
[ "case"
, "class"
, "data"
, "deriving"
, "do"
, "else"
, "forall"
, "if"
, "in"
, "infixl"
, "infixr"
, "instance"
, "let"
, "module"
, "newtype"
, "of"
, "primitive"
, "then"
, "type"
, "via"
, "where"
]