[Gambas-devel] 2. still now the best LineAnalyze (you should compile after)

Charlie Reinl Karl.Reinl at ...16...
Fri Aug 20 03:57:48 CEST 2004


Salut,

based on gambas-0.97
like I said yesterday :
	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.

What I need:
Guy who makes a copy from app/gambas then they start gambas opening that copy 
and choosing FEditor.Class file.
Up from PUBLIC SUB edtEditor_Cursor()  they select and replace it with my 
PUBLIC SUB edtEditor_Cursor()   and all the follwed lines.
Then press F5, a new gambas IDE will start, open a gambas project from you 
(better is a copy from)  and choose a class or a module file to opening.
Start from the first line and press the UP Button till you reache the end of 
the file.
Press F5.
If an Error raise, please send my that line where the error occure.
And have a look to the other lines if there are no well formatet lines.
If you think a line is not well formated , send me that line.

And then open the next Class or module  file and do the same.
I need  examples to finish the LineAnalyze.
Thanks

Amicalement
Charlie

PS that code is based on gambas-0.97 (not  gambas-0.97a)

'----------------------------------------------------------
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 iPart[nI - 1] <> 2 THEN ' Symbol 
and Keyword
                    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