public static SyntaxMode GetSyntaxMode(TextDocument doc, string mimeType)
        {
            if (string.IsNullOrEmpty(mimeType))
            {
                return(null);
            }
            SyntaxMode result = null;

            if (syntaxModes.ContainsKey(mimeType))
            {
                result = syntaxModes [mimeType].Create(doc);
            }
            else if (syntaxModeLookup.ContainsKey(mimeType))
            {
                try {
                    LoadSyntaxMode(mimeType);
                    result = GetSyntaxMode(doc, mimeType);
                } catch (Exception e) {
                    Console.WriteLine(e);
                }
                syntaxModeLookup.Remove(mimeType);
            }
            if (result != null)
            {
                foreach (var rule in semanticRules.Where(r => r.Item1 == mimeType))
                {
                    result.AddSemanticRule(rule.Item2, rule.Item3);
                }
            }
            return(result);
        }