private static int Main(string[] args) { if (!args.Any() || args.Length > 2) { var projectName = Assembly.GetExecutingAssembly().GetName().Name; Console.WriteLine( "Generates a C# class file containing wrappers for Neovim API " + "functions and events.\n\n" + $"Usage: dotnet run --project {projectName}.csproj output.cs [nvim src]\n\n" + "output.cs\t\toutput path of the generated C# class file" + "nvim src\t\tpath to the Neovim source directory for generating documentation"); return(1); } if (args.First() == DoxygenParser.DoxygenFilterArgument) { DoxygenParser.FilterDoxygenInput(args[1]); return(0); } var outputPath = args.First(); var nvimSrcDirectory = args.ElementAtOrDefault(1); using (var docs = string.IsNullOrEmpty(nvimSrcDirectory) ? null : new DoxygenParser(nvimSrcDirectory)) { NvimAPIGenerator.GenerateCSharpFile(outputPath, docs?.GetDocumentation()); } return(0); }
private void Parse(string text) { // Clear stream from all invalid tokens _tokens.RemoveAll(d => d.IsEOF || (!d.IsMarker && d.Length == 0)); // @FIXME(final): Right know, the tokens are not in a valid range // Reason is: No tokens gets replaced by another range. // Also there are zero-length tokens or start/end tokens #if false // Validate stream { LinkedListStream <BaseToken> tokenStream = new LinkedListStream <BaseToken>(_tokens); while (!tokenStream.IsEOF) { var tokenNode = tokenStream.CurrentNode; if (tokenNode.Next != null) { int endIndex = tokenNode.Value.Index; int startIndex = tokenNode.Next.Value.Index; Debug.Assert(startIndex >= endIndex); } tokenStream.Next(); } } #endif Stopwatch timer = new Stopwatch(); // Doxygen parsing int doxyNodeCount = 0; timer.Restart(); using (DoxygenParser doxyParser = new DoxygenParser(this, text)) { doxyParser.ParseTokens(_tokens); _errors.InsertRange(0, doxyParser.ParseErrors); _doxyTree = doxyParser.Root; doxyNodeCount = doxyParser.TotalNodeCount; } timer.Stop(); Debug.WriteLine($"Doxygen parse done, took {timer.Elapsed.ToMilliseconds()} ms"); _performanceItems.Add(new PerformanceItemModel(this, TabIndex, $"{_tokens.Count} tokens", $"{doxyNodeCount} nodes", "Doxygen parser", timer.Elapsed)); // C++ parsing timer.Restart(); int cppNodeCount = 0; using (CppParser cppParser = new CppParser(this)) { cppParser.GetDocumentationNode += (token) => { IBaseNode result = _doxyTree.FindNodeByRange(token.Range); return(result); }; cppParser.ParseTokens(_tokens); _errors.InsertRange(0, cppParser.ParseErrors); _cppTree = cppParser.Root; cppNodeCount = cppParser.TotalNodeCount; } timer.Stop(); Debug.WriteLine($"C++ parse done, took {timer.Elapsed.ToMilliseconds()} ms"); _performanceItems.Add(new PerformanceItemModel(this, TabIndex, $"{_tokens.Count} tokens", $"{cppNodeCount} nodes", "C++ parser", timer.Elapsed)); }
static void Main(string[] args) { int parser = 3; // 0:Doxygen; 1:Java; 2: .NET; 3:Wiki int generator = 3; //0:Word; 1:Latex; 2:HTML, 3:Wiki if(args.Length == 2) { parser = Int32.Parse(args[0]); generator = Int32.Parse(args[1]); } Parser p = new Parser(); IDocumentGenerator dg; DocumentTemplate t = DocumentTemplate.GroupByKindTemplate; switch (parser) { case 0: DoxygenParser dp = new DoxygenParser(@"..\..\doxygen\xml\index.xml"); p.Index = dp.Index; p.Model = dp.Model; break; case 1: JavaDocParser jdp = new JavaDocParser(@"..\..\javadoc\html\overview-summary.html"); p.Index = jdp.Index; p.Model = jdp.Model; break; case 2: NetParser np = new NetParser(@"..\..\NET"); p.Index = np.Index; p.Model = np.Model; break; default: Console.WriteLine("Invalid type."); return; } switch(generator) { case 0: dg = new WordGenerator(@"ApiDoc.docx", true, WordGenerator.WordTemplate.Elegant); if (t == DocumentTemplate.GroupByKindTemplate) { dg.SetContent(true, 2); } else { dg.SetContent(true, 3); } break; case 1: dg = new LatexGenerator(@"..\..\ApiDoc.tex"); if (t == DocumentTemplate.GroupByKindTemplate) { dg.SetContent(true, 1); } else { dg.SetContent(true, 2); } break; case 2: dg = new HTMLGenerator(@"..\..\", HTMLGenerator.GenerateMode.AllInOne, "Java"); break; case 3: dg = new WikiGenerator(@"..\..\ApiDoc.wiki"); break; default: return; } try { DocPrinter docp = new DocPrinter(dg, p.Model); docp.print(); } catch (Exception ex) { Console.WriteLine(ex); } Console.ReadKey(); }