コード例 #1
0
ファイル: Query.cs プロジェクト: sahwar/QuickInfo
 public Query(string input)
 {
     OriginalInput     = input;
     OriginalInputTrim = OriginalInput.Trim();
     IsHelp            = input == "?" || string.Equals(input, "help", StringComparison.OrdinalIgnoreCase);
     Structure         = StructureParser.Parse(input);
 }
コード例 #2
0
ファイル: SeparatedList.cs プロジェクト: sahwar/QuickInfo
        public T TryGetStructure <T>(int index)
        {
            if (index < 0 || index >= Count)
            {
                return(default(T));
            }

            return(StructureParser.TryGetStructure <T>(Parts[index]));
        }
コード例 #3
0
ファイル: Prefix.cs プロジェクト: sahwar/QuickInfo
        private Prefix TryMatch(string query, string prefix)
        {
            if (query.Length > prefix.Length && query.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
            {
                var remainderString = query.Substring(prefix.Length);
                var parsedRemainder = StructureParser.Parse(remainderString);
                return(new Prefix(PrefixKind, prefix, remainderString, parsedRemainder));
            }

            return(null);
        }
コード例 #4
0
ファイル: SeparatedList.cs プロジェクト: sahwar/QuickInfo
        public IReadOnlyList <T> GetStructuresOfType <T>() where T : IStructureParser
        {
            List <T> result = new List <T>();

            foreach (var part in Parts)
            {
                var instance = StructureParser.TryGetStructure <T>(part);
                if (instance != null)
                {
                    result.Add(instance);
                }
            }

            return(result);
        }
コード例 #5
0
ファイル: UnitParser.cs プロジェクト: sahwar/QuickInfo
        private static Double TryParseUnitValue(string query, int start, int length)
        {
            var parsed = StructureParser.Parse(query.Substring(start, length));
            var number = StructureParser.TryGetStructure <Double>(parsed);

            if (number != null)
            {
                if (StructureParser.TryGetStructure <Integer>(parsed) is Integer i && i.Kind == IntegerKind.Hexadecimal)
                {
                    // don't allow hex numbers with units
                    return(null);
                }
            }

            return(number);
        }
コード例 #6
0
ファイル: SeparatedList.cs プロジェクト: sahwar/QuickInfo
        public object TryParse(string query)
        {
            if (query.IndexOf(separatorCharArray[0]) != -1)
            {
                var parts = query.Split(separatorCharArray, StringSplitOptions.RemoveEmptyEntries);
                if (parts.Length == 0)
                {
                    return(null);
                }

                var parsed = parts.Select(p => StructureParser.Parse(p)).ToArray();
                if (parsed.Any(p => p == null))
                {
                    return(null);
                }

                return(new SeparatedList(parsed, SeparatorChar));
            }

            return(null);
        }
コード例 #7
0
        public object GetResult(Query query)
        {
            if (query.IsHelp)
            {
                return(HelpTable
                       (
                           ("color", "Named color palette"),
                           ("red", "Named color"),
                           ("#FFC0CB", "Hex color"),
                           ("rgb 23 145 175", "RGB"),
                           ("rgb(rnd*255, rnd*255, rnd*255)", "Random RGB color")
                       ));
            }

            var input = query.OriginalInputTrim;

            if (string.Equals(input, "color", StringComparison.OrdinalIgnoreCase) ||
                string.Equals(input, "colors", StringComparison.OrdinalIgnoreCase))
            {
                return(RenderColorTable());
            }

            string knownColor = null;

            if (knownColors.TryGetValue(input.Trim(), out knownColor))
            {
                return(GetResultFromHexString(knownColor));
            }

            if (query.Structure == null)
            {
                return(null);
            }

            SeparatedList list = query.TryGetStructure <SeparatedList>();

            if (list == null)
            {
                var invocation = query.TryGetStructure <Invocation>();
                if (invocation != null &&
                    string.Equals(invocation.Prefix, "rgb", StringComparison.OrdinalIgnoreCase))
                {
                    list = StructureParser.TryGetStructure <SeparatedList>(invocation.ArgumentListParsed);
                    if (list != null && list.Count != 3)
                    {
                        list = null;
                    }
                }
            }

            if (list != null &&
                (list.Count == 3 ||
                 (list.Count == 4 &&
                  (list.TryGetStructure <Keyword>(0) == "rgb" ||
                   list.TryGetStructure <Keyword>(3) == "rgb"))))
            {
                var intList = list.GetStructuresOfType <Integer>();
                if (intList.Count == 3)
                {
                    var r = intList[0].Value;
                    var g = intList[1].Value;
                    var b = intList[2].Value;
                    if (r >= 0 && r < 256 && g >= 0 && g < 256 && b >= 0 && b < 256)
                    {
                        return(GetResult((int)r, (int)g, (int)b));
                    }
                }
            }

            var hashPrefix = query.TryGetStructure <Prefix>();

            if (hashPrefix != null &&
                hashPrefix.PrefixString == "#")
            {
                var remainderString = hashPrefix.RemainderString;
                if (remainderString.Length == 3 || remainderString.Length == 6 || remainderString.Length == 8)
                {
                    var integer = StructureParser.TryGetStructure <Integer>(hashPrefix.Remainder);
                    if (integer != null)
                    {
                        return(GetResultFromHexString(remainderString));
                    }
                }
            }

            return(null);
        }
コード例 #8
0
ファイル: Query.cs プロジェクト: sahwar/QuickInfo
 public T TryGetStructure <T>()
 {
     return(StructureParser.TryGetStructure <T>(Structure));
 }