Einen Code-Editor per RichTextBox nachbauen, Teil 2
12.08.2019, 00:00 Uhr
Sprachdefinitionen
Die Sprachdefinitionen für Visual Basic .NET und C# werden implementiert.
Nachdem im ersten Teil dieser Serie [1] die Verwaltungseigenschaften für Sprachen im selbst geschriebenen Code-Editor SyntaxEditCtl eingerichtet wurden, können nun die Sprachen vordefiniert werden. Dafür zuständig ist die Methode InitLanguage, der die zu aktivierende Sprache per Parameter der Enumeration Languages übergeben wird. In der Prozedur erfolgt das sprachspezifische Aufbereiten vordefinierter Wortlisten per Select-Case-Auswahl. Derzeit sind die Sprachen Visual Basic .NET und C# vordefiniert. Die Sprachdefinition für VB.NET gibt der Code in Listing 1 wieder, die für C# finden Sie in Listing 2. Die Liste für Visual Basic definiert auch Inhalte, die Sie in anderen Sprachen nicht finden, wie etwa die speziellen VB-Konstanten oder Enumerationen. Welche Inhalte über die einzelnen Wortlisten verwaltet werden, wurde bereits in [1] erläutert.
Listing 1: Sprachdefinition VB.NET (Auszug)
' Das vollständige Listing finden Sie im Download zu
' diesem Artikel
Sub InitLanguage(ByVal Language As Languages)
Select Case Language
Case Languages.VisualBasic
FileSuffix = eSuffix.vb
' Schlüsselwörter
KeyWords = New List(Of String)({
"AddHandler", "Alias", "As", "ByRef",
"ByVal", "Call", "Case", ... "WriteOnly",
"#Const", "#Else", "#ElseIf", "#End", "#If"
})
' Standarddatentypen
DataTypes = New List(Of String)({
"Boolean", "Byte", "Char", "Date", "Decimal",
"Double", "Integer", ..., "ULong", "UShort"
})
' Operatoren
Operators = New List(Of String)({
"=", "&", "&=", ..., "IsTrue", "AddressOf",
"Await", "GetType"
})
' Konstanten
Constants = New List(Of String)({
"vbCrLf", "vbCr", "vbLf", ..., "vbFormFeed",
"vbVerticalTab"
})
' Enumerationen
Enums = New List(Of String)({
"AppWinStyle", "AudioPlayMode", "BuiltInRole",
..., "VariantType", "VbStrConv"
})
' Sprachspezifische Funktionen
LanguageSpecificFunctions =
New List(Of String)({"ChDir", "ChDrive",
"FileCopy", "MkDir", ..., "Write",
"WriteLine"
})
' Kommentare (Kennungen)
Comments = New List(Of String)({"REM", "'"})
' String-Marker
StringMarker = New List(Of String)({Chr(34)})
' Sonderdatentypen, feste Bezeichner oder
' Definitionen (mit Stern eingeleitet)
' ToDo: benutzerdefinierte Datentypen
SpecialDataType = New List(Of String)({
"List", "*Structure", "*Enum"})
'ToDo: AutoComplete-Strukturen
AutoCompleteList = New List(Of String)({
"If-ElseIf-Else-End If", "While-End While",
..., "Using-End Using"})
Case Languages.CSharp
' siehe Listing 2
End Select
End Sub
' diesem Artikel
Sub InitLanguage(ByVal Language As Languages)
Select Case Language
Case Languages.VisualBasic
FileSuffix = eSuffix.vb
' Schlüsselwörter
KeyWords = New List(Of String)({
"AddHandler", "Alias", "As", "ByRef",
"ByVal", "Call", "Case", ... "WriteOnly",
"#Const", "#Else", "#ElseIf", "#End", "#If"
})
' Standarddatentypen
DataTypes = New List(Of String)({
"Boolean", "Byte", "Char", "Date", "Decimal",
"Double", "Integer", ..., "ULong", "UShort"
})
' Operatoren
Operators = New List(Of String)({
"=", "&", "&=", ..., "IsTrue", "AddressOf",
"Await", "GetType"
})
' Konstanten
Constants = New List(Of String)({
"vbCrLf", "vbCr", "vbLf", ..., "vbFormFeed",
"vbVerticalTab"
})
' Enumerationen
Enums = New List(Of String)({
"AppWinStyle", "AudioPlayMode", "BuiltInRole",
..., "VariantType", "VbStrConv"
})
' Sprachspezifische Funktionen
LanguageSpecificFunctions =
New List(Of String)({"ChDir", "ChDrive",
"FileCopy", "MkDir", ..., "Write",
"WriteLine"
})
' Kommentare (Kennungen)
Comments = New List(Of String)({"REM", "'"})
' String-Marker
StringMarker = New List(Of String)({Chr(34)})
' Sonderdatentypen, feste Bezeichner oder
' Definitionen (mit Stern eingeleitet)
' ToDo: benutzerdefinierte Datentypen
SpecialDataType = New List(Of String)({
"List", "*Structure", "*Enum"})
'ToDo: AutoComplete-Strukturen
AutoCompleteList = New List(Of String)({
"If-ElseIf-Else-End If", "While-End While",
..., "Using-End Using"})
Case Languages.CSharp
' siehe Listing 2
End Select
End Sub
Jetzt 1 Monat kostenlos testen!
Sie wollen zukünftig auch von den Vorteilen eines plus-Abos profitieren? Werden Sie jetzt dotnetpro-plus-Kunde.
- + Digitales Kundenkonto,
- + Zugriff auf das digitale Heft,
- + Zugang zum digitalen Heftarchiv,
- + Auf Wunsch: Weekly Newsletter,
- + Sämtliche Codebeispiele im digitalen Heftarchiv verfügbar