예제 #1
0
 internal static bool IsCompatibleScope(StackMatchExpression expr, ScopeStack scope, ref string matchingKey, ref int depth)
 {
     depth = 0;
     if (scope.Count == 1)
     {
         var result = expr.MatchesStack(scope, ref matchingKey);
         if (result.Item1)
         {
             return(true);
         }
         depth = 1;
     }
     else
     {
         depth = 0;
         while (!scope.IsEmpty)
         {
             var result = expr.MatchesStack(scope, ref matchingKey);
             if (result.Item1)
             {
                 return(true);
             }
             scope = scope.Pop();
             depth++;
         }
     }
     return(false);
 }
예제 #2
0
        internal static TmSnippet ReadSnippet(Stream stream)
        {
            var dict = PDictionary.FromStream(stream);

            string name       = null;
            string content    = null;
            string tabTrigger = null;
            var    scopes     = new List <StackMatchExpression> ();

            PObject val;

            if (dict.TryGetValue("name", out val))
            {
                name = ((PString)val).Value;
            }
            if (dict.TryGetValue("content", out val))
            {
                content = ((PString)val).Value;
            }
            if (dict.TryGetValue("tabTrigger", out val))
            {
                tabTrigger = ((PString)val).Value;
            }
            if (dict.TryGetValue("scope", out val))
            {
                foreach (var scope in ((PString)val).Value.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    scopes.Add(StackMatchExpression.Parse(scope));
                }
            }

            return(new TmSnippet(name, scopes, content, tabTrigger));
        }
예제 #3
0
        internal static TmSetting ReadPreferences(PDictionary dict)
        {
            string name     = null;
            var    scopes   = new List <StackMatchExpression> ();
            var    settings = new Dictionary <string, PObject> ();

            PObject val;

            if (dict.TryGetValue("name", out val))
            {
                name = ((PString)val).Value;
            }
            if (dict.TryGetValue("scope", out val))
            {
                foreach (var scope in ((PString)val).Value.Split(new [] { ',' }, StringSplitOptions.RemoveEmptyEntries))
                {
                    scopes.Add(StackMatchExpression.Parse(scope));
                }
            }
            if (dict.TryGetValue("settings", out val))
            {
                var settingsDictionary = val as PDictionary;
                foreach (var setting in settingsDictionary)
                {
                    settings.Add(setting.Key, setting.Value);
                }
            }

            return(new TmSetting(name, scopes, settings));
        }
예제 #4
0
        internal static bool IsSettingMatch(ScopeStack scopes, StackMatchExpression expr)
        {
            string cs = null;
            int    d  = 0;

            if (EditorTheme.IsCompatibleScope(expr, scopes, ref cs, ref d))
            {
                return(true);
            }
            return(false);
        }
예제 #5
0
        internal ThemeSetting(string name, IReadOnlyList <string> scopes, IReadOnlyDictionary <string, string> settings)
        {
            Name = name;
            var s = new List <StackMatchExpression> ();

            if (scopes != null)
            {
                foreach (var str in scopes)
                {
                    s.Add(StackMatchExpression.Parse(str));
                }
            }
            this.scopes   = s;
            this.settings = settings ?? new Dictionary <string, string> ();
        }
예제 #6
0
        internal static TmSnippet ReadSnippet(Stream stream)
        {
            string name       = null;
            string content    = null;
            string tabTrigger = null;
            var    scopes     = new List <StackMatchExpression> ();

            using (var reader = XmlReader.Create(stream)) {
                while (reader.Read())
                {
                    if (reader.NodeType != XmlNodeType.Element)
                    {
                        continue;
                    }
                    switch (reader.LocalName)
                    {
                    case "content":
                        if (reader.Read())
                        {
                            content = reader.Value;
                        }
                        break;

                    case "tabTrigger":
                        if (reader.Read())
                        {
                            tabTrigger = reader.Value;
                        }
                        break;

                    case "scope":
                        if (reader.Read())
                        {
                            scopes.Add(StackMatchExpression.Parse(reader.Value));
                        }
                        break;

                    case "description":
                        if (reader.Read())
                        {
                            name = reader.Value;
                        }
                        break;
                    }
                }
            }
            return(new TmSnippet(name, scopes, content, tabTrigger));
        }
예제 #7
0
 public ContinueExpression(StackMatchExpression left, StackMatchExpression right)
 {
     this.left  = left;
     this.right = right;
 }
예제 #8
0
 public MinusExpression(StackMatchExpression left) : base(left)
 {
 }
예제 #9
0
 public OrExpression(StackMatchExpression left) : base(left)
 {
 }
예제 #10
0
 public void SetRightSide(StackMatchExpression right)
 {
     this.right = right;
 }
예제 #11
0
 public BinaryExpression(StackMatchExpression left)
 {
     this.left = left;
 }