# Author : Sergei Trofimovich <slyfox@inbox.ru> # Language : haskell # # 'Syntax rules for the C and the C++ programming languages' is taken as base # (haskell compilers support CPP macros) # # haskell keywords and reserved symbols are grabbed from ghc-6.10.1/compiler/parser/Lexer.hs context default # haskell keywords # reserved keywords: # unused symbols keyword whole _\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] brightmagenta keyword whole as yellow keyword whole case yellow keyword whole class yellow keyword whole data yellow keyword whole default yellow keyword whole deriving yellow keyword whole do yellow keyword whole else yellow keyword whole hiding yellow keyword whole if yellow keyword whole import yellow keyword whole in yellow keyword whole infix yellow keyword whole infixl yellow keyword whole infixr yellow keyword whole instance yellow keyword whole let yellow keyword whole module yellow keyword whole newtype yellow keyword whole of yellow keyword whole qualified yellow keyword whole then yellow keyword whole type yellow keyword whole where yellow # extension keywords keyword whole forall yellow keyword whole mdo yellow keyword whole family yellow keyword whole group yellow keyword whole by yellow keyword whole using yellow # ffi keyword whole foreign yellow keyword whole export yellow keyword whole label yellow keyword whole dynamic yellow keyword whole safe yellow keyword whole threadsafe yellow keyword whole unsafe yellow keyword whole stdcall yellow keyword whole ccall yellow keyword whole dotnet yellow keyword whole rec yellow keyword whole proc yellow # other keyword . white # keyword whole .. white # unboxed (started from upcase) keyword whole \{ABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]# white # types/modules keyword whole \{ABCDEFGHIJKLMNOPQRSTUVWXYZ\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\] white # C keywords (TODO: remove unused in haskell source) keyword whole auto yellow keyword whole break yellow keyword whole case yellow keyword whole char yellow keyword whole const yellow keyword whole continue yellow keyword whole do yellow keyword whole double yellow keyword whole else yellow keyword whole enum yellow keyword whole extern yellow keyword whole float yellow keyword whole for yellow keyword whole goto yellow keyword whole if yellow keyword whole int yellow keyword whole long yellow keyword whole register yellow keyword whole return yellow keyword whole short yellow keyword whole signed yellow keyword whole sizeof yellow keyword whole static yellow keyword whole struct yellow keyword whole switch yellow keyword whole typedef yellow keyword whole union yellow keyword whole unsigned yellow keyword whole void yellow keyword whole volatile yellow keyword whole while yellow keyword whole asm yellow keyword whole inline yellow keyword whole wchar_t yellow keyword whole ... yellow keyword whole linestart \{\s\t\}\[\s\t\]#*\n brightmagenta keyword whole \[\s\t\]default yellow keyword whole linestart \[\s\t\]\{ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\}\[0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz\]: cyan #digits keyword whole 0\{xX\}\{0123456789abcdefABCDEF\}\[0123456789abcdefABCDEF\] brightgreen keyword whole \{0123456789\}\[0123456789\] brightgreen keyword whole \[0123456789\]\.\{0123456789\}\[0123456789\] brightgreen keyword whole \{0123456789\}\[0123456789\]\.\[0123456789\] brightgreen keyword whole \{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen keyword whole \{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{0123456789\}\[0123456789\] brightgreen keyword whole \{0123456789\}\[0123456789\]\.\{0123456789\}\[0123456789\]\{eE\}\{\-\+\}\{0123456789\}\[0123456789\] brightgreen #comments keyword {- brown keyword -} brown keyword -- brown keyword \*/ brown keyword /\* brown keyword // brown keyword '\\\{"abtnvfr\}' brightgreen #haskell standalone char escapes keyword '\\NUL' brightgreen keyword '\\SOH' brightgreen keyword '\\STX' brightgreen keyword '\\ETX' brightgreen keyword '\\EOT' brightgreen keyword '\\ENQ' brightgreen keyword '\\ACK' brightgreen keyword '\\BEL' brightgreen keyword '\\BS' brightgreen keyword '\\HT' brightgreen keyword '\\LF' brightgreen keyword '\\VT' brightgreen keyword '\\FF' brightgreen keyword '\\CR' brightgreen keyword '\\SO' brightgreen keyword '\\SI' brightgreen keyword '\\DLE' brightgreen keyword '\\DC1' brightgreen keyword '\\DC2' brightgreen keyword '\\DC3' brightgreen keyword '\\DC4' brightgreen keyword '\\NAK' brightgreen keyword '\\SYN' brightgreen keyword '\\ETB' brightgreen keyword '\\CAN' brightgreen keyword '\\EM' brightgreen keyword '\\SUB' brightgreen keyword '\\ESC' brightgreen keyword '\\FS' brightgreen keyword '\\GS' brightgreen keyword '\\RS' brightgreen keyword '\\US' brightgreen keyword '\\SP' brightgreen keyword '\\DEL' brightgreen keyword '\\\{0123\}\{01234567\}\{01234567\}' brightgreen keyword '\\'' brightgreen keyword '\\\\' brightgreen keyword '\\0' brightgreen keyword '\{\s!"#$%&()\*\+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ\}' brightgreen # some punctuation characters keyword whole $ yellow keyword whole ! white keyword whole && white keyword whole \* yellow keyword whole \+ yellow keyword whole / yellow keyword whole < yellow keyword whole > yellow keyword whole ^ white keyword whole || white keyword whole | white keyword ~ white keyword , brightcyan keyword - yellow keyword : brightcyan keyword ; yellow keyword = yellow keyword { white keyword } white keyword [ brightcyan keyword ] brightcyan keyword ( brightcyan keyword ) brightcyan # comments context exclusive /\* \*/ brown spellcheck context exclusive {-# #-} green spellcheck context exclusive {- -} brown spellcheck context exclusive // \n brown spellcheck context exclusive \-\- \n brown spellcheck # C macros context linestart # \n brightred keyword \\\n yellow keyword /\**\*/ brown keyword //*\n brown keyword "+" red keyword <+> red context " " green spellcheck #haskell escapes in ""s keyword \\NUL brightgreen keyword \\SOH brightgreen keyword \\STX brightgreen keyword \\ETX brightgreen keyword \\EOT brightgreen keyword \\ENQ brightgreen keyword \\ACK brightgreen keyword \\BEL brightgreen keyword \\BS brightgreen keyword \\HT brightgreen keyword \\LF brightgreen keyword \\VT brightgreen keyword \\FF brightgreen keyword \\CR brightgreen keyword \\SO brightgreen keyword \\SI brightgreen keyword \\DLE brightgreen keyword \\DC1 brightgreen keyword \\DC2 brightgreen keyword \\DC3 brightgreen keyword \\DC4 brightgreen keyword \\NAK brightgreen keyword \\SYN brightgreen keyword \\ETB brightgreen keyword \\CAN brightgreen keyword \\EM brightgreen keyword \\SUB brightgreen keyword \\ESC brightgreen keyword \\FS brightgreen keyword \\GS brightgreen keyword \\RS brightgreen keyword \\US brightgreen keyword \\SP brightgreen keyword \\DEL brightgreen keyword \\" brightgreen keyword %% brightgreen keyword %\[#0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[L\]\{eEfgGoxX\} brightgreen keyword %\[0\s-\+,\]\[0123456789\*\]\[.\]\[0123456789\*\]\[hl\]\{diuxX\} brightgreen keyword %\[hl\]n brightgreen keyword %\[-\]\[0123456789\*\]\[.\]\[0123456789\*\]s brightgreen keyword %[*] brightgreen keyword %c brightgreen keyword %p brightgreen keyword \\\{0123\}\{01234567\}\{01234567\} brightgreen keyword \\\\ brightgreen keyword \\' brightgreen keyword \\\{abtnvfr\} brightgreen # infix binop context exclusive ` ` white