コード例 #1
0
        public override object Parse(ParserContext context)
        {
            if (string.IsNullOrWhiteSpace(context.Text))
            {
                return(null);
            }

            //处理特殊路径表达式,即获取插件文件路径或目录
            if (context.Text == "~")
            {
                return(context.Plugin.FilePath);
            }
            else if (context.Text == "~/")
            {
                return(System.IO.Path.GetDirectoryName(context.Plugin.FilePath));
            }

            var text = PluginPath.PreparePathText(context.Text, out var mode);

            if (string.IsNullOrWhiteSpace(text))
            {
                throw new PluginException($"Missing argument of the path parser.");
            }

            return(context.Node.Resolve(text, mode, context.MemberType));
        }
コード例 #2
0
        public override Type GetValueType(ParserContext context)
        {
            if (string.IsNullOrWhiteSpace(context.Text))
            {
                return(null);
            }

            //处理特殊路径表达式,即获取插件文件路径或目录
            if (context.Text.StartsWith("~"))
            {
                return(typeof(string));
            }

            var expression = Collections.HierarchicalExpression.Parse(PluginPath.PreparePathText(context.Text));
            var node       = context.Node.Find(expression.Path);

            if (node != null && node.ValueType != null)
            {
                return(PluginUtility.GetMemberType(expression.Accessor, node.ValueType));
            }

            return(null);
        }
コード例 #3
0
        public override Type GetValueType(ParserContext context)
        {
            if (string.IsNullOrWhiteSpace(context.Text))
            {
                return(null);
            }

            //处理特殊路径表达式,即获取插件文件路径或目录
            if (context.Text.StartsWith("~"))
            {
                return(typeof(string));
            }

            var expression = PluginPath.Parse(PluginPath.PreparePathText(context.Text));
            var node       = context.Node.Find(expression.Path);

            if (node != null && node.ValueType != null)
            {
                return(Reflection.MemberAccess.GetMemberType(node.ValueType, expression.Members));
            }

            return(null);
        }