[Gambas-user] gambas IDE - Editor

Charlie karl.reinl at ...9...
Tue Aug 17 01:10:08 CEST 2004


Salut Benoît,

started that in gambas-user so I keep staying.
update for ')&'

Thanks for testing:
Here is the full update to manage ')&' had to pass the line to 
LineAnalyze for recursiv calling.
Added  edtEditor.Refresh for visibility of edtitor colors

Amicalement
Charlie

Update :

PUBLIC SUB edtEditor_Cursor()
    IF edtEditor.Line <> $iLastLine THEN
'       changings charlie
        IF Left(Trim(edtEditor.Lines[$iLastLine]) , 1) <> "'" AND Trim(edtEditor.Lines[$iLastLine]) <> "" THEN
            edtEditor.Lines[$iLastLine] = LineAnalyze(edtEditor.Lines[$iLastLine] , $iLastLine)
            edtEditor.Refresh
        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()
    IF Left(Trim(edtEditor.Lines[$iLastLine]) , 1) <> "'" AND Trim(edtEditor.Lines[$iLastLine]) <> "" THEN
        edtEditor.Lines[$iLastLine] = LineAnalyze(edtEditor.Lines[$iLastLine] , $iLastLine)
        edtEditor.Refresh
    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)
    sPart = GambasEditor.Symbols
    iPart = GambasEditor.Types
    sBlank = " "
'   set the sBlank
    FOR nI = 0 TO sPart.Count - 1
'       if legth Operator > 1  
        IF iPart[nI] = 4 AND Len(sPart[nI]) > 1 THEN
            SELECT CASE sPart[nI]
                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 = ""
            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 User mailing list