コード例 #1
0
ファイル: Program.cs プロジェクト: neovim/nvim.net
        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);
        }
コード例 #2
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));
        }
コード例 #3
0
        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();
        }