~ubuntu-branches/ubuntu/utopic/highlighting-kate/utopic

« back to all changes in this revision

Viewing changes to Text/Highlighting/Kate/Syntax.hs.in

  • Committer: Bazaar Package Importer
  • Author(s): Joachim Breitner
  • Date: 2010-08-02 16:42:27 UTC
  • mfrom: (1.1.4 upstream)
  • Revision ID: james.westby@ubuntu.com-20100802164227-hlexp5w850rpfizp
Tags: 0.2.7.1-1
* Priority: extra
* New upstream version (Closes: #591168)

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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)
 
6
@imports@
 
7
 
 
8
-- | List of supported languages.
 
9
languages :: [String]
 
10
languages = @languages@
 
11
 
 
12
-- | List of language extensions.
 
13
languageExtensions :: [(String, String)]
 
14
languageExtensions = @languageExtensions@
 
15
 
 
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)
 
20
 
 
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]
 
24
 
 
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
 
29
highlightAs lang =
 
30
  let lang'  = map toLower lang
 
31
      lang'' = if lang' `elem` map (map toLower) languages
 
32
                  then lang'
 
33
                  else case languagesByExtension lang' of
 
34
                            [l]  -> map toLower l  -- go by extension if unambiguous
 
35
                            _    -> lang'
 
36
  in  case lang'' of
 
37
        @cases@
 
38
        _ -> (\_ -> Left ("Unknown language: " ++ lang))