1
module Text.Highlighting.Kate.Syntax ( highlightAs, languages, languagesByExtension,
2
languagesByFilename ) where
3
import Data.Char (toLower)
4
import Text.Highlighting.Kate.Definitions
5
import Text.Highlighting.Kate.Common (matchGlobs)
8
-- | List of supported languages.
10
languages = @languages@
12
-- | List of language extensions.
13
languageExtensions :: [(String, String)]
14
languageExtensions = @languageExtensions@
16
-- | Returns a list of languages appropriate for the given file extension.
17
languagesByExtension :: String -> [String]
18
languagesByExtension ('.':ext) = languagesByFilename ("*." ++ ext)
19
languagesByExtension ext = languagesByFilename ("*." ++ ext)
21
-- | Returns a list of languages appropriate for the given filename.
22
languagesByFilename :: FilePath -> [String]
23
languagesByFilename fn = [lang | (lang, globs) <- languageExtensions, matchGlobs fn globs]
25
-- | Highlight source code using a specified syntax definition.
26
highlightAs :: String -- ^ Language syntax
27
-> String -- ^ Source code to highlight
28
-> Either String [SourceLine] -- ^ Either error message or result
30
let lang' = map toLower lang
31
lang'' = if lang' `elem` map (map toLower) languages
33
else case languagesByExtension lang' of
34
[l] -> map toLower l -- go by extension if unambiguous
38
_ -> (\_ -> Left ("Unknown language: " ++ lang))