public void WriteSyntax(SyntaxBuilder builder)
        {
            builder.Line("var request = new Dictionary<string, string>");
            builder.Block(() =>
            {
                var parameters = Method.Parameters?.ToArray() ?? Array.Empty <ApiMethodParameter>();

                for (int i = 0; i < parameters.Length; i++)
                {
                    var parameter = parameters[i];

                    var mappingString = GetParameterMappingString(
                        parameter.Name.ToBeautifiedName(StringCase.Camel),
                        parameter.GetCSharpType());

                    builder.Line($"{{\"{parameter.Name}\", {mappingString}}},");
                }
            }, insertSemicolon: true);

            builder.Line();
            builder.Line($"return RequestManager.CreateRequestAsync<{Response.GetCSharpType()}>(\"{Method.FullName}\", accessToken, request);");
        }
Пример #2
0
        public void NewSyntax()
        {
            const string s         = @"
assignment = identifier, assignmentsymbol, anyvalue;

space = ? whitespace ?;
assignmentcharacter = '=' | ':';
assignmentsymbol = {space}, assignmentcharacter, {space};

identifier = {identifierchar};
identifierchar = lletter | uletter | '-' | digit;

anyvalue = integer | boolean;

integer = {digit};

true =  'true' |'yes'|'on' |'1';
false = 'false'|'no' |'off'|'0';
boolean = true|false;

digit =   '0'|'1'|'2'|'3'|'4'|'5'|'6'|'7'|'8'|'9';
lletter = 'a'|'b'|'c'|'d'|'e'|'f'|'g'|'h'|'i'|'j'|'k'|'l'|'m'|'n'|'o'|'p'|'q'|'r'|'s'|'t'|'u'|'v'|'w'|'x'|'y'|'z';
uletter = 'A'|'B'|'C'|'D'|'E'|'F'|'G'|'H'|'I'|'J'|'K'|'L'|'M'|'N'|'O'|'P'|'Q'|'R'|'S'|'T'|'U'|'V'|'W'|'X'|'Y'|'Z';
";
            var          tokenizer = new Tokenizer();

            tokenizer.AddSpecialSequence("whitespace", " ", "\t", "\n", "\r");
            var token = tokenizer.Parse(s);

            Assert.IsNotNull(token);

            var sb        = new SyntaxBuilder();
            var newSyntax = sb.Build(token);

            const string s2 = @"A-1 : 123";

            var tokenizer2 = new Tokenizer();
            var token2     = tokenizer2.Parse(s2, newSyntax);
        }
Пример #3
0
        public void WriteSyntax(SyntaxBuilder builder)
        {
            if (Summary != null)
            {
                Summary.WriteSyntax(builder);
            }

            builder.Line($"public enum {Name}");
            builder.Block(() =>
            {
                foreach (var key in Keys)
                {
                    if (int.TryParse(key.Value, out var intValue))
                    {
                        builder.Line($"{key.Key} = {key.Value},");
                    }
                    else
                    {
                        new CSharpAttribute($"EnumMember(Value = \"{key.Value}\")").WriteSyntax(builder);
                        builder.Line($"{key.Key},");
                    }
                }
            });
        }
