[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