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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\77\97\116\108\97\98"
    , lAliases = ["\109\97\116\108\97\98", "\111\99\116\97\118\101"]
    , lExtensions = ["\46\109"]
    , lMimetypes = ["\116\101\120\116\47\109\97\116\108\97\98"]
    , lStart = root'
    , lFlags = [multiline]
    }

deffunc' :: TokenMatcher
deffunc' =
    [ tokNext "\40\92\115\42\41\40\63\58\40\46\43\41\40\92\115\42\41\40\61\41\40\92\115\42\41\41\63\40\46\43\41\40\92\40\41\40\46\42\41\40\92\41\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101")]) Pop
    ]

root' :: TokenMatcher
root' =
    [ tok "\94\33\46\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
    , tok "\37\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
    , tokNext "\94\92\115\42\102\117\110\99\116\105\111\110" (Arbitrary "\75\101\121\119\111\114\100") (GoTo deffunc')
    , tok "\40\98\114\101\97\107\124\99\97\115\101\124\99\97\116\99\104\124\99\108\97\115\115\100\101\102\124\99\111\110\116\105\110\117\101\124\101\108\115\101\124\101\108\115\101\105\102\124\101\110\100\124\102\111\114\124\102\117\110\99\116\105\111\110\124\103\108\111\98\97\108\124\105\102\124\111\116\104\101\114\119\105\115\101\124\112\97\114\102\111\114\124\112\101\114\115\105\115\116\101\110\116\124\114\101\116\117\114\110\124\115\119\105\116\99\104\124\116\114\121\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\115\105\110\124\115\105\110\100\124\115\105\110\104\124\97\115\105\110\124\97\115\105\110\100\124\97\115\105\110\104\124\99\111\115\124\99\111\115\100\124\99\111\115\104\124\97\99\111\115\124\97\99\111\115\100\124\97\99\111\115\104\124\116\97\110\124\116\97\110\100\124\116\97\110\104\124\97\116\97\110\124\97\116\97\110\100\124\97\116\97\110\50\124\97\116\97\110\104\124\115\101\99\124\115\101\99\100\124\115\101\99\104\124\97\115\101\99\124\97\115\101\99\100\124\97\115\101\99\104\124\99\115\99\124\99\115\99\100\124\99\115\99\104\124\97\99\115\99\124\97\99\115\99\100\124\97\99\115\99\104\124\99\111\116\124\99\111\116\100\124\99\111\116\104\124\97\99\111\116\124\97\99\111\116\100\124\97\99\111\116\104\124\104\121\112\111\116\124\101\120\112\124\101\120\112\109\49\124\108\111\103\124\108\111\103\49\112\124\108\111\103\49\48\124\108\111\103\50\124\112\111\119\50\124\114\101\97\108\112\111\119\124\114\101\97\108\108\111\103\124\114\101\97\108\115\113\114\116\124\115\113\114\116\124\110\116\104\114\111\111\116\124\110\101\120\116\112\111\119\50\124\97\98\115\124\97\110\103\108\101\124\99\111\109\112\108\101\120\124\99\111\110\106\124\105\109\97\103\124\114\101\97\108\124\117\110\119\114\97\112\124\105\115\114\101\97\108\124\99\112\108\120\112\97\105\114\124\102\105\120\124\102\108\111\111\114\124\99\101\105\108\124\114\111\117\110\100\124\109\111\100\124\114\101\109\124\115\105\103\110\124\97\105\114\121\124\98\101\115\115\101\108\106\124\98\101\115\115\101\108\121\124\98\101\115\115\101\108\104\124\98\101\115\115\101\108\105\124\98\101\115\115\101\108\107\124\98\101\116\97\124\98\101\116\97\105\110\99\124\98\101\116\97\108\110\124\101\108\108\105\112\106\124\101\108\108\105\112\107\101\124\101\114\102\124\101\114\102\99\124\101\114\102\99\120\124\101\114\102\105\110\118\124\101\120\112\105\110\116\124\103\97\109\109\97\124\103\97\109\109\97\105\110\99\124\103\97\109\109\97\108\110\124\112\115\105\124\108\101\103\101\110\100\114\101\124\99\114\111\115\115\124\100\111\116\124\102\97\99\116\111\114\124\105\115\112\114\105\109\101\124\112\114\105\109\101\115\124\103\99\100\124\108\99\109\124\114\97\116\124\114\97\116\115\124\112\101\114\109\115\124\110\99\104\111\111\115\101\107\124\102\97\99\116\111\114\105\97\108\124\99\97\114\116\50\115\112\104\124\99\97\114\116\50\112\111\108\124\112\111\108\50\99\97\114\116\124\115\112\104\50\99\97\114\116\124\104\115\118\50\114\103\98\124\114\103\98\50\104\115\118\124\122\101\114\111\115\124\111\110\101\115\124\101\121\101\124\114\101\112\109\97\116\124\114\97\110\100\124\114\97\110\100\110\124\108\105\110\115\112\97\99\101\124\108\111\103\115\112\97\99\101\124\102\114\101\113\115\112\97\99\101\124\109\101\115\104\103\114\105\100\124\97\99\99\117\109\97\114\114\97\121\124\115\105\122\101\124\108\101\110\103\116\104\124\110\100\105\109\115\124\110\117\109\101\108\124\100\105\115\112\124\105\115\101\109\112\116\121\124\105\115\101\113\117\97\108\124\105\115\101\113\117\97\108\119\105\116\104\101\113\117\97\108\110\97\110\115\124\99\97\116\124\114\101\115\104\97\112\101\124\100\105\97\103\124\98\108\107\100\105\97\103\124\116\114\105\108\124\116\114\105\117\124\102\108\105\112\108\114\124\102\108\105\112\117\100\124\102\108\105\112\100\105\109\124\114\111\116\57\48\124\102\105\110\100\124\101\110\100\124\115\117\98\50\105\110\100\124\105\110\100\50\115\117\98\124\98\115\120\102\117\110\124\110\100\103\114\105\100\124\112\101\114\109\117\116\101\124\105\112\101\114\109\117\116\101\124\115\104\105\102\116\100\105\109\124\99\105\114\99\115\104\105\102\116\124\115\113\117\101\101\122\101\124\105\115\115\99\97\108\97\114\124\105\115\118\101\99\116\111\114\124\97\110\115\124\101\112\115\124\114\101\97\108\109\97\120\124\114\101\97\108\109\105\110\124\112\105\124\105\124\105\110\102\124\110\97\110\124\105\115\110\97\110\124\105\115\105\110\102\124\105\115\102\105\110\105\116\101\124\106\124\119\104\121\124\99\111\109\112\97\110\124\103\97\108\108\101\114\121\124\104\97\100\97\109\97\114\100\124\104\97\110\107\101\108\124\104\105\108\98\124\105\110\118\104\105\108\98\124\109\97\103\105\99\124\112\97\115\99\97\108\124\114\111\115\115\101\114\124\116\111\101\112\108\105\116\122\124\118\97\110\100\101\114\124\119\105\108\107\105\110\115\111\110\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , tok "\45\124\61\61\124\126\61\124\60\124\62\124\60\61\124\62\61\124\38\38\124\38\124\126\124\92\124\92\124\63" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\46\92\42\124\92\42\124\92\43\124\92\46\92\94\124\92\46\92\92\124\92\46\92\47\124\92\47\124\92\92" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\91\124\92\93\124\92\40\124\92\41\124\92\123\124\92\125\124\58\124\64\124\92\46\124\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\61\124\58\124\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\40\63\60\61\91\92\119\92\41\92\93\93\41\92\39" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tokNext "\40\63\60\33\91\92\119\92\41\92\93\93\41\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
    , tok "\46" (Arbitrary "\84\101\120\116")
    ]

string' :: TokenMatcher
string' =
    [ tokNext "\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
    ]