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