Пример #1
0
 public virtual void GenerateDynamicApi(DynamicApi api, CodeWriter s)
 {
     GenerateUsings(s);
     s.AppendLine($"namespace {NameSpace}");
     s.Block(() =>
     {
         s.Out($"public partial class {api.ClassName}");
         s.Block(() =>
         {
             s.Break();
             foreach (var decl in api.Declarations)
             {
                 try
                 {
                     if (decl.ManualOverride || decl.Ignore)
                     {
                         continue;
                     }
                     GenerateApiFunction(decl, s);
                 }
                 catch (Exception e)
                 {
                     s.Out("// Error generating delaration: " + decl.Name);
                     s.Out("// Message: " + e.Message);
                     s.Out("/*");
                     s.Out(e.StackTrace);
                     s.Out("----------------------------");
                     s.Out("Declaration JSON:");
                     s.Out(JObject.FromObject(decl).ToString(Formatting.Indented));
                     s.Out("*/");
                 }
             }
         });
     });
 }
Пример #2
0
        public DynamicApi GetMethod(string name)
        {
            int index = name.IndexOf("_");

            if (index == -1)
            {
                return(null);
            }

            var paymentname = name.Substring(0, index);
            var methodname  = name.Substring(index + 1);

            var paymentmethod = PaymentManager.GetMethod(paymentname);

            if (paymentmethod != null)
            {
                DynamicApi api = new DynamicApi();
                api.Type   = this.GetType();
                api.Method = this.GetType().GetMethod("Callback");
                return(api);
            }
            return(null);
        }
Пример #3
0
        private void ParseDynamicApi(string uri, string classname, string partial_name = null, string stop_at = null)
        {
            Console.WriteLine("Parsing: " + uri);
            var doc = LoadDoc(uri);
            var api = new DynamicApi()
            {
                ClassName   = classname, // name of the class to generate
                PartialName = partial_name,
            };

            _generator.DynamicApis.Add(api);
            var testfile = new TestFile()
            {
                Name = $"{api.ClassName}_{api.PartialName}"
            };

            _generator.TestFiles.Add(testfile);

            HtmlNode class_node = null;

            foreach (var node in doc.DocumentNode.Descendants("dl").Where(x => x.Attributes["class"]?.Value == "class"))
            {
                var code = node.Descendants("code").FirstOrDefault(y => y.Attributes["class"]?.Value == "descname");
                if (code.InnerText.Trim() == classname)
                {
                    class_node = node;
                    break;
                }
            }
            var nodes = class_node.Descendants("dl")
                        .Where(x => x.Attributes["class"]?.Value == "method")
                        .ToList();

            var stopped = false;

            foreach (var node in nodes)
            {
                var dd = node.Descendants("dd").FirstOrDefault();
                if (dd.InnerText.Contains("See torch.") || dd.InnerText.Contains("In-place version"))
                {
                    continue;
                }
                var decl = new Function()
                {
                    ClassName = classname
                };
                //ParseFunctionName(decl, node);
                //ParseDocString(decl, node);
                //if (ManualOverride.Contains(decl.Name)) continue;
                //if (!InMigrationApiList(decl.Name)) continue;
                //ParseReturnValue(decl, node);
                //ParseArguments(decl, node);
                //ParseDefaultValues(decl, node);
                //PostProcess(decl);

                if (stop_at != null && decl.Name == stop_at)
                {
                    stopped = true;
                }
                if (stopped)
                {
                    decl.Ignore = stopped;
                }
                //foreach (var d in InferOverloads(decl))
                //api.Declarations.Add(d);

                // see if there are any examples which we can convert to test cases
                //var testcase = ParseTests(decl, node);
                //if (testcase != null)
                //testfile.TestCases.Add(testcase);
            }
        }