module Text.Highlighter.Lexers.Gettext (lexer) where

import Text.Regex.PCRE.Light
import Text.Highlighter.Types

lexer :: Lexer
lexer = Lexer
    { lName = "Gettext Catalog"
    , lAliases = ["pot", "po"]
    , lExtensions = [".pot", ".po"]
    , lMimetypes = ["application/x-gettext", "text/x-gettext", "text/gettext"]
    , lStart = root'
    , lFlags = [multiline]
    }

root' :: TokenMatcher
root' =
    [ tok "^#,\\s.*?$" (Arbitrary "Keyword" :. Arbitrary "Type")
    , tok "^#:\\s.*?$" (Arbitrary "Keyword" :. Arbitrary "Declaration")
    , tok "^(#|#\\.\\s|#\\|\\s|#\126\\s|#\\s).*$" (Arbitrary "Comment" :. Arbitrary "Single")
    , tok "^(\")([A-Za-z-]+:)(.*\")$" (ByGroups [(Arbitrary "Literal" :. Arbitrary "String"), (Arbitrary "Name" :. Arbitrary "Property"), (Arbitrary "Literal" :. Arbitrary "String")])
    , tok "^\".*\"$" (Arbitrary "Literal" :. Arbitrary "String")
    , tok "^(msgid|msgid_plural|msgstr)(\\s+)(\".*\")$" (ByGroups [(Arbitrary "Name" :. Arbitrary "Variable"), (Arbitrary "Text"), (Arbitrary "Literal" :. Arbitrary "String")])
    , tok "^(msgstr\\[)(\\d)(\\])(\\s+)(\".*\")$" (ByGroups [(Arbitrary "Name" :. Arbitrary "Variable"), (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Integer"), (Arbitrary "Name" :. Arbitrary "Variable"), (Arbitrary "Text"), (Arbitrary "Literal" :. Arbitrary "String")])
    ]