public GenericMultiValueType(KnownTypesManager.KnownType type,
                                     SyntaxValueAcceptanceConstraint constraint = SyntaxValueAcceptanceConstraint.None, bool isListValue = true)
        {
            Type = type;
            var typeName = type.SkriptRepresentations.FirstOrDefault();

            NextValuePattern = CreateNextValuePatternForType(typeName, constraint, isListValue);
        }
Esempio n. 2
0
 private static string RenderConstraint(SyntaxValueAcceptanceConstraint c)
 {
     return(c switch
     {
         SyntaxValueAcceptanceConstraint.None => "",
         SyntaxValueAcceptanceConstraint.LiteralsOnly => "*",
         SyntaxValueAcceptanceConstraint.NoLiterals => "~",
         SyntaxValueAcceptanceConstraint.VariablesOnly => "^",
         SyntaxValueAcceptanceConstraint.NullWhenOmitted => "-",
         SyntaxValueAcceptanceConstraint.AllowConditionalExpressions => "=",
         _ => throw new ArgumentOutOfRangeException(nameof(c))
     });
 private static SkriptPattern CreateNextValuePatternForType(string?typeName,
                                                            SyntaxValueAcceptanceConstraint constraint, bool isListValue)
 {
     //%type%[[ ](,|or|and)[ ]]
     return(new SkriptPattern
     {
         Children =
         {
             new TypePatternElement
             {
                 Constraint = constraint,
                 Type = typeName
             },
             new OptionalPatternElement
             {
                 Element = new SkriptPattern
                 {
                     Children =
                     {
                         new OptionalPatternElement
                         {
                             Element = new LiteralPatternElement(" ")
                         },
                         new ChoicePatternElement
                         {
                             Elements =
                                 new List <ChoiceGroupElement>
                             {
                                 new LiteralPatternElement(",")
                             }.Concat(
                                 isListValue
                                         ? new ChoiceGroupElement[]
                             {
                                 new LiteralPatternElement("or"),
                                 new LiteralPatternElement("and")
                             }
                                         : Enumerable.Empty <ChoiceGroupElement>()).ToList()
                         },
                         new OptionalPatternElement
                         {
                             Element = new LiteralPatternElement(" ")
                         }
                     }
                 }
             }
         }
     });
 }
Esempio n. 4
0
        public void TypePatternConstraintsAreCorrect(string code, SyntaxValueAcceptanceConstraint expected)
        {
            var element = new TypePatternElement(code);

            Assert.Equal(expected, element.Constraint);
        }
 public static bool HasFlagFast(this SyntaxValueAcceptanceConstraint value, SyntaxValueAcceptanceConstraint flag)
 {
     return((value & flag) != 0);
 }