Code:
Public Sub ConvertCode(ByVal Destination As RichTextBox, ByVal source As RichTextBox2)
Dim lngLineCount As Long
Dim lngLinePos As Long
Dim strLineText As String
Dim strLineTextTemp As String
Dim wrdWords() As String
Dim blnMain As Boolean
Dim strFunctionName As String
Dim strHeaderPart As String
Dim strHeaderFunction As String
Dim strLastTart As String
Dim lngDestinationHeaderLen As Long
Dim lngDestinationHeaderPos As Long
Dim lngDestinationActualPos As Long
If source.Text = "" Then Exit Sub
Destination.Text = ""
Destination.SelectedText = "#include <conio.h>" & vbNewLine
Destination.SelectedText = "#include <stdio.h>" & vbNewLine
Destination.SelectedText = "#include <string.h>" & vbNewLine
Destination.SelectedText = "#include <iostream>" & vbNewLine
Destination.SelectedText = "#include <windows.h>" & vbNewLine
Destination.SelectedText = "using namespace std;" & vbNewLine
lngDestinationHeaderLen = Len(Destination.Text)
lngLineCount = source.Lines.Length 'diz-me o numero de linhas
strFunctionName = ""
For lngLinePos = 0 To lngLineCount - 1
strLineText = source.Lines(lngLinePos) 'da-me o texto de 1 linha
If strLineText = "" Then Continue For
wrdWords = ExtendedSplit(strLineText) 'the ExtendedSplit() is for subivide the sentence to words
source.TextPos = New Point(0, lngLinePos)
Destination.SelectionIndent = source.SelectionIndent
Debug.WriteLine(wrdWords(0))
If wrdWords(0) = "End" Then
If blnMain = True And source.SelectionIndent = 0 Then
Destination.SelectionIndent += source.SelectionTabConst
Destination.SelectedText = "return 0;" & vbNewLine
blnMain = False
End If
Destination.SelectionIndent = source.SelectionIndent
Destination.SelectedText = "}"
If lngLinePos < (lngLineCount - 1) Then Destination.SelectedText = vbNewLine
strFunctionName = ""
ElseIf wrdWords(0) = "If" Then
Dim a As Boolean
If wrdWords(wrdWords.Length - 1) = "Then" Then a = True
strLineTextTemp = Replace(strLineText, "=", "==")
strLineTextTemp = Replace(strLineTextTemp, "If", "if ( ")
strLineTextTemp = Replace(strLineTextTemp, "Then", " )" & "{")
If a = True Then
Destination.SelectedText = strLineTextTemp & vbNewLine
Else
Destination.SelectedText = strLineTextTemp & "}" & vbNewLine
End If
ElseIf wrdWords(0) = "ElseIf" Then
Dim a As Boolean
If wrdWords(wrdWords.Length - 1) = "Then" Then a = True
strLineTextTemp = Replace(strLineText, "=", "==")
strLineTextTemp = Replace(strLineTextTemp, "ElseIf", "else if ( ")
strLineTextTemp = Replace(strLineTextTemp, "Then", " )" & "{")
If a = True Then
Destination.SelectedText = strLineTextTemp & vbNewLine
Else
Destination.SelectedText = strLineTextTemp & "}" & vbNewLine
End If
ElseIf wrdWords(0) = "Else" Then
Destination.SelectedText = strLineText & "{" & vbNewLine
ElseIf wrdWords.Length > 2 AndAlso wrdWords(1) = "=" Then
If wrdWords(0) = strFunctionName Then
strLineTextTemp = Replace(strLineText, strFunctionName, "return ")
strLineTextTemp = Replace(strLineTextTemp, "=", " ")
Else
strLineTextTemp = strLineText
End If
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(0) = "Write" = True Then
strLineTextTemp = Replace(strLineText, "Write", "cout << ")
strLineTextTemp = Replace(strLineTextTemp, "//", "; //")
strLineTextTemp = Replace(strLineTextTemp, "+", " << ")
strLineTextTemp = Replace(strLineTextTemp, "(", "")
strLineTextTemp = Replace(strLineTextTemp, ")", "")
strLineTextTemp = Replace(strLineTextTemp, """""", "\""")
strLineTextTemp = Replace(strLineTextTemp, "&", " << ")
strLineTextTemp = Replace(strLineTextTemp, "é", """ << (char) 130 << """)
strLineTextTemp = Replace(strLineTextTemp, "è", """ << (char) 138 << """)
strLineTextTemp = Replace(strLineTextTemp, "à", """ << (char) 133 << """)
strLineTextTemp = Replace(strLineTextTemp, "á", """ << (char) 160 << """)
strLineTextTemp = Replace(strLineTextTemp, "NewLine", " endl; ")
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(0) = "Integer" Then
strLineTextTemp = strLineText
strLineTextTemp = Replace(strLineTextTemp, "Integer", "int")
strLineTextTemp = Replace(strLineTextTemp, "//", "; //")
If wrdWords.Length > 2 AndAlso wrdWords(2) = "=" Then
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords.Length > 2 AndAlso wrdWords(2) = "(" AndAlso IsKeyWord(wrdWords(3)) = True AndAlso strFunctionName = "" Then
strHeaderPart = Mid(Destination.Text, 1, lngDestinationHeaderLen)
strHeaderFunction = strLineTextTemp & ";"
strLastTart = Mid(Destination.Text, lngDestinationHeaderLen, Len(Destination.Text) - lngDestinationHeaderLen + 2)
Destination.Text = strHeaderPart & strHeaderFunction & strLastTart
Destination.SelectionStart = Len(Destination.Text)
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
Else
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
End If
ElseIf wrdWords(0) = "String" = True Then
strLineTextTemp = strLineText
strLineTextTemp = Replace(strLineTextTemp, "String", "string")
strLineTextTemp = Replace(strLineTextTemp, "//", "; //")
If wrdWords.Length > 2 AndAlso wrdWords(2) = "=" Then
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords.Length > 2 AndAlso wrdWords(2) = "(" AndAlso IsKeyWord(wrdWords(3)) = True AndAlso strFunctionName = "" Then
strHeaderPart = Mid(Destination.Text, 1, lngDestinationHeaderLen)
strHeaderFunction = strLineTextTemp & ";"
strLastTart = Mid(Destination.Text, lngDestinationHeaderLen, Len(Destination.Text) - lngDestinationHeaderLen + 2)
Destination.Text = strHeaderPart & strHeaderFunction & strLastTart
Destination.SelectionStart = Len(Destination.Text)
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
Else
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
End If
ElseIf wrdWords(0) = "Read" AndAlso wrdWords(1) = "(" AndAlso wrdWords(2) = ")" Then
strLineTextTemp = Replace(strLineText, "Read()", "getch()")
strLineTextTemp = Replace(strLineTextTemp, "//", "; //")
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(0) = "Read" Then
strLineTextTemp = Replace(strLineText, "Read", "cin >> ")
strLineTextTemp = Replace(strLineTextTemp, "(", " ")
strLineTextTemp = Replace(strLineTextTemp, ")", " ")
strLineTextTemp = Replace(strLineTextTemp, "//", "; //")
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(0) = "Boolean" Then
strLineTextTemp = Replace(strLineText, "Boolean", "bool")
If wrdWords.Length > 2 AndAlso wrdWords(2) = "(" Then
strHeaderPart = Mid(Destination.Text, 1, lngDestinationHeaderLen)
strHeaderFunction = strLineTextTemp & ";"
strLastTart = Mid(Destination.Text, lngDestinationHeaderLen, Len(Destination.Text) - lngDestinationHeaderLen + 2)
Destination.Text = strHeaderPart & strHeaderFunction & strLastTart
Destination.SelectionStart = Len(Destination.Text)
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
Else
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
End If
ElseIf wrdWords(0) = "Char" = True Then
strLineTextTemp = strLineText
If wrdWords(2) = "=" Then
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(2) = "(" And IsKeyWord(wrdWords(3)) = True And strFunctionName = "" Then
lngDestinationActualPos = Destination.SelectedText
Destination.SelectionStart = lngDestinationHeaderPos
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
lngDestinationHeaderPos = Destination.SelectionStart
Destination.SelectionStart = lngDestinationActualPos
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
End If
ElseIf wrdWords(0) = "Float" = True Then
strLineTextTemp = strLineText
If wrdWords(2) = "=" Then
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(2) = "(" And IsKeyWord(wrdWords(3)) = True And strFunctionName = "" Then
strHeaderPart = Mid(Destination.Text, 1, lngDestinationHeaderLen)
strHeaderFunction = strLineTextTemp & ";"
strLastTart = Mid(Destination.Text, lngDestinationHeaderLen, Len(Destination.Text) - lngDestinationHeaderLen + 2)
Destination.Text = strHeaderPart & strHeaderFunction & strLastTart
Destination.SelectionStart = Len(Destination.Text)
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
End If
ElseIf wrdWords(0) = "Double" = True Then
strLineTextTemp = strLineText
If wrdWords(2) = "=" Then
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(2) = "(" And IsKeyWord(wrdWords(3)) = True And strFunctionName = "" Then
strHeaderPart = Mid(Destination.Text, 1, lngDestinationHeaderLen)
strHeaderFunction = strLineTextTemp & ";"
strLastTart = Mid(Destination.Text, lngDestinationHeaderLen, Len(Destination.Text) - lngDestinationHeaderLen + 2)
Destination.Text = strHeaderPart & strHeaderFunction & strLastTart
Destination.SelectionStart = Len(Destination.Text)
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
End If
ElseIf wrdWords(0) = "Byte" = True Then
strLineTextTemp = Replace(strLineText, "Byte", "unsigned char")
If wrdWords(2) = "=" Then
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
ElseIf wrdWords(2) = "(" And IsKeyWord(wrdWords(3)) = True And strFunctionName = "" Then
strHeaderPart = Mid(Destination.Text, 1, lngDestinationHeaderLen)
strHeaderFunction = strLineTextTemp & ";"
strLastTart = Mid(Destination.Text, lngDestinationHeaderLen, Len(Destination.Text) - lngDestinationHeaderLen + 2)
Destination.Text = strHeaderPart & strHeaderFunction & strLastTart
Destination.SelectionStart = Len(Destination.Text)
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = wrdWords(1)
End If
ElseIf wrdWords(0) = "Sub" = True Then
If wrdWords.Length > 1 AndAlso wrdWords(1) = "Main" = True Then
blnMain = True
strLineTextTemp = Replace(strLineText, "Sub Main", "int main")
Destination.SelectedText = strLineTextTemp & vbNewLine & "{" & vbNewLine
strFunctionName = "main"
Else
strLineTextTemp = Replace(strLineText, "Sub", "void")
Destination.SelectedText = strLineTextTemp & vbNewLine
Destination.SelectedText = "{" & vbNewLine
End If
Else
If strLineText <> "" Then
'strLineTextTemp = Replace(strLineText, "&", "+")
strLineTextTemp = Replace(strLineText, """""", "\""")
Destination.SelectedText = strLineTextTemp & ";" & vbNewLine
Else
Destination.SelectedText = vbNewLine
End If
End If
Next lngLinePos
End Sub
- read it line by line do code;
- compare the words for see what type of code is used;
- then i convert the line to C\C++.
but imagine these line:
if a<b then write("hello vbforums" + newline)
is like have 2 parts:
- if a<b then;
-write("hello vbforums" + newline);
so the 1st part is normaly converted and works fine;)
but the 2nd is like a normal another line of code.
so a need a advice for change my procedure, for read that part like another line. can anyone advice me?