Пример #4
0
        static Boolean ProcessFile(CompilerFrontEnd cfe, FileInfo file, int total, int current, Boolean basic = true)
        {
            SyntaxBuilder sb        = null;
            Boolean       OscarKilo = false;
            ConsoleKey    ck;

            while (!OscarKilo)
            {
                sb = new SyntaxBuilder(cfe, file.FullName);
                WriteLine(file.Name);
                SyntaxBuilder.Stages last = (SyntaxBuilder.Stages)(-1);
                while (sb.Step())
                {
                    if (last != sb.Stage)
                    {
                        Write(ConCol.Info, "\r({0}/{1}): {2}", current + 1, total, (last = sb.Stage).ToString());
                    }
                }
                WriteLine();


                if (!sb.OscarKilo)
                {
                    if (!sb.Success)
                    {
                        WriteLine(ConCol.Error, "Unable to process [{0}]:", file.Name);
                    }
                    if (sb.Warns.Count > 0)
                    {
                        WriteLine(ConCol.Warning, "Warnings:");
                        foreach (var m in sb.Warns.AsIndexable())
                        {
                            WriteLine(ConCol.Warning, "{0}) {1}", m.Index + 1, m.Value);
                        }
                        WriteLine();
                    }
                    if (sb.Errors.Count > 0)
                    {
                        WriteLine(ConCol.Error, "Errors:");
                        foreach (var m in sb.Errors.AsIndexable())
                        {
                            WriteLine(ConCol.Error, "{0}) {1}", m.Index + 1, m.Value);
                        }
                        if (sb.Errors.Count > 0)
                        {
                            ExecuteOnError(file.FullName, sb.Errors[0].Location.Value);
                        }
                    }
                    WriteLine("Press anything...");
                    Console.ReadKey(true);

                    ck = CharQuestion("Do you want to (c)ontinue or (t)ry again?", ConsoleKey.C, ConsoleKey.T, ConsoleKey.F);
                    if (ck == ConsoleKey.C)
                    {
                        break;
                    }
                }
                else
                {
                    OscarKilo = true;
                }
            }

            if (sb.Success)
            {
                cfe.UserDefinedDOM = sb.GetFinalDOM(ValidationBuilder.GetExtlessName(file.Name));
            }

            if (sb.Success && !basic)
            {
                String targetName   = paramCopyName == null ? file.Name : paramCopyName;
                String finalTarget  = Path.Combine(paramOutputFolder, targetName);
                String targetPacked = "{0}.packed{1}".Fmt(ValidationBuilder.GetExtlessName(targetName),
                                                          (new FileInfo(targetName)).Extension), finalTargetPacked = null;


                if (paramCopyName != null || paramCrossCheck)
                {
                    CheckOutputFolder();
                    WriteLine(ConCol.Info, "Outputing generated source.");
                    using (var sw = new StreamWriter(finalTarget))
                        sw.Write(cfe.UserDefinedDOM.Express(0));
                    WriteLine(ConCol.Info, "Emitted generated file [{0}].".Fmt(targetName));
                }

                if (paramEmitPacked)
                {
                    finalTargetPacked = Path.Combine(paramOutputFolder, targetPacked);
                    try
                    {
                        using (StreamWriter sw = new StreamWriter(finalTargetPacked))
                            sb.SavePacked(sw);
                        WriteLine(ConCol.Success, "Emitted packed source [{0}].", finalTargetPacked);
                    }
                    catch (Exception e)
                    {
                        WriteLine(ConCol.Error, "Unable to emit packed source of [{0}]: {1}", targetPacked, e.Message);
                        e.BreakException();
                        return(false);
                    }
                }

                if (paramCrossCheck)
                {
                    try
                    {
                        CodeDOMModule A, B;
                        CheckOutputFolder();
                        A = cfe.UserDefinedDOM;

                        if (!ProcessFile(cfe, new FileInfo(finalTarget), total, current))
                        {
                            WriteLine(ConCol.Error, "Cross check failed! Please contact Chaz pronto!");
                            throw new Exception("Cross check failed. Compiler isn't up to standard.");
                        }

                        B = cfe.UserDefinedDOM;

                        var d = CodeDOMComparer.CompareDOM(A, B);

                        if (d.Count == 0)
                        {
                            WriteLine(ConCol.Success, "Crosscheck Original To Copy Success!");
                        }
                        else
                        {
                            WriteLine(ConCol.Warning, "Crosscheck returned differences:");
                            foreach (var item in d.AsIndexable())
                            {
                                WriteLine(ConCol.Warning, "{0}> {1}", item.Index + 1, item.Value.ToString());
                            }
                            throw new Exception("Cross check failed. Compiler isn't up to standard.");
                        }

                        if (paramEmitPacked)
                        {
                            WriteLine(ConCol.Info, "Now cross checking with packed [{0}].", finalTargetPacked);
                            if (!ProcessFile(cfe, new FileInfo(finalTargetPacked), total, current))
                            {
                                WriteLine(ConCol.Error, "Packed cross check failed! Please contact Chaz pronto!");
                                throw new Exception("Packed cross check failed. Compiler isn't up to standard.");
                            }

                            B = cfe.UserDefinedDOM;

                            d = CodeDOMComparer.CompareDOM(A, B);

                            if (d.Count == 0)
                            {
                                WriteLine(ConCol.Success, "Crosscheck Original To Packed Success!");
                            }
                            else
                            {
                                WriteLine(ConCol.Warning, "Packed crosscheck returned differences:");
                                foreach (var item in d.AsIndexable())
                                {
                                    WriteLine(ConCol.Warning, "{0}> {1}", item.Index + 1, item.Value.ToString());
                                }
                                throw new Exception("Packed Cross check failed. Compiler isn't up to standard.");
                            }
                        }

                        cfe.UserDefinedDOM = A;
                    }
                    catch (Exception e)
                    {
                        WriteLine(ConCol.Error, "Crosscheck of file [{0}] failed: {1}".Fmt(targetName, e.Message));
                        e.BreakException();
                        return(false);
                    }
                }
            }
            return(sb.Success);
        }
        protected virtual IBindingBuilder CreateBindingBuilder(object targetObject, string targetPath)
        {
            IBindingBuilder builder = BindingServiceProvider
                                      .BindingProvider
                                      .CreateBuildersFromString(targetObject, ToBindingExpression(targetPath))[0];

            var syntaxBuilder = new SyntaxBuilder <object, object>(builder);

            SetMode(syntaxBuilder);
            SetUpdateSourceTrigger(syntaxBuilder);
            if (HasConverter)
            {
                syntaxBuilder.WithConverter(d => _converter);
            }
            if (HasConverterCulture)
            {
                syntaxBuilder.WithConverterCulture(d => ConverterCulture);
            }
            if (HasConverterParameter)
            {
                syntaxBuilder.WithConverterParameter(d => ConverterParameter);
            }
            if (HasFallback)
            {
                syntaxBuilder.WithFallback(d => Fallback);
            }
            if (HasCommandParameter)
            {
                syntaxBuilder.WithCommandParameter(d => CommandParameter);
            }

            if (ToggleEnabledState.HasValue)
            {
                syntaxBuilder.ToggleEnabledState(ToggleEnabledState.Value);
            }
            if (ValidatesOnExceptions)
            {
                syntaxBuilder.ValidatesOnExceptions();
            }
            if (ValidatesOnNotifyDataErrors)
            {
                syntaxBuilder.ValidatesOnNotifyDataErrors();
            }
            if (TargetNullValue != null)
            {
                syntaxBuilder.WithTargetNullValue(TargetNullValue);
            }
            if (Delay != 0)
            {
                syntaxBuilder.WithDelay(_delay, false);
            }
            if (TargetDelay != 0)
            {
                syntaxBuilder.WithDelay(_targetDelay, true);
            }
            if (HasDefaultValueOnException)
            {
                syntaxBuilder.DefaultValueOnException(DefaultValueOnException);
            }
            return(builder);
        }
