1 #Region "Microsoft.VisualBasic::837a84bf30184f8b24ce92c3f6bb41a7, Microsoft.VisualBasic.Core\CommandLine\Reflection\Attributes\Attribute.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 [Optional]
35     
36     '         Properties: Name, Type
37     
38     '         Constructor: (+1 OverloadsSub New
39     '         FunctionToString
40     
41     '     Class UsageAttribute
42     
43     '         Properties: UsageInfo
44     
45     '         Constructor: (+1 OverloadsSub New
46     '         FunctionToString
47     
48     '     Class ExampleAttribute
49     
50     '         Properties: ExampleInfo
51     
52     '         Constructor: (+1 OverloadsSub New
53     '         FunctionToString
54     
55     
56     ' /********************************************************************************/
57
58 #End Region
59
60 Imports System.Reflection
61 Imports System.Text
62 Imports System.Xml.Serialization
63 Imports Microsoft.VisualBasic.ComponentModel.Collection.Generic
64 Imports Microsoft.VisualBasic.Scripting.MetaData
65
66 Namespace CommandLine.Reflection
67
68     ''' <summary>
69     ''' Optional commandline arguments.(本属性标记一个命令行字符串之中的可选参数)
70     ''' </summary>
71     ''' <remarks></remarks>
72     <AttributeUsage(AttributeTargets.Property, AllowMultiple:=False, Inherited:=True)>
73     Public Class [Optional] : Inherits CLIToken
74
75         Dim _type As CLITypes
76
77         Public Overrides ReadOnly Property Name As String
78             Get
79                 Return MyBase.Name
80             End Get
81         End Property
82
83         Public Property Type As CLITypes
84             Get
85                 Return _type
86             End Get
87             Protected Set(value As CLITypes)
88                 _type = value
89             End Set
90         End Property
91
92         ''' <summary>
93         ''' 
94         ''' </summary>
95         ''' <param name="Name">The name value of the target parameter switch which will be marked as an optional parameter.
96         ''' (目标将要被标记为可选参数的命令行参数开关对象)</param>
97         ''' <param name="Type">The data type of the target command line parameter switch, default type is string type.</param>
98         ''' <remarks></remarks>
99         Public Sub New(Name As StringOptional Type As CLITypes = CLITypes.String)
100             Call MyBase.New(Name)
101             Me.Type = Type
102         End Sub
103
104         Public Overrides Function ToString() As String
105             Return String.Format("({0}) {1}", Type.ToString, Name)
106         End Function
107     End Class
108
109     <AttributeUsage(AttributeTargets.All, AllowMultiple:=False, Inherited:=True)>
110     Public Class UsageAttribute : Inherits Attribute
111
112         Public ReadOnly Property UsageInfo As String
113
114         Sub New(usage$)
115             UsageInfo = usage
116         End Sub
117
118         Public Overrides Function ToString() As String
119             Return UsageInfo
120         End Function
121     End Class
122
123     <AttributeUsage(AttributeTargets.All, AllowMultiple:=False, Inherited:=True)>
124     Public Class ExampleAttribute : Inherits Attribute
125
126         Public ReadOnly Property ExampleInfo As String
127
128         Sub New(note$)
129             ExampleInfo = note
130         End Sub
131
132         Public Overrides Function ToString() As String
133             Return ExampleInfo
134         End Function
135     End Class
136 End Namespace