1 #Region "Microsoft.VisualBasic::f9e2af077b8229f146813586afa680d5, Microsoft.VisualBasic.Core\CommandLine\InteropService\SharedORM\CodeGenerator.vb"
2
3     ' Author:
4     
5     '       asuka (amethyst.asuka@gcmodeller.org)
6     '       xie (genetics@smrucc.org)
7     '       xieguigang (xie.guigang@live.com)
8     
9     ' Copyright (c) 2018 GPL3 Licensed
10     
11     
12     ' GNU GENERAL PUBLIC LICENSE (GPL3)
13     
14     
15     ' This program is free software: you can redistribute it and/or modify
16     ' it under the terms of the GNU General Public License as published by
17     ' the Free Software Foundation, either version 3 of the License, or
18     ' (at your option) any later version.
19     
20     ' This program is distributed in the hope that it will be useful,
21     ' but WITHOUT ANY WARRANTY; without even the implied warranty of
22     ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23     ' GNU General Public License for more details.
24     
25     ' You should have received a copy of the GNU General Public License
26     ' along with this program. If not, see <http://www.gnu.org/licenses/>.
27
28
29
30     ' /********************************************************************************/
31
32     ' Summaries:
33
34     '     Class CodeGenerator
35     
36     '         Constructor: (+2 OverloadsSub New
37     '         FunctionEnumeratesAPI, GetManualPage
38     
39     '     Class APITuple
40     
41     '         Properties: API, CLI
42     
43     
44     ' /********************************************************************************/
45
46 #End Region
47
48 Imports System.Reflection
49 Imports System.Runtime.CompilerServices
50 Imports Microsoft.VisualBasic.CommandLine.ManView
51 Imports Microsoft.VisualBasic.CommandLine.Reflection.EntryPoints
52 Imports Microsoft.VisualBasic.ComponentModel.DataSourceModel
53
54 Namespace CommandLine.InteropService.SharedORM
55
56     Public MustInherit Class CodeGenerator
57
58         Protected ReadOnly App As Interpreter
59         ''' <summary>
60         ''' 目标应用程序模块的文件名,不包含有文件拓展名
61         ''' </summary>
62         Protected ReadOnly exe$
63
64         <MethodImpl(MethodImplOptions.AggressiveInlining)>
65         Sub New(CLI As Type)
66             Call Me.New(New Interpreter(type:=CLI))
67         End Sub
68
69         Sub New(App As Interpreter)
70             Me.App = App
71             Me.exe = App.Type _
72                 .Assembly _
73                 .CodeBase _
74                 .BaseName
75         End Sub
76
77         <MethodImpl(MethodImplOptions.AggressiveInlining)>
78         Public Function GetManualPage() As String
79             Return App.HelpSummary(markdown:=False)
80         End Function
81
82         Public MustOverride Function GetSourceCode() As String
83
84         Public Iterator Function EnumeratesAPI() As IEnumerable(Of APITuple)
85             Dim help$
86             Dim CLI As NamedValue(Of CommandLine)
87
88             For Each api As APIEntryPoint In App.APIList
89                 Try
90                     help =
91 $"```
92 {api.Usage.Replace("<", "&lt;")}
93 ```" & vbCrLf & api.Info
94
95                     CLI = New NamedValue(Of CommandLine) With {
96                         .Name = api.EntryPoint.Name,
97                         .Description = help,
98                         .Value = api.Usage.CommandLineModel
99                     }
100
101                     Yield New APITuple With {
102                         .CLI = CLI,
103                         .API = api.EntryPoint
104                     }
105
106                 Catch ex As Exception
107                     ex = New Exception(api.EntryPointFullName(False), ex)
108                     Throw ex
109                 End Try
110             Next
111         End Function
112     End Class
113
114     Public Class APITuple
115
116         Public Property CLI As NamedValue(Of CommandLine)
117         Public Property API As MethodInfo
118
119     End Class
120 End Namespace