[Gambas-devel] 1. still now the best LineAnalyze (you can compile after)
Charlie Reinl
Karl.Reinl at ...16...
Tue Aug 17 23:35:56 CEST 2004
Salut,
better then yesterday, but not as good like tomorrow he will be.
Hope you are carefully use that, i don't want crash your code.
But I need code lines where it dosn't compile or has spaces on wrong places.
Amicalement
Charlie
'--------------------------
PUBLIC SUB edtEditor_Cursor()
DIM sModifLine AS String
IF edtEditor.Line <> $iLastLine THEN
' changings charlie
IF Left(Trim(edtEditor.Lines[$iLastLine]) , 1) <> "'" AND
Trim(edtEditor.Lines[$iLastLine]) <> "" THEN
sModifLine = LineAnalyze(edtEditor.Lines[$iLastLine] , $iLastLine)
IF sModifLine <> edtEditor.Lines[$iLastLine] THEN
edtEditor.Lines[$iLastLine] = sModifLine
edtEditor.Refresh
ENDIF
ENDIF
' end changings charlie
$iLastLine = edtEditor.Line
HideCompletion
HideSignature
IF IsModified() THEN Scan = NULL
ELSE IF $bCheckSignature OR frmSignature.Visible THEN
$bCheckSignature = FALSE
CheckSignature
ENDIF
DrawTitle
' TRY PRINT Editor.Analyze(Editor.Lines[Editor.Line]).Join(",")
END
'--------------------------
PUBLIC SUB edtEditor_LostFocus()
DIM sModifLine AS String
IF Left(Trim(edtEditor.Lines[$iLastLine]) , 1) <> "'" AND
Trim(edtEditor.Lines[$iLastLine]) <> "" THEN
sModifLine = LineAnalyze(edtEditor.Lines[$iLastLine] , $iLastLine)
IF sModifLine <> edtEditor.Lines[$iLastLine] THEN
edtEditor.Lines[$iLastLine] = sModifLine
edtEditor.Refresh
ENDIF
ENDIF
END
'--------------------------
PRIVATE FUNCTION LineAnalyze(sLine AS String,iLine AS Integer) AS String
DIM nI AS Integer
DIM nJ AS Integer
DIM sOut AS String
DIM sPart AS String[]
DIM iPart AS Integer[]
DIM aSPart AS Object
DIM sLeftBlanks AS String
DIM sBlank AS String
IF IsProc(Trim(sLine)) THEN RETURN sLine
IF Upper(Trim(sLine)) = "END" THEN RETURN sLine
' looking for leading Blanks
sLeftBlanks = String$(Len(sLine) - Len(LTrim(sLine)) , " ")
' analysing Line
edtEditor.Analyze(sLine)
' reading Symbols
sPart = GambasEditor.Symbols
' reading Types
iPart = GambasEditor.Types
sBlank = " "
' set the sBlank
FOR nI = 0 TO sPart.Count - 1
' if legth Operator > 1 exepte some
IF iPart[nI] = 4 AND Len(sPart[nI]) > 1 THEN
SELECT CASE sPart[nI]
CASE "<>"
CASE "<="
CASE ">="
CASE "&/"
CASE ELSE
sPart[nI] = Left(sPart[nI] , 1) & " " & Mid(sPart[nI] , 2)
sOut = sOut & " " & sPart[nI]
FOR nJ = ni + 1 TO sPart.Count - 1
sOut = sOut & " " & sPart[nJ]
NEXT
edtEditor.Lines[iLine] = sLeftBlanks & Trim(sOut)
RETURN LineAnalyze(edtEditor.Lines[iLine] , iLine)
END SELECT
ENDIF
SELECT CASE sPart[nI]
CASE "."
sBlank = ""
IF nI > 0 THEN
IF iPart[nI - 1] <> 5 AND sPart[nI - 1] <> "LINE" THEN '
Symbol and Keyword "LINE"
sBlank = " "
ENDIF
ENDIF
CASE "("
sBlank = ""
IF nI > 0 THEN
IF iPart[nI - 1] <> 3 AND iPart[nI - 1] <> 5 THEN ' Function
and Symbol
sBlank = " "
ENDIF
ENDIF
CASE ")" , "[" , "]"
sBlank = ""
CASE ELSE
IF nI > 0 THEN
SELECT CASE sPart[nI - 1]
CASE "." , "(" , "["
sBlank = ""
CASE ELSE
sBlank = " "
END SELECT
ELSE
sBlank = " "
ENDIF
END SELECT
SELECT CASE iPart[nI]
CASE 5 ' Symbol
' here you can look up if this Symbol is written as declaret
sOut = sOut & sBlank & sPart[nI]
CASE 6 ' Number
IF nI > 0 THEN
SELECT CASE iPart[nI - 1]
CASE 5 ' Symbol
sOut = sOut & sBlank & Left(sPart[nI] , 1) & " " &
Mid(sPart[nI] , 2)
CASE ELSE
sOut = sOut & sBlank & sPart[nI]
END SELECT
ELSE
sOut = sOut & sBlank & sPart[nI]
ENDIF
CASE ELSE
sOut = sOut & sBlank & sPart[nI]
END SELECT
PRINT sPart[nI] , iPart[nI] , GetColorsName(iPart[nI])
NEXT
sOut = sLeftBlanks & Trim(sOut)
RETURN sOut
END
'--------------------------
FUNCTION GetColorsName(iType AS Integer) AS String
DIM sOut AS String
SELECT CASE iType
CASE edtEditor.Colors.Background
sOut = "Background"
CASE edtEditor.Colors.Breakpoint
sOut = "Breakpoint"
CASE edtEditor.Colors.Comment
sOut = "Comment"
CASE edtEditor.Colors.Current
sOut = "Current"
CASE edtEditor.Colors.DataType
sOut = "DataType"
CASE edtEditor.Colors.Function
sOut = "Function"
CASE edtEditor.Colors.Keyword
sOut = "Keyword"
CASE edtEditor.Colors.Normal
sOut = "Normal"
CASE edtEditor.Colors.Number
sOut = "Number"
CASE edtEditor.Colors.Operator
sOut = "Operator"
CASE edtEditor.Colors.String
sOut = "String"
CASE edtEditor.Colors.Symbol
sOut = "Symbol"
CASE ELSE
sOut = "??"
END SELECT
RETURN sOut
END
More information about the Devel
mailing list