Ejemplo n.º 1
0
        private IBuilder GetBuilder(Builtin builtin)
        {
            if (builtin == null)
            {
                throw new ArgumentNullException("builtin");
            }

            //获取当前构件的构建器对象
            IBuilder builder = builtin.Plugin.GetBuilder(builtin.BuilderName);

            if (builder == null)
            {
                throw new PluginException(string.Format(@"The name is '{0}' of Builder not found in '{1}' plugin." + Environment.NewLine + "{2}", builtin.BuilderName, builtin.Plugin.Name, builtin.Plugin.FilePath));
            }

            return(builder);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Converts a shader resource into a builtin shader.
        /// </summary>
        /// <param name="shader">Shader resource to convert.</param>
        /// <returns>Type of builtin shader, if any.</returns>
        private BuiltinShader ShaderToBuiltin(Shader shader)
        {
            // Note: Need a better way to detect the builtin shader perhaps (store it in Material?)
            Shader standardShader    = Builtin.GetShader(BuiltinShader.Standard);
            Shader transparentShader = Builtin.GetShader(BuiltinShader.Transparent);

            ;            if (standardShader == shader)
            {
                return(BuiltinShader.Standard);
            }
            else if (transparentShader == shader)
            {
                return(BuiltinShader.Transparent);
            }

            return(BuiltinShader.Custom);
        }
        /// <summary>
        /// Converts a shader resource into a builtin shader.
        /// </summary>
        /// <param name="shader">Shader resource to convert.</param>
        /// <returns>Type of builtin shader, if any.</returns>
        private BuiltinShader ShaderToBuiltin(Shader shader)
        {
            // Note: Might be nice to have a better way to detect the builtin shader perhaps (store it in Material?)
            //   - Or I could just compare UUID's here to avoid loading the shaders
            var enumValues = Enum.GetValues(typeof(BuiltinShader));

            for (int i = 1; i < enumValues.Length; i++)
            {
                Shader builtinShader = Builtin.GetShader((BuiltinShader)i);
                if (builtinShader == shader)
                {
                    return((BuiltinShader)i);
                }
            }

            return(BuiltinShader.Custom);
        }
Ejemplo n.º 4
0
        private BuilderContext(IBuilder builder, Builtin builtin, object parameter, object owner, PluginTreeNode ownerNode)
        {
            _builder  = builder ?? throw new ArgumentNullException(nameof(builder));
            _builtin  = builtin ?? throw new ArgumentNullException(nameof(builtin));
            _appender = builder as IAppender;

            _parameter = parameter;
            _owner     = owner;
            _ownerNode = ownerNode;

            if (builtin.HasBehaviors)
            {
                _cancel = builtin.Behaviors.GetBehaviorValue <bool>(builtin.BuilderName + ".break");
            }

            _syncRoot = new object();
        }
Ejemplo n.º 5
0
        /// <inheritdoc/>
        protected internal override void Initialize()
        {
            Material material = InspectedObject as Material;

            if (material == null)
            {
                return;
            }

            Shader        activeShader = material.Shader;
            BuiltinShader builtinType  = ShaderToBuiltin(activeShader);

            builtinShaderField       = new GUIEnumField(typeof(BuiltinShader), new LocEdString("Shader"));
            builtinShaderField.Value = (ulong)builtinType;
            builtinShaderField.OnSelectionChanged += x =>
            {
                BuiltinShader newBuiltinType = (BuiltinShader)x;

                material.Shader = Builtin.GetShader(newBuiltinType);
                EditorApplication.SetDirty(material);
                RebuildParamGUI(material);

                bool newIsCustom = newBuiltinType == BuiltinShader.Custom;
                shaderField.Active = newIsCustom;
            };

            shaderField            = new GUIResourceField(typeof(Shader), new LocEdString("Shader file"));
            shaderField.Value      = material.Shader;
            shaderField.OnChanged += (x) =>
            {
                Shader shader = Resources.Load <Shader>(x);

                material.Shader = shader;
                EditorApplication.SetDirty(material);
                RebuildParamGUI(material);
            };

            bool isCustom = builtinType == BuiltinShader.Custom;

            shaderField.Active = isCustom;

            Layout.AddElement(builtinShaderField);
            Layout.AddElement(shaderField);

            RebuildParamGUI(material);
        }
Ejemplo n.º 6
0
        private void BuildChild(Builtin builtin, object parameter, object owner, PluginTreeNode ownerNode)
        {
            //获取当前构件的构建器对象
            IBuilder builder = this.GetBuilder(builtin);

            if (builtin.IsBuilded)
            {
                if (owner != null && builder is IAppender appender)
                {
                    appender.Append(new AppenderContext(builtin.Context, builtin.Value, builtin.Node, owner, ownerNode, AppenderBehavior.Append));
                }
            }
            else
            {
                this.BuildCore(builder, BuilderContext.CreateContext(builder, builtin, parameter, owner, ownerNode), null, null);
            }
        }
Ejemplo n.º 7
0
        public override object Build(BuilderContext context)
        {
            Builtin         builtin       = context.Builtin;
            IOptionProvider provider      = null;
            string          providerValue = builtin.Properties.GetRawValue("provider");

            var node = new OptionNode(builtin.Name,
                                      builtin.Properties.GetValue <string>("title"),
                                      builtin.Properties.GetValue <string>("description"));

            if (string.IsNullOrWhiteSpace(providerValue))
            {
                return(node);
            }

            switch (providerValue.Trim().ToLower())
            {
            case ".":
            case "plugin":
                provider = OptionUtility.GetConfiguration(builtin.Plugin);
                break;

            case "/":
            case "application":
                provider = context.PluginContext.ApplicationContext.Configuration;
                break;

            default:
                provider = builtin.Properties.GetValue <IOptionProvider>("provider");
                break;
            }

            if (provider == null)
            {
                throw new PluginException(string.Format("Cann't obtain OptionProvider with '{0}'.", providerValue));
            }

            node.Option = new Option(node, provider)
            {
                View        = context.Builtin.Properties.GetValue <IOptionView>("view"),
                ViewBuilder = context.Builtin.Properties.GetValue <IOptionViewBuilder>("viewBuilder"),
            };

            return(node);
        }
Ejemplo n.º 8
0
        private BuilderContext(IBuilder builder, Builtin builtin, BuilderSettings settings, int depth, object owner, PluginTreeNode ownerNode)
        {
            _builder  = builder ?? throw new ArgumentNullException(nameof(builder));
            _builtin  = builtin ?? throw new ArgumentNullException(nameof(builtin));
            _appender = builder as IAppender;
            _settings = settings;

            _depth     = depth;
            _owner     = owner;
            _ownerNode = ownerNode;

            if (builtin.HasBehaviors)
            {
                _cancel = builtin.Behaviors.GetBehaviorValue <bool>(builtin.Scheme + ".break");
            }

            _syncRoot = new object();
        }
Ejemplo n.º 9
0
        StoreTyped(OldInstance inst)
        {
            uint   size = (uint)Marshal.SizeOf(typeof(PyInstanceObject));
            IntPtr ptr  = this.allocator.Alloc(size);

            CPyMarshal.Zero(ptr, size);

            CPyMarshal.WriteIntField(ptr, typeof(PyObject), "ob_refcnt", 1);
            CPyMarshal.WritePtrField(ptr, typeof(PyObject), "ob_type", this.PyInstance_Type);

            CPyMarshal.WritePtrField(ptr, typeof(PyInstanceObject), "in_class",
                                     this.Store(Builtin.getattr(this.scratchContext, inst, "__class__")));
            CPyMarshal.WritePtrField(ptr, typeof(PyInstanceObject), "in_dict",
                                     this.Store(Builtin.getattr(this.scratchContext, inst, "__dict__")));

            this.map.Associate(ptr, inst);
            return(ptr);
        }
Ejemplo n.º 10
0
        internal ParserContext(string scheme, string text, Builtin builtin, string memberName, Type memberType, object parameter = null)
        {
            if (string.IsNullOrEmpty(scheme))
            {
                throw new ArgumentNullException(nameof(scheme));
            }
            if (builtin == null)
            {
                throw new ArgumentNullException(nameof(builtin));
            }

            this.Scheme     = scheme;
            this.Text       = text ?? string.Empty;
            this.Parameter  = parameter;
            this.MemberName = memberName;
            this.MemberType = memberType;
            this.Node       = builtin.Node;
        }
Ejemplo n.º 11
0
        public int GetExitCode(out object otherCode) {
            otherCode = null;
            object pyObj = PythonExceptions.ToPython(this);

            object args;
            PythonTuple t;

            if (!PythonOps.TryGetBoundAttr(pyObj, "args", out args) ||
                (t = args as PythonTuple) == null ||
                t.__len__() == 0) {
                return 0;
            } else if (Builtin.isinstance(t[0], TypeCache.Int32)) {
                return Converter.ConvertToInt32(t[0]);
            }

            otherCode = t[0];
            return 1;
        }
        private void OnBuiltinShaderFieldChanged(UInt64 value)
        {
            Shader        activeShader   = material.Shader.Value;
            BuiltinShader builtinType    = ShaderToBuiltin(activeShader);
            BuiltinShader newBuiltinType = (BuiltinShader)value;

            if (builtinType == newBuiltinType)
            {
                return;
            }

            material.Shader = Builtin.GetShader(newBuiltinType);
            EditorApplication.SetDirty(material);
            RebuildParamGUI(material);

            bool newIsCustom = newBuiltinType == BuiltinShader.Custom;

            shaderField.Active = newIsCustom;
        }
Ejemplo n.º 13
0
        private BuilderContext(Builtin builtin, object parameter, object owner, PluginTreeNode ownerNode)
        {
            if (builtin == null)
            {
                throw new ArgumentNullException("builtin");
            }

            _builtin   = builtin;
            _parameter = parameter;
            _owner     = owner;
            _ownerNode = ownerNode;

            if (builtin.HasBehaviors)
            {
                _cancel = builtin.Behaviors.GetBehaviorValue <bool>(builtin.BuilderName + ".break");
            }

            _syncRoot = new object();
        }
Ejemplo n.º 14
0
        internal static object ImportLightThrow(CodeContext /*!*/ context, string fullName, PythonTuple from, int level)
        {
            Debug.Assert(level >= 0);

            PythonContext pc = context.LanguageContext;

            var site = pc.ImportSite;

            return(site.Target(
                       site,
                       context,
                       FindImportFunction(context),
                       fullName,
                       Builtin.globals(context),
                       context.Dict,
                       from,
                       level
                       ));
        }
Ejemplo n.º 15
0
        public override Type GetValueType(Builtin builtin)
        {
            //调用基类同名方法
            var type = base.GetValueType(builtin);

            if (type == null)
            {
                //尝试获取value属性值的类型
                if (builtin.Properties.TryGet("value", out var property) && Parsers.Parser.CanParse(property.RawValue))
                {
                    return(Parsers.Parser.GetValueType(property.RawValue, builtin));
                }

                //返回所有者元素类型(如果所有者如果是一个泛型集合的话,否则返回空)
                return(PluginUtility.GetOwnerElementType(builtin.Node));
            }

            return(type);
        }
Ejemplo n.º 16
0
        StoreTyped(OldClass cls)
        {
            uint   size = (uint)Marshal.SizeOf(typeof(PyClassObject));
            IntPtr ptr  = this.allocator.Alloc(size);

            CPyMarshal.Zero(ptr, size);

            CPyMarshal.WriteIntField(ptr, typeof(PyObject), "ob_refcnt", 2); // leak classes deliberately
            CPyMarshal.WritePtrField(ptr, typeof(PyObject), "ob_type", this.PyClass_Type);

            CPyMarshal.WritePtrField(ptr, typeof(PyClassObject), "cl_bases",
                                     this.Store(Builtin.getattr(this.scratchContext, cls, "__bases__")));
            CPyMarshal.WritePtrField(ptr, typeof(PyClassObject), "cl_dict",
                                     this.Store(Builtin.getattr(this.scratchContext, cls, "__dict__")));
            CPyMarshal.WritePtrField(ptr, typeof(PyClassObject), "cl_name",
                                     this.Store(Builtin.getattr(this.scratchContext, cls, "__name__")));

            this.map.Associate(ptr, cls);
            return(ptr);
        }
Ejemplo n.º 17
0
        private Object EvalIdentifier(Identifier identifier, Environment env)
        {
            Object obj = null;

            if (env.TryGetValue(identifier.Value, out obj))
            {
                return(obj);
            }

            Builtin builtin = null;

            if (Builtins.Functions.TryGetValue(identifier.Value, out builtin))
            {
                return(builtin);
            }

            return(new Error()
            {
                Message = $"Identifier not found: {identifier.Value}"
            });
        }
Ejemplo n.º 18
0
        /// <summary>
        /// used by text
        /// </summary>
        /// <param name="value">value name</param>
        /// <returns></returns>
        public Value ResolveValue(string value, ObjectContext ctx)
        {
            var path   = value.Split('.');
            var obj    = this;
            var member = path.First();

            if (path.Length > 1)
            {
                if (Builtin.IsBuiltInVariable(path.First()))
                {
                    obj    = Builtin.GetBuiltInVariable(path.First(), ctx).ToObject();
                    member = path[1];
                }
                else
                {
                    throw new NotImplementedException();
                }
            }

            return(obj.GetMember(member));
        }
Ejemplo n.º 19
0
        public virtual Type GetValueType(Builtin builtin)
        {
            if (builtin.HasValue)
            {
                return(builtin.Value.GetType());
            }

            if (builtin.BuiltinType != null)
            {
                return(builtin.BuiltinType.Type);
            }

            var attribute = (BuilderBehaviorAttribute)Attribute.GetCustomAttribute(this.GetType(), typeof(BuilderBehaviorAttribute), true);

            if (attribute != null)
            {
                return(attribute.ValueType);
            }

            return(null);
        }
Ejemplo n.º 20
0
        public void BuiltinTests()
        {
            // a normal (and best case example)
            Assert.IsNotNull(Builtin.Parse(NCS("NUMBER")));
            Assert.IsTrue(Builtin.IsValid("NUMBER"));

            // other legal (but not always great) examples
            Assert.IsNotNull(Builtin.Parse(NCS("SOME_BUILT-IN")));
            Assert.IsNotNull(Builtin.Parse(NCS("?-._A-Z")));

            Assert.IsTrue(Builtin.IsValid("SOME_BUILT-IN"));
            Assert.IsTrue(Builtin.IsValid("?-._A-Z"));

            // bad examples
            Throws(() => Builtin.Parse(NCS("")));             // cannot be empty
            Throws(() => Builtin.Parse(NCS("4 cannot start with a number")));
            Throws(() => Builtin.Parse(NCS("@ is not allowed")));
            Throws(() => Builtin.Parse(NCS("# is not allowed")));
            Throws(() => Builtin.Parse(NCS("# is not allowed")));
            Throws(() => Builtin.Parse(NCS(" cannot start with space")));
            Throws(() => Builtin.Parse(NCS("aNOPE")));             // cannot contain lowercase letters
        }
Ejemplo n.º 21
0
        /// <summary>
        /// used by text
        /// </summary>
        /// <param name="value">value name</param>
        /// <returns></returns>
        public Value ResolveValue(string value, ObjectContext ctx)
        {
            var path   = value.Split('.');
            var obj    = this;
            var member = path.Last();

            for (int i = 0; i < path.Length - 1; i++)
            {
                var fragment = path[i];

                if (Builtin.IsBuiltInVariable(fragment))
                {
                    obj = Builtin.GetBuiltInVariable(fragment, obj).ToObject();
                }
                else
                {
                    throw new NotImplementedException();
                }
            }

            return(obj.GetMember(member));
        }
Ejemplo n.º 22
0
        public virtual void Destroy(BuilderContext context)
        {
            if (context == null || context.Builtin == null)
            {
                return;
            }

            Builtin builtin = context.Builtin;

            if (builtin.HasValue)
            {
                IDisposable value = builtin.Value as IDisposable;

                if (value != null)
                {
                    value.Dispose();
                }
                else
                {
                    System.Collections.IEnumerable collection = builtin.Value as System.Collections.IEnumerable;

                    if (collection != null)
                    {
                        foreach (object item in collection)
                        {
                            IDisposable disposable = item as IDisposable;

                            if (disposable != null)
                            {
                                disposable.Dispose();
                            }
                        }
                    }
                }

                builtin.Value = null;
            }
        }
Ejemplo n.º 23
0
        internal static object ImportLightThrow(CodeContext /*!*/ context, string fullName, PythonTuple from, int level)
        {
            PythonContext pc = context.LanguageContext;

            if (level == -1)
            {
                // no specific level provided, call the 4 param version so legacy code continues to work
                var site = pc.OldImportSite;
                return(site.Target(
                           site,
                           context,
                           FindImportFunction(context),
                           fullName,
                           Builtin.globals(context),
                           context.Dict,
                           from
                           ));
            }
            else
            {
                // relative import or absolute import, in other words:
                //
                // from . import xyz
                // or
                // from __future__ import absolute_import
                var site = pc.ImportSite;
                return(site.Target(
                           site,
                           context,
                           FindImportFunction(context),
                           fullName,
                           Builtin.globals(context),
                           context.Dict,
                           from,
                           level
                           ));
            }
        }
        public PluginServiceProvider(Builtin builtin) : base(builtin.Name)
        {
            var path = builtin.Properties.GetRawValue("path");

            if (string.IsNullOrWhiteSpace(path))
            {
                if (string.Equals(builtin.FullPath, SERVICES_PATH, StringComparison.OrdinalIgnoreCase))
                {
                    _path = builtin.FullPath;
                }
                else
                {
                    _path = PluginPath.Combine(SERVICES_PATH, builtin.Name);
                }
            }
            else
            {
                _path = path == "." ? builtin.FullPath : path;
            }

            _context     = builtin.Context;
            this.Storage = new PluginServiceStorage(this);
        }
Ejemplo n.º 25
0
        private bool TryGetMember(CodeContext codeContext, object obj, string name, out object value)
        {
            NamespaceTracker nt = obj as NamespaceTracker;

            if (nt != null)
            {
                value = NamespaceTrackerOps.GetCustomMember(codeContext, nt, name);
                return(value != OperationFailed.Value);
            }

            object result = Builtin.getattr(codeContext, obj, name, this);

            if (result == this)
            {
                value = null;
                return(false);
            }
            else
            {
                value = result;
                return(true);
            }
        }
Ejemplo n.º 26
0
        public PluginPredicationContext(string parameter, Builtin builtin, PluginTreeNode node, Plugin plugin)
        {
            _parameter = parameter;

            _builtin = builtin;

            if (builtin != null)
            {
                _node   = builtin.Node;
                _plugin = builtin.Plugin;
            }

            if (node != null)
            {
                _node   = node;
                _plugin = plugin ?? node.Plugin;
            }

            if (plugin != null)
            {
                _plugin = plugin;
            }
        }
Ejemplo n.º 27
0
            private string ReplaceText(string format)
            {
                if (_depth == 2)
                {
                    throw PythonOps.ValueError("Max string recursion exceeded");
                }

                StringBuilder builder = new StringBuilder();

                foreach (PythonTuple pt in StringFormatParser.Parse(format))
                {
                    string text          = (string)pt[0];
                    string fieldName     = (string)pt[1];
                    string formatSpec    = (string)pt[2];
                    string conversionStr = (string)pt[3];
                    char?  conversion    = conversionStr != null && conversionStr.Length > 0 ? conversionStr[0] : (char?)null;

                    builder.Append(text);

                    if (fieldName != null)
                    {
                        // get the argument value
                        object argValue = GetArgumentValue(ParseFieldName(fieldName, true));

                        // apply the conversion
                        argValue = ApplyConversion(conversion, argValue);

                        // handle computed format specifiers
                        formatSpec = ReplaceComputedFormats(formatSpec);

                        // append the string
                        builder.Append(Builtin.format(_context.SharedContext, argValue, formatSpec));
                    }
                }

                return(builder.ToString());
            }
Ejemplo n.º 28
0
 IC_PyFile_WriteObject(IntPtr objPtr, IntPtr filePtr, int use_str)
 {
     try
     {
         object obj = this.Retrieve(objPtr);
         string s;
         if (use_str % 2 == 1)
         {
             s = (string)PythonCalls.Call(Builtin.str, new object[] { obj });
         }
         else
         {
             s = (string)Builtin.repr(this.scratchContext, obj);
         }
         PythonFile file = (PythonFile)this.Retrieve(filePtr);
         file.write(s);
         return(0);
     }
     catch (Exception e)
     {
         this.LastException = e;
         return(-1);
     }
 }
Ejemplo n.º 29
0
        PySequence_Check(IntPtr objPtr)
        {
            object obj = this.Retrieve(objPtr);

            if (Builtin.isinstance(obj, Builtin.xrange))
            {
                return(1);
            }

            // I don't *think* a type's attributes can meaningfully count...
            // TODO: regardless, there must be a better way to do this
            if ((!Builtin.isinstance(obj, TypeCache.PythonType)) &&
                Builtin.hasattr(this.scratchContext, obj, "__len__") &&
                Builtin.hasattr(this.scratchContext, obj, "__getitem__") &&
                Builtin.hasattr(this.scratchContext, obj, "__add__") &&
                Builtin.hasattr(this.scratchContext, obj, "__radd__") &&
                Builtin.hasattr(this.scratchContext, obj, "__mul__") &&
                Builtin.hasattr(this.scratchContext, obj, "__rmul__") &&
                !Builtin.hasattr(this.scratchContext, obj, "__coerce__"))
            {
                return(1);
            }
            return(0);
        }
Ejemplo n.º 30
0
		protected RouteValueDictionary ResolveValues(string text, Builtin builtin)
		{
			RouteValueDictionary result = new RouteValueDictionary();

			if(string.IsNullOrWhiteSpace(text))
				return result;

			var parts = text.Split(',');

			foreach(string part in parts)
			{
				int index = part.IndexOf('=');

				if(index > 0)
				{
					string key = part.Substring(0, index).Trim();

					if(!string.IsNullOrEmpty(key))
					{
						string valueText = part.Substring(index + 1);

						if(string.IsNullOrWhiteSpace(valueText))
							result.Add(key, System.Web.Mvc.UrlParameter.Optional);
						else
							result.Add(key, valueText);
					}
				}
			}

			return result;
		}
Ejemplo n.º 31
0
 /// <summary>
 /// Set a builtin flash variable
 /// </summary>
 /// <param name="name"></param>
 /// <param name="val"></param>
 public virtual void SetBuiltInVariable(string name, Value val)
 {
     Builtin.SetBuiltInVariable(name, this, val);
 }