コード例 #1
0
        public static IEnumerable <SearchItem> Print(SearchExpressionContext c)
        {
            var skipCount = 0;

            if (SearchExpression.GetFormatString(c.args[0], out var formatStr))
            {
                skipCount++;
            }

            var outputValueFieldName = System.Guid.NewGuid().ToString("N");

            foreach (var expr in c.args.Skip(skipCount))
            {
                if (expr == null)
                {
                    yield return(null);

                    continue;
                }

                var str     = new List <string>();
                var dataSet = SearchExpression.ProcessValues(expr.Execute(c), outputValueFieldName, item =>
                {
                    var valueStr = SearchExpression.FormatItem(c.search, item, formatStr);
                    str.Add(valueStr);
                    return(valueStr);
                });
                foreach (var item in dataSet)
                {
                    yield return(item);
                }

                Debug.Log($"[{string.Join(",", str)}]");
            }
        }
コード例 #2
0
        public static IEnumerable <SearchItem> Format(SearchExpressionContext c)
        {
            var skipCount = 0;

            if (SearchExpression.GetFormatString(c.args[0], out var formatStr))
            {
                skipCount++;
            }
            var items   = c.args.Skip(skipCount).SelectMany(e => e.Execute(c));
            var dataSet = SearchExpression.ProcessValues(items, null, item => SearchExpression.FormatItem(c.search, item, formatStr));

            return(dataSet);
        }
コード例 #3
0
        public static IEnumerable <SearchItem> Alias(SearchExpressionContext c)
        {
            var aliasSelector = c.args.Last();

            if (c.HasFlag(SearchExpressionExecutionFlags.Expand))
            {
                yield return(SearchExpression.CreateSearchExpressionItem(new SearchExpression(c.args[0], newAlias: aliasSelector.innerText)));
            }
            else
            {
                foreach (var r in c.args[0].Execute(c))
                {
                    if (r == null)
                    {
                        yield return(null);

                        continue;
                    }

                    var hasFormatString = SearchExpression.GetFormatString(aliasSelector, out var formatStr);
                    if (hasFormatString && aliasSelector.types.HasAny(SearchExpressionType.Text))
                    {
                        r.label = SearchExpression.FormatItem(c.search, r, formatStr);
                    }
                    else if (aliasSelector.types.HasAny(SearchExpressionType.Selector))
                    {
                        r.label = SelectorManager.SelectValue(r, c.search, aliasSelector.innerText.ToString()).ToString();
                        yield return(r);
                    }
                    else if (aliasSelector.types.HasAny(SearchExpressionType.Iterable))
                    {
                        bool valueSelected = false;
                        using (c.runtime.Push(r))
                        {
                            foreach (var s in aliasSelector.Execute(c))
                            {
                                if (s != null)
                                {
                                    r.label       = s.value.ToString();
                                    valueSelected = true;
                                    break;
                                }
                                else
                                {
                                    yield return(null);
                                }
                            }
                        }

                        if (!valueSelected)
                        {
                            r.label = r.label = SearchExpression.FormatItem(c.search, r, aliasSelector.innerText.ToString());
                        }
                    }
                    else
                    {
                        c.ThrowError($"Alias selector `{aliasSelector.outerText}` not supported", aliasSelector.outerText);
                    }

                    yield return(r);
                }
            }
        }