Пример #6
0
 public void WriteSyntax(SyntaxBuilder builder)
 {
     builder.Line($"[{Value}]");
 }
 public static ConfigurationBuilder <T> Configure <T>(SyntaxBuilder syntaxBuilder) where T : class
 {
     return(new ConfigurationBuilder <T>(syntaxBuilder));
 }
        protected virtual IBindingBuilder CreateBindingBuilder(object targetObject, string targetPath)
        {
            IBindingBuilder builder = BindingServiceProvider
                .BindingProvider
                .CreateBuildersFromString(targetObject, ToBindingExpression(targetPath))[0];

            var syntaxBuilder = new SyntaxBuilder<object, object>(builder);
            SetMode(syntaxBuilder);
            SetUpdateSourceTrigger(syntaxBuilder);
            if (HasConverter)
                syntaxBuilder.WithConverter(d => _converter);
            if (HasConverterCulture)
                syntaxBuilder.WithConverterCulture(d => ConverterCulture);
            if (HasConverterParameter)
                syntaxBuilder.WithConverterParameter(d => ConverterParameter);
            if (HasFallback)
                syntaxBuilder.WithFallback(d => Fallback);
            if (HasCommandParameter)
                syntaxBuilder.WithCommandParameter(d => CommandParameter);

            if (ToggleEnabledState.HasValue)
                syntaxBuilder.ToggleEnabledState(ToggleEnabledState.Value);
            if (HasStablePath.HasValue)
                syntaxBuilder.HasStablePath(HasStablePath.Value);
            if (Observable.HasValue)
                syntaxBuilder.Observable(Observable.Value);
            if (Optional.HasValue)
                syntaxBuilder.Optional(Optional.Value);
            if (ValidatesOnExceptions)
                syntaxBuilder.ValidatesOnExceptions();
            if (ValidatesOnNotifyDataErrors)
                syntaxBuilder.ValidatesOnNotifyDataErrors();
            if (TargetNullValue != null)
                syntaxBuilder.WithTargetNullValue(TargetNullValue);
            if (Delay != 0)
                syntaxBuilder.WithDelay(_delay, false);
            if (TargetDelay != 0)
                syntaxBuilder.WithDelay(_targetDelay, true);
            if (HasDefaultValueOnException)
                syntaxBuilder.DefaultValueOnException(DefaultValueOnException);
            return builder;
        }