[Gambas-user] 2. Fwd: while working on PrettyPrinter, changes for the IDE Editor

Benoit Minisini gambas at ...1...
Mon Aug 16 12:03:45 CEST 2004


On Monday 16 August 2004 00:26, Charlie Reinl wrote:
> Sorry guys,
>
> seams that I'm to hurry to day
>
> But has to be tested !!!!
>
> Amicalement

Hi, Charlie.

See my comments below.

>
> ----------  Forwarded Message  ----------
>
> Subject: Fwd: while working on PrettyPrinter, changes for the IDE Editor
> Date: Sunday 15 August 2004 21:25
> From: Charlie Reinl <Karl.Reinl at ...9...>
> To: "gambas-user" <gambas-user at lists.sourceforge.net>
>
> ----------  Forwarded Message  ----------
>
> Subject: while working on PrettyPrinter, changes for the IDE Editor
> Date: Sunday 15 August 2004 20:47
> From: Charlie Reinl <Karl.Reinl at ...9...>
> To: "gambas-user" <gambas-user at lists.sourceforge.net>
>
> Salut,
>
> for understanding the GambasEditor for using it for PrettyPrinter, I play
> around with the IDE Editor and made the following changes in
> PUBLIC SUB edtEditor_Cursor()
>
> 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])
>         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
>
> For what LineAnalyze is for:
>
> Till now it strippes useless Blanks and if you typed a i=i+1 you'v got no
> error more , because LineAnalyze  change it to i = i + 1
>
> It dose only work on line and windows changes, It dosn't work if you press
> a Button (Toolbar) without changing the line.

I could add an event in the GambasEditor that will be raised just after a line 
was colorized, so that you can pretty print it.

>
> To you to play now.
>
> Amicalement
> Charlie
>
> These procs are needed to make changes work ( not GetColorsName if you
> don't uncomment the PRINT line in LineAnalyze)
>
> PUBLIC SUB edtEditor_LostFocus()
>     IF Left(Trim(edtEditor.Lines[$iLastLine]),1) <> "'" AND
> Trim(edtEditor.Lines[$iLastLine])  <> ""THEN
>         edtEditor.Lines[$iLastLine] =
>  LineAnalyze(edtEditor.Lines[$iLastLine]) ENDIF
> END
> '--------------------------------------------------------------------------
>-- PRIVATE FUNCTION LineAnalyze(sLine AS String) AS String
> DIM nI 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
>     FOR nI = 1 TO Len (sLine )
>         IF Mid (sLine , ni , 1 )= " " THEN
>             sLeftBlanks = sLeftBlanks & " "
>         ELSE
>             BREAK
>         ENDIF
>     NEXT
>     edtEditor .Analyze (sLine )

This is faster:

sLeftBlank = String$(len(sLine) - len(ltrim(sLine)), " ")

>     sPart = GambasEditor .Symbols
>     iPart = GambasEditor .Types
>     sBlank = " "
>     FOR nI = 0 TO sPart .Count - 1
>         SELECT CASE sPart [nI ]
>             CASE "." , "(" , ")" , "[" , "]"
>                 sBlank = ""
>             CASE ELSE
>                 sBlank = " "
>         END SELECT
>         IF nI > 0 THEN
>             SELECT CASE sPart [nI - 1 ]
>                 CASE "." , "(" , ")" , "[" , "]"
>                     sBlank = ""
>                 CASE ELSE
>                     sBlank = " "
>             END SELECT
>         ELSE
>             sBlank = " "
>         ENDIF
>         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 ]

Why the following case ?

>                         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

If the previous code was pretty printed, then the result is strange: spaces 
before ']', ')', '[', '.'...

> '--------------------------------------------------------------------------
>-- FUNCTION GetColorsName(iType
>  AS Integer) AS String
> ' this is only to know the Values
> 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
>
>

Regards,

-- 
Benoit Minisini
mailto:gambas at ...1...




More information about the User mailing list