{-# LANGUAGE OverloadedStrings #-} module Skylighting.Syntax.Modula3 (syntax) where import Skylighting.Types import Data.Map import Skylighting.Regex import qualified Data.Set syntax :: Syntax syntax = Syntax { sName = "Modula-3" , sFilename = "modula-3.xml" , sShortname = "Modula3" , sContexts = fromList [ ( "Comment2" , Context { cName = "Comment2" , cSyntax = "Modula-3" , cRules = [ Rule { rMatcher = Detect2Chars '(' '*' , rAttribute = CommentTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Push ( "Modula-3" , "Comment2" ) ] } , Rule { rMatcher = Detect2Chars '*' ')' , rAttribute = CommentTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Pop ] } ] , cAttribute = CommentTok , cLineEmptyContext = [] , cLineEndContext = [] , cLineBeginContext = [] , cFallthrough = False , cFallthroughContext = [] , cDynamic = False } ) , ( "Normal" , Context { cName = "Normal" , cSyntax = "Modula-3" , cRules = [ Rule { rMatcher = RegExpr RE { reString = "PROCEDURE[\\s].*\\(" , reCompiled = Just (compileRegex True "PROCEDURE[\\s].*\\(") , reCaseSensitive = True } , rAttribute = KeywordTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = RegExpr RE { reString = "END\\s*[A-Za-z][A-Za-z0-9_]*\\;" , reCompiled = Just (compileRegex True "END\\s*[A-Za-z][A-Za-z0-9_]*\\;") , reCaseSensitive = True } , rAttribute = KeywordTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = RegExpr RE { reString = "\\b(RECORD|OBJECT|TRY|WHILE|FOR|REPEAT|LOOP|IF|CASE|WITH)\\b" , reCompiled = Just (compileRegex True "\\b(RECORD|OBJECT|TRY|WHILE|FOR|REPEAT|LOOP|IF|CASE|WITH)\\b") , reCaseSensitive = True } , rAttribute = KeywordTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = RegExpr RE { reString = "\\b(END;|END)\\b" , reCompiled = Just (compileRegex True "\\b(END;|END)\\b") , reCaseSensitive = True } , rAttribute = KeywordTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Keyword KeywordAttr { keywordCaseSensitive = True , keywordDelims = Data.Set.fromList "\t\n !%&()*+,-/:;<=>?[\\]^{|}~" } (makeWordSet True [ "ANY" , "ARRAY" , "AS" , "BEGIN" , "BITS" , "BRANDED" , "BY" , "CASE" , "CONST" , "DO" , "ELSE" , "ELSIF" , "END" , "EVAL" , "EXCEPT" , "EXCEPTION" , "EXIT" , "EXPORTS" , "FINALLY" , "FOR" , "FROM" , "GENERIC" , "IF" , "IMPORT" , "INTERFACE" , "LOCK" , "LOOP" , "METHODS" , "MODULE" , "OBJECT" , "OF" , "OVERRIDES" , "PROCEDURE" , "RAISE" , "RAISES" , "READONLY" , "RECORD" , "REF" , "REPEAT" , "RETURN" , "REVEAL" , "ROOT" , "SET" , "THEN" , "TO" , "TRY" , "TYPE" , "TYPECASE" , "UNSAFE" , "UNTIL" , "UNTRACED" , "VALUE" , "VAR" , "WHILE" , "WITH" ]) , rAttribute = KeywordTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Keyword KeywordAttr { keywordCaseSensitive = True , keywordDelims = Data.Set.fromList "\t\n !%&()*+,-/:;<=>?[\\]^{|}~" } (makeWordSet True [ "#" , "&" , "(" , ")" , "*" , "+" , "," , "-" , "." , ".." , "/" , ":" , ":=" , ";" , "<" , "<:" , "<=" , "=" , "=>" , ">" , ">=" , "AND" , "DIV" , "IN" , "MOD" , "NOT" , "OR" , "[" , "]" , "^" , "{" , "|" , "}" ]) , rAttribute = KeywordTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Keyword KeywordAttr { keywordCaseSensitive = True , keywordDelims = Data.Set.fromList "\t\n !%&()*+,-/:;<=>?[\\]^{|}~" } (makeWordSet True [ "ADDRESS" , "BOOLEAN" , "CARDINAL" , "CHAR" , "EXTENDED" , "INTEGER" , "LONGREAL" , "MUTEX" , "NULL" , "REAL" , "REFANY" , "T" , "TEXT" ]) , rAttribute = DataTypeTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Keyword KeywordAttr { keywordCaseSensitive = True , keywordDelims = Data.Set.fromList "\t\n !%&()*+,-/:;<=>?[\\]^{|}~" } (makeWordSet True [ "FALSE" , "NIL" , "TRUE" ]) , rAttribute = DecValTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Keyword KeywordAttr { keywordCaseSensitive = True , keywordDelims = Data.Set.fromList "\t\n !%&()*+,-/:;<=>?[\\]^{|}~" } (makeWordSet True [ "ABS" , "ADR" , "ADRSIZE" , "BITSIZE" , "BYTESIZE" , "CEILING" , "DEC" , "DISPOSE" , "FIRST" , "FLOAT" , "FLOOR" , "INC" , "ISTYPE" , "LAST" , "LOOPHOLE" , "MAX" , "MIN" , "NARROW" , "NEW" , "NUMBER" , "ORD" , "ROUND" , "SUBARRAY" , "TRUNC" , "TYPECODE" , "VAL" ]) , rAttribute = FunctionTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Keyword KeywordAttr { keywordCaseSensitive = True , keywordDelims = Data.Set.fromList "\t\n !%&()*+,-/:;<=>?[\\]^{|}~" } (makeWordSet True [ "Env" , "Env.Count" , "Env.Get" , "Env.GetNth" , "Fmt" , "Fmt.Bool" , "Fmt.Char" , "Fmt.Extended" , "Fmt.F" , "Fmt.FN" , "Fmt.Int" , "Fmt.LongReal" , "Fmt.Pad" , "Fmt.Real" , "Fmt.Unsigned" , "IO" , "IO.EOF" , "IO.GetChar" , "IO.GetInt" , "IO.GetLine" , "IO.GetReal" , "IO.GetWideChar" , "IO.OpenRead" , "IO.OpenWrite" , "IO.Put" , "IO.PutChar" , "IO.PutInt" , "IO.PutReal" , "IO.PutWideChar" , "Lex" , "Lex.Bool" , "Lex.Extended" , "Lex.Int" , "Lex.LongReal" , "Lex.Match" , "Lex.Real" , "Lex.Scan" , "Lex.Skip" , "Lex.Unsigned" , "Params" , "Params.Count" , "Params.Get" , "Rd" , "Rd.CharsReady" , "Rd.Close" , "Rd.Closed" , "Rd.EOF" , "Rd.GetChar" , "Rd.GetLine" , "Rd.GetSub" , "Rd.GetSubLine" , "Rd.GetText" , "Rd.GetWideChar" , "Rd.GetWideLine" , "Rd.GetWideSub" , "Rd.GetWideSubLine" , "Rd.GetWideText" , "Rd.Index" , "Rd.Intermittend" , "Rd.Length" , "Rd.Seek" , "Rd.Seekable" , "Rd.UnGetChar" , "Scan" , "Scan.Bool" , "Scan.Extended" , "Scan.Int" , "Scan.LongReal" , "Scan.Real" , "Scan.Unsigned" , "Text" , "Text.Cat" , "Text.Compare" , "Text.Empty" , "Text.Equal" , "Text.FindChar" , "Text.FindCharR" , "Text.FindWideChar" , "Text.FindWideCharR" , "Text.FromChars" , "Text.FromWideChars" , "Text.GetChar" , "Text.GetWideChar" , "Text.HasWideChar" , "Text.Hash" , "Text.Length" , "Text.SetChars" , "Text.SetWideChars" , "Text.Sub" , "Wr" , "Wr.Buffered" , "Wr.Close" , "Wr.Closed" , "Wr.Flush" , "Wr.Index" , "Wr.Length" , "Wr.PutChar" , "Wr.PutString" , "Wr.PutText" , "Wr.PutWideChar" , "Wr.PutWideString" , "Wr.PutWideText" , "Wr.Seek" , "Wr.Seekable" ]) , rAttribute = FunctionTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = RegExpr RE { reString = "\\b[\\+|\\-]{0,1}[0-9]{1,}\\.[0-9]{1,}([E|e|D|d|X|x][\\+|\\-]{0,1}[0-9]{1,}){0,1}\\b" , reCompiled = Just (compileRegex True "\\b[\\+|\\-]{0,1}[0-9]{1,}\\.[0-9]{1,}([E|e|D|d|X|x][\\+|\\-]{0,1}[0-9]{1,}){0,1}\\b") , reCaseSensitive = True } , rAttribute = FloatTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = RegExpr RE { reString = "\\b([\\+|\\-]{0,1}[0-9]{1,}|([2-9]|1[0-6])\\_[0-9A-Fa-f]{1,})\\b" , reCompiled = Just (compileRegex True "\\b([\\+|\\-]{0,1}[0-9]{1,}|([2-9]|1[0-6])\\_[0-9A-Fa-f]{1,})\\b") , reCaseSensitive = True } , rAttribute = BaseNTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = DetectChar '"' , rAttribute = StringTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Push ( "Modula-3" , "String1" ) ] } , Rule { rMatcher = RegExpr RE { reString = "\\'(.|\\\\[ntrf\\\\'\"]|\\\\[0-7]{3})\\'" , reCompiled = Just (compileRegex True "\\'(.|\\\\[ntrf\\\\'\"]|\\\\[0-7]{3})\\'") , reCaseSensitive = True } , rAttribute = CharTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [] } , Rule { rMatcher = Detect2Chars '<' '*' , rAttribute = OtherTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Push ( "Modula-3" , "Prep1" ) ] } , Rule { rMatcher = Detect2Chars '(' '*' , rAttribute = CommentTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Push ( "Modula-3" , "Comment2" ) ] } ] , cAttribute = NormalTok , cLineEmptyContext = [] , cLineEndContext = [] , cLineBeginContext = [] , cFallthrough = False , cFallthroughContext = [] , cDynamic = False } ) , ( "Prep1" , Context { cName = "Prep1" , cSyntax = "Modula-3" , cRules = [ Rule { rMatcher = Detect2Chars '*' '>' , rAttribute = OtherTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Pop ] } ] , cAttribute = OtherTok , cLineEmptyContext = [] , cLineEndContext = [] , cLineBeginContext = [] , cFallthrough = False , cFallthroughContext = [] , cDynamic = False } ) , ( "String1" , Context { cName = "String1" , cSyntax = "Modula-3" , cRules = [ Rule { rMatcher = DetectChar '"' , rAttribute = StringTok , rIncludeAttribute = False , rDynamic = False , rCaseSensitive = True , rChildren = [] , rLookahead = False , rFirstNonspace = False , rColumn = Nothing , rContextSwitch = [ Pop ] } ] , cAttribute = StringTok , cLineEmptyContext = [] , cLineEndContext = [ Pop ] , cLineBeginContext = [] , cFallthrough = False , cFallthroughContext = [] , cDynamic = False } ) ] , sAuthor = "" , sVersion = "1.01" , sLicense = "LGPL" , sExtensions = [ "*.m3" , "*.i3" , "*.ig" , "*.mg" ] , sStartingContext = "Normal" }