1 #Region "Microsoft.VisualBasic::210f46f223a8f1d6fbfc0ee881b7b986, Microsoft.VisualBasic.Core\Scripting\VBLanguage.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 VBLanguage
35     
36     '         Properties: Words
37     
38     '         Constructor: (+1 OverloadsSub New
39     '         Function: AutoEscapeVBKeyword
40     
41     
42     ' /********************************************************************************/
43
44 #End Region
45
46 Imports System.Runtime.CompilerServices
47
48 Namespace Scripting.SymbolBuilder
49
50     ''' <summary>
51     ''' Keyword processor of the VB.NET language
52     ''' </summary>
53     Public NotInheritable Class VBLanguage
54
55         ''' <summary>
56         ''' List of VB.NET language keywords
57         ''' </summary>
58         Public Const VBKeywords$ =
59             "|AddHandler|AddressOf|Alias|And|AndAlso|As|" &
60             "|Boolean|ByRef|Byte|" &
61             "|Call|Case|Catch|CBool|CByte|CChar|CDate|CDec|CDbl|Char|CInt|Class|CLng|CObj|Const|Continue|CSByte|CShort|CSng|CStr|CType|CUInt|CULng|CUShort|" &
62             "|Date|Decimal|Declare|Default|Delegate|Dim|DirectCast|Do|Double|" &
63             "|Each|Else|ElseIf|End|EndIf|Enum|Erase|Error|Event|Exit|" &
64             "|False|Finally|For|Friend|Function|" &
65             "|Get|GetType|GetXMLNamespace|Global|GoSub|GoTo|" &
66             "|Handles|" &
67             "|If|Implements|Imports|In|Inherits|Integer|Interface|Is|IsNot|" &
68             "|Let|Lib|Like|Long|Loop|" &
69             "|Me|Mod|Module|MustInherit|MustOverride|MyBase|MyClass|" &
70             "|Namespace|Narrowing|New|Next|Not|Nothing|NotInheritable|NotOverridable|NameOf|" &
71             "|Object|Of|On|Operator|Option|Optional|Or|OrElse|Overloads|Overridable|Overrides|" &
72             "|ParamArray|Partial|Private|Property|Protected|Public|" &
73             "|RaiseEvent|ReadOnly|ReDim|REM|RemoveHandler|Resume|Return|" &
74             "|SByte|Select|Set|Shadows|Shared|Short|Single|Static|Step|Stop|String|Structure|Sub|SyncLock|" &
75             "|Then|Throw|To|True|Try|TryCast|TypeOf|" &
76             "|Variant|" &
77             "|Wend|" &
78             "|UInteger|ULong|UShort|Using|" &
79             "|When|While|Widening|With|WithEvents|WriteOnly|" &
80             "|Xor|" &
81             "|Yield|"
82
83         ''' <summary>
84         ''' 匹配一个合法的标识符,在正则匹配的时候应该不区分大小写
85         ''' </summary>
86         Public Const IdentiferPattern$ = "\[?[_a-z][_a-z0-9]*\]?"
87
88         ''' <summary>
89         ''' Tokenize of <see cref="VBKeywords"/>
90         ''' </summary>
91         ''' <returns></returns>
92         Public ReadOnly Property Words As String()
93             <MethodImpl(MethodImplOptions.AggressiveInlining)>
94             Get
95                 Return VBKeywords _
96                     .Split("|"c) _
97                     .Where(Function(s) Not s.StringEmpty) _
98                     .ToArray
99             End Get
100         End Property
101
102         Private Sub New()
103         End Sub
104
105         ''' <summary>
106         ''' Escaping the vb variable name when it conflicts with VB keywords name, 
107         ''' this function can be using for the VB.NET related code generator.
108         ''' </summary>
109         ''' <param name="name$">The identifier name.</param>
110         ''' <returns>If the identifier is a VB.NET keyword, then it will be escaping and returns, 
111         ''' otherwise, will do nothing, function returns the raw input identifier.
112         ''' </returns>
113         Public Shared Function AutoEscapeVBKeyword(name$) As String
114             If InStr(VBKeywords, $"|{name}|", CompareMethod.Text) > 0 Then
115                 Return $"[{name}]"
116             Else
117                 Return name
118             End If
119         End Function
120     End Class
121 End Namespace