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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\70\111\114\116\114\97\110"
    , lAliases = ["\102\111\114\116\114\97\110"]
    , lExtensions = ["\46\102", "\46\102\57\48"]
    , lMimetypes = ["\116\101\120\116\47\120\45\102\111\114\116\114\97\110"]
    , lStart = root'
    , lFlags = [caseless]
    }

core' :: TokenMatcher
core' =
    [ tok "\92\98\40\65\67\67\69\80\84\124\65\76\76\79\67\65\84\65\66\76\69\124\65\76\76\79\67\65\84\69\124\65\82\82\65\89\124\65\83\83\73\71\78\124\66\65\67\75\83\80\65\67\69\124\66\76\79\67\75\32\68\65\84\65\124\66\89\84\69\124\67\65\76\76\124\67\65\83\69\124\67\76\79\83\69\124\67\79\77\77\79\78\124\67\79\78\84\65\73\78\83\124\67\79\78\84\73\78\85\69\124\67\89\67\76\69\124\68\65\84\65\124\68\69\65\76\76\79\67\65\84\69\124\68\69\67\79\68\69\124\68\73\77\69\78\83\73\79\78\124\68\79\124\69\78\67\79\68\69\124\69\78\68\32\70\73\76\69\124\69\78\68\73\70\124\69\78\68\124\69\78\84\82\89\124\69\81\85\73\86\65\76\69\78\67\69\124\69\88\73\84\124\69\88\84\69\82\78\65\76\124\69\88\84\82\73\78\83\73\67\124\70\79\82\65\76\76\124\70\79\82\77\65\84\124\70\85\78\67\84\73\79\78\124\71\79\84\79\124\73\70\124\73\77\80\76\73\67\73\84\124\73\78\67\76\85\68\69\124\73\78\81\85\73\82\69\124\73\78\84\69\78\84\124\73\78\84\69\82\70\65\67\69\124\73\78\84\82\73\78\83\73\67\124\77\79\68\85\76\69\124\78\65\77\69\76\73\83\84\124\78\85\76\76\73\70\89\124\78\79\78\69\124\79\80\69\78\124\79\80\84\73\79\78\65\76\124\79\80\84\73\79\78\83\124\80\65\82\65\77\69\84\69\82\124\80\65\85\83\69\124\80\79\73\78\84\69\82\124\80\82\73\78\84\124\80\82\73\86\65\84\69\124\80\82\79\71\82\65\77\124\80\85\66\76\73\67\124\80\85\82\69\124\82\69\65\68\124\82\69\67\85\82\83\73\86\69\124\82\69\84\85\82\78\124\82\69\87\73\78\68\124\83\65\86\69\124\83\69\76\69\67\84\124\83\69\81\85\69\78\67\69\124\83\84\79\80\124\83\85\66\82\79\85\84\73\78\69\124\84\65\82\71\69\84\124\84\89\80\69\124\85\83\69\124\86\79\76\65\84\73\76\69\124\87\72\69\82\69\124\87\82\73\84\69\124\87\72\73\76\69\124\84\72\69\78\124\69\76\83\69\124\69\78\68\73\70\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\92\98\40\67\72\65\82\65\67\84\69\82\124\67\79\77\80\76\69\88\124\68\79\85\66\76\69\32\80\82\69\67\73\83\73\79\78\124\68\79\85\66\76\69\32\67\79\77\80\76\69\88\124\73\78\84\69\71\69\82\124\76\79\71\73\67\65\76\124\82\69\65\76\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
    , tok "\40\92\42\92\42\124\92\42\124\92\43\124\45\124\92\47\124\60\124\62\124\60\61\124\62\61\124\61\61\124\92\47\61\124\61\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\58\58\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
    , tok "\91\40\41\44\58\38\37\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\92\98\40\65\98\111\114\116\124\65\98\115\124\65\99\99\101\115\115\124\65\67\104\97\114\124\65\67\111\115\124\65\100\106\117\115\116\76\124\65\100\106\117\115\116\82\124\65\73\109\97\103\124\65\73\110\116\124\65\108\97\114\109\124\65\108\108\124\65\108\108\111\99\97\116\101\100\124\65\76\111\103\124\65\77\97\120\124\65\77\105\110\124\65\77\111\100\124\65\110\100\124\65\78\73\110\116\124\65\110\121\124\65\83\105\110\124\65\115\115\111\99\105\97\116\101\100\124\65\84\97\110\124\66\101\115\74\124\66\101\115\74\78\124\66\101\115\89\124\66\101\115\89\78\124\66\105\116\95\83\105\122\101\124\66\84\101\115\116\124\67\65\98\115\124\67\67\111\115\124\67\101\105\108\105\110\103\124\67\69\120\112\124\67\104\97\114\124\67\104\68\105\114\124\67\104\77\111\100\124\67\76\111\103\124\67\109\112\108\120\124\67\111\109\112\108\101\120\124\67\111\110\106\103\124\67\111\115\124\67\111\115\72\124\67\111\117\110\116\124\67\80\85\95\84\105\109\101\124\67\83\104\105\102\116\124\67\83\105\110\124\67\83\113\82\116\124\67\84\105\109\101\124\68\65\98\115\124\68\65\67\111\115\124\68\65\83\105\110\124\68\65\84\97\110\124\68\97\116\101\95\97\110\100\95\84\105\109\101\124\68\98\101\115\74\124\68\98\101\115\74\124\68\98\101\115\74\78\124\68\98\101\115\89\124\68\98\101\115\89\124\68\98\101\115\89\78\124\68\98\108\101\124\68\67\111\115\124\68\67\111\115\72\124\68\68\105\77\124\68\69\114\70\124\68\69\114\70\67\124\68\69\120\112\124\68\105\103\105\116\115\124\68\105\77\124\68\73\110\116\124\68\76\111\103\124\68\76\111\103\124\68\77\97\120\124\68\77\105\110\124\68\77\111\100\124\68\78\73\110\116\124\68\111\116\95\80\114\111\100\117\99\116\124\68\80\114\111\100\124\68\83\105\103\110\124\68\83\105\110\72\124\68\83\105\110\124\68\83\113\82\116\124\68\84\97\110\72\124\68\84\97\110\124\68\84\105\109\101\124\69\79\83\104\105\102\116\124\69\112\115\105\108\111\110\124\69\114\70\124\69\114\70\67\124\69\84\105\109\101\124\69\120\105\116\124\69\120\112\124\69\120\112\111\110\101\110\116\124\70\68\97\116\101\124\70\71\101\116\124\70\71\101\116\67\124\70\108\111\97\116\124\70\108\111\111\114\124\70\108\117\115\104\124\70\78\117\109\124\70\80\117\116\67\124\70\80\117\116\124\70\114\97\99\116\105\111\110\124\70\83\101\101\107\124\70\83\116\97\116\124\70\84\101\108\108\124\71\69\114\114\111\114\124\71\101\116\65\114\103\124\71\101\116\67\87\68\124\71\101\116\69\110\118\124\71\101\116\71\73\100\124\71\101\116\76\111\103\124\71\101\116\80\73\100\124\71\101\116\85\73\100\124\71\77\84\105\109\101\124\72\111\115\116\78\109\124\72\117\103\101\124\73\65\98\115\124\73\65\67\104\97\114\124\73\65\110\100\124\73\65\114\103\67\124\73\66\67\108\114\124\73\66\105\116\115\124\73\66\83\101\116\124\73\67\104\97\114\124\73\68\97\116\101\124\73\68\105\77\124\73\68\73\110\116\124\73\68\78\73\110\116\124\73\69\79\114\124\73\69\114\114\78\111\124\73\70\105\120\124\73\109\97\103\124\73\109\97\103\80\97\114\116\124\73\110\100\101\120\124\73\110\116\124\73\79\114\124\73\82\97\110\100\124\73\115\97\84\116\121\124\73\83\104\102\116\124\73\83\104\102\116\67\124\73\83\105\103\110\124\73\84\105\109\101\124\75\105\108\108\124\75\105\110\100\124\76\66\111\117\110\100\124\76\101\110\124\76\101\110\95\84\114\105\109\124\76\71\101\124\76\71\116\124\76\105\110\107\124\76\76\101\124\76\76\116\124\76\110\66\108\110\107\124\76\111\99\124\76\111\103\124\76\111\103\124\76\111\103\105\99\97\108\124\76\111\110\103\124\76\83\104\105\102\116\124\76\83\116\97\116\124\76\84\105\109\101\124\77\97\116\77\117\108\124\77\97\120\124\77\97\120\69\120\112\111\110\101\110\116\124\77\97\120\76\111\99\124\77\97\120\86\97\108\124\77\67\108\111\99\107\124\77\101\114\103\101\124\77\105\110\124\77\105\110\69\120\112\111\110\101\110\116\124\77\105\110\76\111\99\124\77\105\110\86\97\108\124\77\111\100\124\77\111\100\117\108\111\124\77\118\66\105\116\115\124\78\101\97\114\101\115\116\124\78\73\110\116\124\78\111\116\124\79\114\124\80\97\99\107\124\80\69\114\114\111\114\124\80\114\101\99\105\115\105\111\110\124\80\114\101\115\101\110\116\124\80\114\111\100\117\99\116\124\82\97\100\105\120\124\82\97\110\100\124\82\97\110\100\111\109\95\78\117\109\98\101\114\124\82\97\110\100\111\109\95\83\101\101\100\124\82\97\110\103\101\124\82\101\97\108\124\82\101\97\108\80\97\114\116\124\82\101\110\97\109\101\124\82\101\112\101\97\116\124\82\101\115\104\97\112\101\124\82\82\83\112\97\99\105\110\103\124\82\83\104\105\102\116\124\83\99\97\108\101\124\83\99\97\110\124\83\101\99\111\110\100\124\83\101\108\101\99\116\101\100\95\73\110\116\95\75\105\110\100\124\83\101\108\101\99\116\101\100\95\82\101\97\108\95\75\105\110\100\124\83\101\116\95\69\120\112\111\110\101\110\116\124\83\104\97\112\101\124\83\104\111\114\116\124\83\105\103\110\124\83\105\103\110\97\108\124\83\105\110\72\124\83\105\110\124\83\108\101\101\112\124\83\110\103\108\124\83\112\97\99\105\110\103\124\83\112\114\101\97\100\124\83\113\82\116\124\83\82\97\110\100\124\83\116\97\116\124\83\117\109\124\83\121\109\76\110\107\124\83\121\115\116\101\109\124\83\121\115\116\101\109\95\67\108\111\99\107\124\84\97\110\124\84\97\110\72\124\84\105\109\101\124\84\105\110\121\124\84\114\97\110\115\102\101\114\124\84\114\97\110\115\112\111\115\101\124\84\114\105\109\124\84\116\121\78\97\109\124\85\66\111\117\110\100\124\85\77\97\115\107\124\85\110\108\105\110\107\124\85\110\112\97\99\107\124\86\101\114\105\102\121\124\88\79\114\124\90\65\98\115\124\90\67\111\115\124\90\69\120\112\124\90\76\111\103\124\90\83\105\110\124\90\83\113\82\116\41\92\115\42\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , tok "\92\46\40\116\114\117\101\124\102\97\108\115\101\41\92\46" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , tok "\92\46\40\101\113\124\110\101\124\108\116\124\108\101\124\103\116\124\103\101\124\110\111\116\124\97\110\100\124\111\114\124\101\113\118\124\110\101\113\118\41\92\46" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
    ]

root' :: TokenMatcher
root' =
    [ tok "\33\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
    , anyOf strings'
    , anyOf core'
    , tok "\91\97\45\122\93\91\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , anyOf nums'
    , tok "\91\92\115\93\43" (Arbitrary "\84\101\120\116")
    ]

strings' :: TokenMatcher
strings' =
    [ tok "\40\63\115\41\34\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\34\92\92\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
    , tok "\40\63\115\41\39\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\39\92\92\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
    ]

nums' :: TokenMatcher
nums' =
    [ tok "\92\100\43\40\63\33\91\46\69\101\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
    , tok "\91\43\45\93\63\92\100\42\92\46\92\100\43\40\91\101\69\93\91\45\43\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\91\43\45\93\63\92\100\43\92\46\92\100\42\40\91\101\69\93\91\45\43\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    ]