Example #1
0
        public static ScriptLineView CreateOrError(int lineIndex, string lineText,
                                                   IReadOnlyList <Token> tokens, VisualElement container, bool hideParameters)
        {
            errors.Clear();
            var model = commandLineParser.Parse(lineText, tokens, errors)?.Command;

            if (model is null || errors.Count > 0)
            {
                return(Error(errors.FirstOrDefault()));
            }

            var meta = projectMeta.commands.FirstOrDefault(c => (c.id?.EqualsFastIgnoreCase(model.Identifier) ?? false) ||
                                                           (c.alias?.EqualsFastIgnoreCase(model.Identifier) ?? false));

            if (meta is null)
            {
                return(Error($"Unknown command: `{model.Identifier}`"));
            }

            var nameLabel = new Label(model.Identifier.Text.FirstToLower());

            nameLabel.name = "InputLabel";
            nameLabel.AddToClassList("Inlined");

            var commandLineView = new CommandLineView(lineIndex, container);

            commandLineView.Content.Add(nameLabel);
            commandLineView.CommandId      = model.Identifier;
            commandLineView.hideParameters = hideParameters;

            foreach (var paramMeta in meta.@params)
            {
                var data = new ParameterFieldData {
                    Id       = string.IsNullOrEmpty(paramMeta.alias) ? paramMeta.id.FirstToLower() : paramMeta.alias,
                    Value    = GetValueFor(paramMeta),
                    Nameless = paramMeta.nameless
                };
                if (commandLineView.ShouldShowParameter(data))
                {
                    commandLineView.AddParameterField(data);
                }
                else
                {
                    commandLineView.delayedAddFields.Add(data);
                }
            }

            return(commandLineView);

            ErrorLineView Error(string e) => new ErrorLineView(lineIndex, lineText, container, model?.Identifier, e);

            string GetValueFor(ProjectMetadata.ParameterMetadata m)
            {
                var param = model.Parameters.FirstOrDefault(p => p.Identifier.Text.EqualsFastIgnoreCase(m.id) ||
                                                            p.Identifier.Text.EqualsFastIgnoreCase(m.alias));

                return(param?.Value);
            }
        }
Example #2
0
 private void AddParameterField (ParameterFieldData data)
 {
     var textField = new LineTextField(data.Id, data.Value ?? string.Empty);
     if (data.Nameless) textField.tooltip = data.Name;
     else textField.AddToClassList("NamedParameterLabel");
     parameterFields.Add(textField);
     // Show the un-assigned named parameters only when hovered or focused.
     if (data.Nameless || !hideParameters || !string.IsNullOrEmpty(data.Value))
         Content.Add(textField);
 }
        public static ScriptLineView CreateOrError(int lineIndex, string lineText, VisualElement container, bool hideParameters)
        {
            var commandBodyText = lineText.GetAfterFirst(CommandScriptLine.IdentifierLiteral);
            var commandId       = commandBodyText.GetBefore(" ") ?? commandBodyText.GetBefore("\t") ?? commandBodyText.Trim();
            var commandType     = Command.ResolveCommandType(commandId);

            if (commandType is null)
            {
                return(Error("Failed to resolve command type."));
            }

            var commandLineView = new CommandLineView(lineIndex, container);

            var nameLabel = new Label(commandId);

            nameLabel.name = "InputLabel";
            nameLabel.AddToClassList("Inlined");
            commandLineView.Content.Add(nameLabel);
            commandLineView.CommandId      = commandId;
            commandLineView.hideParameters = hideParameters;

            var paramFields = commandType.GetFields(BindingFlags.Public | BindingFlags.Instance)
                              .Where(f => typeof(ICommandParameter).IsAssignableFrom(f.FieldType));
            var paramValues = typeof(Command).GetMethod("ExtractParameters", BindingFlags.Static | BindingFlags.NonPublic)
                              .Invoke(null, new[] { commandBodyText, string.Empty }) as LiteralMap <string>;

            foreach (var paramField in paramFields)
            {
                var paramAlias = paramField.GetCustomAttribute <Command.ParameterAliasAttribute>()?.Alias;
                var paramId    = paramAlias ?? char.ToLowerInvariant(paramField.Name[0]) + paramField.Name.Substring(1);
                var nameless   = string.IsNullOrEmpty(paramId);

                paramValues.TryGetValue(paramId, out var valueText);
                if (valueText is null)
                {
                    paramValues.TryGetValue(paramField.Name, out valueText);
                }

                var data = new ParameterFieldData {
                    Id = paramId, Name = paramField.Name, Value = valueText, Nameless = nameless
                };
                if (!data.Nameless && hideParameters && string.IsNullOrEmpty(data.Value))
                {
                    commandLineView.delayedAddFields.Add(data); // Add un-assigned fields on hover for better init performance.
                }
                else
                {
                    commandLineView.AddParameterField(data);
                }
            }

            return(commandLineView);

            ErrorLineView Error(string error) => new ErrorLineView(lineIndex, lineText, container, commandId, error);
        }
Example #4
0
        private void AddParameterField(ParameterFieldData data)
        {
            data.Field = new LineTextField(data.Nameless ? "" : data.Id, DecodeValue(data.Value ?? ""));
            if (!data.Nameless)
            {
                data.Field.AddToClassList("NamedParameterLabel");
            }
            parameterFields.Add(data);
            if (ShouldShowParameter(data))
            {
                Content.Add(data.Field);
            }

            string DecodeValue(string value)
            {
                if (value.WrappedIn("\"") && value.Any(char.IsWhiteSpace))
                {
                    return(value.Substring(1, value.Length - 2));
                }
                return(value);
            }
        }
Example #5
0
 private bool ShouldShowParameter(ParameterFieldData data)
 {
     return(!hideParameters || data.Nameless || !string.IsNullOrEmpty(data.Value));
 }