Advertisement
filmee24

functionparser

Dec 9th, 2012
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 5.14 KB | None | 0 0
  1. Imports System.Windows.Forms
  2. Imports System.ComponentModel
  3.  
  4. Namespace Common.Util
  5.  
  6.     <DefaultEvent("OnExecuting")>
  7.     Public Class FunctionComponent
  8.  
  9.         Public Property Functions As New List(Of FunctionItem)
  10.         Public Property Source As String = ""
  11.         Public Property Errors As New List(Of String)
  12.  
  13.         Public Event OnExecuting(e As FunctionItem)
  14.  
  15.         Public Sub Execute(s As String)
  16.             If s.EndsWith(";") AndAlso Not s = "" Then
  17.                 Source += s & vbCrLf
  18.  
  19.                 Dim item As New FunctionItem
  20.                 item.Name = s.Split("(")(0)
  21.  
  22.                 If item.Name.Contains(".") Then
  23.                     item.Class = item.Name.Split(".")(0)
  24.                     item.Name = item.Name.Split(".")(1)
  25.                 End If
  26.  
  27.                 Dim argumentlist As String = s.Middle("(", ")")
  28.  
  29.                 If argumentlist.Contains(",") Then
  30.                     Dim args As String() = argumentlist.Split(",")
  31.  
  32.                     For Each l In args
  33.                         Dim arg As New Argument
  34.                         arg.Value = l
  35.                         arg.Type = ParseType(arg)
  36.  
  37.                         item.Arguments.Add(arg)
  38.                     Next
  39.                 Else
  40.                     Dim arg As New Argument
  41.                     arg.Value = argumentlist
  42.                     arg.Type = ParseType(arg)
  43.  
  44.                     item.Arguments.Add(arg)
  45.                 End If
  46.  
  47.                 Functions.Add(item)
  48.  
  49.                 RaiseEvent OnExecuting(item)
  50.             Else
  51.                 MessageBox.Show("Cannot executing command, please check if you leave the ;")
  52.             End If
  53.         End Sub
  54.  
  55.         Public Function ArgumentError(arguments As List(Of Argument), argumentcount As Integer, funcname As String) As Boolean
  56.             ' If arguments.Count < argumentcount Then
  57.             ' Errors.Add("Es wurden in der Funktion '" & funcname & "' zu viele Argumente angegeben!")
  58.             ' Return True
  59.             '   ElseIf arguments.Count > argumentcount Then
  60.             'Errors.Add("Es wurden in der Funktion '" & funcname & "' zu wenige Argumente angegeben!")
  61.             'Return True
  62.             '  Else
  63.             ' Return False
  64.             ' End If
  65.             If arguments.Count = argumentcount Then
  66.                 Return True
  67.             Else
  68.                 Errors.Add("Es wurden in der Funktion '" & funcname & "' zu wenige oder zu viele Argumente angegeben!")
  69.                 Return False
  70.             End If
  71.         End Function
  72.  
  73.         Public Function Replace(s As String) As String
  74.             Return s.Replace("%Desktop%", Environment.GetFolderPath(Environment.SpecialFolder.Desktop)) _
  75.                 .Replace("%Documents%", Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) _
  76.             .Replace("%ProgrammFiles%", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles)) _
  77.             .Replace("%ProgrammFiles86%", Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86)) _
  78.             .Replace("%nl%", Environment.NewLine) _
  79.             .Replace("%tab%", vbTab)
  80.         End Function
  81.  
  82.         Public Sub ExecuteFile(file As String)
  83.             For Each line As String In IO.File.ReadAllLines(file)
  84.                 Execute(line)
  85.             Next
  86.         End Sub
  87.  
  88.         Public Sub ExecuteSource(source As RichTextBox)
  89.             For Each line As String In source.Lines
  90.                 Execute(line)
  91.             Next
  92.         End Sub
  93.  
  94.         Private Function ParseType(s As Argument) As ArgumentType
  95.             If s.Value.IsInteger Then
  96.                 Return ArgumentType.Integer
  97.             ElseIf s.Value.IsBoolean Then
  98.                 Return ArgumentType.Boolean
  99.             ElseIf isstring(s) Then
  100.                 If s.Value.IsValidUrl() Then
  101.                     Return ArgumentType.URLString
  102.                 ElseIf s.Value.isValidMail Then
  103.                     Return ArgumentType.MailString
  104.                 Else
  105.                     Return ArgumentType.String
  106.                 End If
  107.             Else
  108.                 Return ArgumentType.String
  109.             End If
  110.         End Function
  111.         Private Function isstring(s As Argument) As String
  112.             If s.Value.StartsWith("'") AndAlso s.Value.EndsWith("'") Then
  113.                 Try
  114.                     s.Value = s.Value.Remove(0, 1)
  115.                     s.Value = s.Value.Remove(s.Value.Length - 1, 1)
  116.                 Catch
  117.                 End Try
  118.                 Return True
  119.             Else
  120.                 Return False
  121.             End If
  122.         End Function
  123.  
  124.         Public Class FunctionItem
  125.  
  126.             Public Property [Class] As String
  127.             Public Property Name As String
  128.             Public Property Arguments As New List(Of Argument)
  129.  
  130.         End Class
  131.         Public Class Argument
  132.             Public Property Value As String
  133.             Public Property Type As ArgumentType
  134.         End Class
  135.         Public Enum ArgumentType
  136.             [String] = 0
  137.             [Integer] = 1
  138.             [Boolean] = 2
  139.             [URLString] = 3
  140.             [MailString] = 4
  141.         End Enum
  142.  
  143.     End Class
  144.  
  145. End Namespace
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement