1 #Region "Microsoft.VisualBasic::6fb2ed20b45a699c4c701e22d8e822c5, Microsoft.VisualBasic.Core\CommandLine\Reflection\Attributes\ExportAPI.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 LastUpdatedAttribute
35     
36     '         Constructor: (+2 OverloadsSub New
37     '         FunctionToString
38     
39     '     Class ExportAPIAttribute
40     
41     '         Properties: Example, Info, Name, Type, Usage
42     
43     '         Constructor: (+1 OverloadsSub New
44     '         Function: __printView, __printViewHTML, GenerateHtmlDoc, PrintView, ToString
45     
46     '     Interface IExportAPI
47     
48     '         Properties: Example, Info, Name, Usage
49     
50     
51     ' /********************************************************************************/
52
53 #End Region
54
55 Imports System.Text
56 Imports Microsoft.VisualBasic.Scripting.MetaData
57
58 Namespace CommandLine.Reflection
59
60     <AttributeUsage(AttributeTargets.Method, AllowMultiple:=False, Inherited:=True)>
61     Public Class LastUpdatedAttribute : Inherits Attribute
62
63         Public ReadOnly [Date] As Date
64
65         Sub New([date] As String)
66             Me.Date = Date.Parse([date])
67         End Sub
68
69         Sub New(yy%, mm%, dd%, H%, M%, S%)
70             Me.Date = New Date(yy, mm, dd, H, M, S)
71         End Sub
72
73         Public Overrides Function ToString() As String
74             Return [Date].ToString
75         End Function
76     End Class
77
78     ''' <summary>
79     ''' A command object that with a specific name.(一个具有特定名称命令执行对象)
80     ''' </summary>
81     ''' <remarks></remarks>
82     <AttributeUsage(AttributeTargets.Method, AllowMultiple:=False, Inherited:=True)>
83     Public Class ExportAPIAttribute : Inherits Attribute
84         Implements IExportAPI
85
86         ''' <summary>
87         ''' The name of the commandline object.(这个命令的名称)
88         ''' </summary>
89         ''' <value></value>
90         ''' <returns></returns>
91         ''' <remarks></remarks>
92         Public ReadOnly Property Name As String Implements IExportAPI.Name
93         ''' <summary>
94         ''' Something detail of help information.(详细的帮助信息)
95         ''' </summary>
96         ''' <value></value>
97         ''' <returns></returns>
98         ''' <remarks></remarks>
99         Public Property Info As String Implements IExportAPI.Info
100         ''' <summary>
101         ''' The usage of this command.(这个命令的用法,本属性仅仅是一个助记符,当用户没有编写任何的使用方法信息的时候才会使用本属性的值)
102         ''' </summary>
103         ''' <value></value>
104         ''' <returns></returns>
105         ''' <remarks></remarks>
106         Public Property Usage As String Implements IExportAPI.Usage
107         ''' <summary>
108         ''' A example that to useing this command.
109         ''' (对这个命令的使用示例,本属性仅仅是一个助记符,当用户没有编写任何示例信息的时候才会使用本属性的值,
110         ''' 在编写帮助示例的时候,需要编写出包括命令开关名称的完整的例子)
111         ''' </summary>
112         ''' <value></value>
113         ''' <returns></returns>
114         ''' <remarks></remarks>
115         Public Property Example As String Implements IExportAPI.Example
116
117         ''' <summary>
118         ''' You are going to define a available export api for you application to another language or scripting program environment.
119         ''' (定义一个命令行程序之中可以使用的命令)
120         ''' </summary>
121         ''' <param name="Name">The name of the commandline object or you define the exported API name here.(这个命令的名称)</param>
122         ''' <remarks></remarks>
123         Sub New(<Parameter("Command.Name""The name of the commandline object.")> Name As String)
124             _Name = Name
125         End Sub
126
127         Public Overrides Function ToString() As String
128             Return Name
129         End Function
130
131         Public Function PrintView(HTML As BooleanAs String
132             If HTML Then
133                 Return __printViewHTML()
134             Else
135                 Return __printView()
136             End If
137         End Function
138
139         Private Function __printView()
140             Dim sbr As StringBuilder = New StringBuilder(1024)
141             Call sbr.AppendLine($"{NameOf(Name)}    = ""{Name}""")
142             Call sbr.AppendLine($"{NameOf(Info)}    = ""{Info}""")
143             Call sbr.AppendLine($"{NameOf(Usage)}   = ""{Usage}""")
144             Call sbr.AppendLine($"{NameOf(Example)} = ""{Example}""")
145
146             Return sbr.ToString
147         End Function
148
149         Private Function __printViewHTML() As String
150             Return ExportAPIAttribute.GenerateHtmlDoc(Me, """")
151         End Function
152
153         Public Shared Function GenerateHtmlDoc(Command As IExportAPI, addNode As String, addValue As StringAs String
154             Dim add As String = If(Not String.IsNullOrEmpty(addValue), $"           <tr>
155     <td>{addNode}</td>
156     <td>{addValue}</td>
157   </tr>", "")
158
159             Return $"<p>Help for ""{Command.Name}"":</p>
160 <table frame=""hsides"">
161   <tr>
162     <th>DocNode</th>
163     <th>Content Text</th>
164                  <th><a href=""#""><strong><font size=3>[&#8593;]</font></strong></a></th>
165   </tr>
166   <tr>
167     <td><strong>{NameOf(Name)}</strong></td>
168     <td><strong><a name=""{Command.Name}"">{Command.Name}</a></strong></td>
169   </tr>
170                 <tr>
171     <td>{NameOf(Info)}</td>
172     <td>{Command.Info}</td>
173   </tr>
174                 <tr>
175     <td>{NameOf(Usage)}</td>
176     <td>{Command.Usage}</td>
177   </tr>
178                 <tr>
179     <td>{NameOf(Example)}</td>
180     <td>{Command.Example}</td>
181   </tr>
182     {add}
183 </table>"
184         End Function
185
186         Public Shared ReadOnly Property Type As Type = GetType(ExportAPIAttribute)
187     End Class
188
189     Public Interface IExportAPI
190
191         ''' <summary>
192         ''' The name of the commandline object.(这个命令的名称)
193         ''' </summary>
194         ''' <value></value>
195         ''' <returns></returns>
196         ''' <remarks></remarks>
197         ReadOnly Property Name As String
198         ''' <summary>
199         ''' Something detail of help information.(详细的帮助信息)
200         ''' </summary>
201         ''' <value></value>
202         ''' <returns></returns>
203         ''' <remarks></remarks>
204         ReadOnly Property Info As String
205         ''' <summary>
206         ''' The usage of this command.(这个命令的用法,本属性仅仅是一个助记符,当用户没有编写任何的使用方法信息的时候才会使用本属性的值)
207         ''' </summary>
208         ''' <value></value>
209         ''' <returns></returns>
210         ''' <remarks></remarks>
211         ReadOnly Property Usage As String
212         ''' <summary>
213         ''' A example that to useing this command.(对这个命令的使用示例,本属性仅仅是一个助记符,当用户没有编写任何示例信息的时候才会使用本属性的值)
214         ''' </summary>
215         ''' <value></value>
216         ''' <returns></returns>
217         ''' <remarks></remarks>
218         ReadOnly Property Example As String
219     End Interface
220 End Namespace